2016-06-05 14 views
0

Ich habe eine Webanwendung erstellt, um eine Tierklinik mit Spring Roo und Gvnix Tools zu verwalten.
ich erstellt die Datenbank mit den Tabellen Veterinär, Besitzer, Haustiere, Dating-, alle diese Tabellen beziehen sich auf 1 bis viele, mit Ausnahme der Tabelle Behandlungen und Medikamente die viele beziehen zu vielen, enthalten diese 2 Tabellen oben eine Zwischentabelle namens _treatment_med_, die dazu dient, zwischen ihnen zu interagieren, verwenden Datenbankmanager MySQL Workbench und MYSQL Server, funktioniert alles perfekt, von der Web-Antragsformulare I erstellen , aktualisieren und löschenBesitzer, Haustiere, Tierärzte, Datierung, Medikamente aber wenn ich versuche, mehr als 2 Datensätze auf Tabelle zu erstellen Behandlungen, die eine Mehrfachauswahl in den Drogen machen, die auf die Tabelle durch Behandlungen ein Tag bezogen haben jspx.Überlastung in Web-Anwendungsserver

<field:select field="Med" id="c_com_clinicaveterinaria_dam_domain_Tratamiento_Med" itemValue="id" items="${medicamentoses}" multiple="true" path="/medicamentoses" z="+hr+pOBWxfr2whYp+joa+OMxAHk="/> 

Die Anwendung ist mir ein Fehler ohne Angabe von da und ich fallen durch volle

I Prozess von der Task-Manager von Windows mit Java (TM) Plattform SE Binary Name (java.exe sehen) steigt auf mehr als +1,800 KB (privater Arbeitsraum), wodurch die Webanwendung fällt.

Problem in diesem Teil des Codes in der AspectJ Klasse für Persistenz des Gvnix mit dem Namen.

privilegierter Aspekt TratamientoBatchService_Roo_GvNIXJpaBatch {

Ich denke, dass der Fehler ist hier.

@Transactional 
public void TratamientoBatchService.create(List<Tratamiento> tratamientoes) { 
for(Tratamiento tratamiento : tratamientoes) { 
    tratamiento.persist(); 
} 
} 

Dies zeigen Fehler mir die IntelliJ IDE-Konsole:

Stacktrace:] with root cause java.lang.OutOfMemoryError: Java heap space 
at java.util.Arrays.copyOf(Arrays.java:3332) 
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:137) 
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:121) 
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:421) 
at java.lang.StringBuffer.append(StringBuffer.java:272) 
at org.apache.commons.lang3.builder.ToStringStyle.appendFieldSeparator(ToStringStyle.java:1503) 
at org.apache.commons.lang3.builder.ToStringStyle.appendFieldEnd(ToStringStyle.java:1526) 
at org.apache.commons.lang3.builder.ToStringStyle.append(ToStringStyle.java:439) 
at org.apache.commons.lang3.builder.ToStringBuilder.append(ToStringBuilder.java:848) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:522) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:683) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:282) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:145) 
at com.clinicaveterinaria.dam.domain.Citas_Roo_ToString.ajc$interMethod$com_clinicaveterinaria_dam_domain_Citas_Roo_ToString$com_clinicaveterinaria_dam_domain_Citas$toString(Citas_Roo_ToString.aj:13) 
at com.clinicaveterinaria.dam.domain.Citas.toString(Citas.java:1) 
at java.lang.String.valueOf(String.java:2994) 
at java.lang.StringBuffer.append(StringBuffer.java:265) 
at org.apache.commons.lang3.builder.ToStringStyle.appendDetail(ToStringStyle.java:586) 
at org.apache.commons.lang3.builder.ToStringStyle.appendInternal(ToStringStyle.java:550) 
at org.apache.commons.lang3.builder.ToStringStyle.append(ToStringStyle.java:436) 
at org.apache.commons.lang3.builder.ToStringBuilder.append(ToStringBuilder.java:848) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.appendFieldsIn(ReflectionToStringBuilder.java:522) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:683) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:282) 
at org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(ReflectionToStringBuilder.java:145) 
at com.clinicaveterinaria.dam.domain.Tratamiento_Roo_ToString.ajc$interMethod$com_clinicaveterinaria_dam_domain_Tratamiento_Roo_ToString$com_clinicaveterinaria_dam_domain_Tratamiento$toString(Tratamiento_Roo_ToString.aj:13) 
at com.clinicaveterinaria.dam.domain.Tratamiento.toString(Tratamiento.java:1) 
at java.lang.String.valueOf(String.java:2994) 
at java.lang.StringBuilder.append(StringBuilder.java:131) 
at java.util.AbstractCollection.toString(AbstractCollection.java:462) 
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:317) 
at java.lang.String.valueOf(String.java:2994) 

Ich habe versucht, den Maven-Server von der IDE IntelliJ IDEA zu konfigurieren, dass die Größe des Speichers zu erhöhen, die durch „standhalten kann - Xmx512m - XX: MaxPermSize = 128 m "aber das Problem kann nicht gelöst werden.

Das ist meine Klasse Java: Tratamiento.java

package com.clinicaveterinaria.dam.domain; 
import org.springframework.format.annotation.DateTimeFormat; 
import org.springframework.roo.addon.javabean.RooJavaBean; 
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord; 
import org.springframework.roo.addon.tostring.RooToString; 

import javax.persistence.*; 
import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Size; 
import java.util.Date; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

@RooJavaBean 
@RooToString 
@RooJpaActiveRecord 
public class Tratamiento { 

/** 
*/ 
@NotNull 
@Size(min = 5, max = 100) 
private String Codigo; 
/** 
*/ 
@Size(min = 3, max = 250) 
private String AnalisisClinicos; 

/** 
*/ 
@Size(min = 3, max = 250) 
private String Medicamentos; 

/** 
*/ 
private double Coste; 

/** 
*/ 
@Size(min = 3, max = 250) 
private String Diagnostico; 

/** 
*/ 
@Size(min = 3, max = 250) 
private String MotivoIngreso; 

/** 
*/ 
@NotNull 
@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(style = "M-") 
private Date FechaComienzoTratamiento; 

/** 
*/ 
@Temporal(TemporalType.TIMESTAMP) 
@DateTimeFormat(style = "M-") 
private Date FechaFinTratamiento; 

/** 
*/ 
@ManyToOne 
private Citas citas; 

/** 
*/ 
@ManyToMany(cascade = CascadeType.ALL) 
private Set<Medicamentos> Med = new HashSet<Medicamentos>(); 


public static List<Tratamiento> findTratamientoXDueño(int idUsr) { 
    if (idUsr <= 0 /*mas comprobaciones*/) return null; 
    Query query = entityManager().createNativeQuery(
      " SELECT t.* FROM tratamiento t " + 
        " INNER JOIN citas c ON c.id = t.citas " + 
        " INNER JOIN mascota m ON m.id = c.mascotas " + 
        " WHERE m.duenio = (:idUsr)" 
      , Tratamiento.class).setParameter("idUsr", idUsr); 
    return query.getResultList(); 
} 

public static List<Tratamiento> findTratamientoXVeterinario(int idUsr) { 
    if (idUsr <= 0 /*mas comprobaciones*/) return null; 
    Query query = entityManager().createNativeQuery(
      " SELECT t.* FROM tratamiento t " + 
        " INNER JOIN citas c ON c.id = t.citas " + 
        " WHERE c.veterinarios = (:idUsr)" 
      , Tratamiento.class).setParameter("idUsr", idUsr); 
    return query.getResultList(); 
} 
} 

Thank you durch die Hilfe, ich das abschließende Kursprojekt tue.
Ich verwende MVC (Model-View-Controller).
Sorry, mein Englisch ist sehr schlecht.

+0

Können Sie die 'Tratamiento' Klasse posten? –

+0

Ja, jetzt habe ich den Code eingegeben. –

+0

Was Sie dort haben, ist ein OutOfMemoryError. Es liegt an einem Speicherverlust in Ihrer App. Aber die Stack-Trace ist völlig irrelevant: Der Fehler könnte irgendwo anders passiert sein. Sie müssen einen Profiler oder eine Codeanalyse verwenden, um zu verstehen, warum der von der App genutzte Speicher ständig wächst und wächst. Wahrscheinlich behalten Sie Objekte in einer Sammlung oder Karte und löschen sie nicht. –

Antwort

0

Die Lösung ist überschreiben die Methode toString.

package com.clinicaveterinaria.dam.domain; 

import com.clinicaveterinaria.dam.domain.Tratamiento; 
import org.apache.commons.lang3.builder.ReflectionToStringBuilder; 
import org.apache.commons.lang3.builder.ToStringStyle; 

privileged aspect Tratamiento_Roo_ToString { 
public String Tratamiento.toString() { 
return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE); 
}  
} 

Neue Methode toString.

package com.clinicaveterinaria.dam.domain; 

import com.clinicaveterinaria.dam.domain.Tratamiento; 
import org.apache.commons.lang3.builder.ReflectionToStringBuilder; 
import org.apache.commons.lang3.builder.ToStringStyle; 

privileged aspect Tratamiento_Roo_ToString { 

public String Tratamiento.toString() { 
return ""; 
    } 
} 

Nun ist die App Web fallen Passt nicht

+0

Sie * Sollte * keine _.aj_ Dateien ändern, weil es von Spring Roo verwendet wird und * diese Änderung überschreibt * beim nächsten Start der _console_. Der richtige Weg, um Ihr Problem zu lösen, ist definition 'toString' in' Tratamiento.java'. Spring Roo erkennt, dass diese Methode bereits in der Datei '.java' deklariert ist und * nicht regeneriert. – jmvivo

+0

Siehe _.aj_ files header: '// ACHTUNG: BEARBEITEN SIE DIESE DATEI NICHT. DIESE DATEI WIRD VON SPRING ROO VERWALTET. // Sie können Code in die Ziel-.java-Kompilierungseinheit eingeben, wenn Sie ein oder mehrere Mitglieder bearbeiten möchten – jmvivo