So aktivieren Sie das Weben in EclipseLink?
Erhalte ich die folgende Warnung auf dem GlassFish-terminal beim bereitstellen einer Anwendung, die lazy-fetching in Entitäten,
WARNUNG: das Zurücksetzen der faule Einstellung auf die
OneToOne
oderManyToOne
Attribut[zoneTable]
für die entity-Klasse[class entity.ZoneCharge]
da die Weberei wurde nicht aktiviert oder nicht auftreten.
für was auch immer Unternehmen werden im Projekt aufgelistet.
Meine persistence.xml
- Datei sieht in etwa wie folgt.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence"
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Project-ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/pool</jta-data-source>
<class>entity.ZoneTable</class>
<!--Other classes-->
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.weaving" value="static"/>
<property name="eclipselink.target-server" value="SunAS9"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.level.sql" value="FINEST"/>
<property name="eclipselink.logging.level" value="FINEST" />
<property name="eclipselink.logging.level" value="WARNING"/>
<property name="eclipselink.logging.level.cache" value="FINEST"/>
</properties>
</persistence-unit>
</persistence>
Den ZoneTable
Klasse aussieht,
@Entity
@Table(name = "zone_table", catalog = "projectdb", schema = "")
public class ZoneTable implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "zone_id")
private Long zoneId;
@Column(name = "zone_name")
private String zoneName;
@OneToMany(mappedBy = "zoneTable", fetch = FetchType.LAZY)
private Set<ZoneCharge> zoneChargeSet;
//Setters and getters.
}
Hier lazy-fetching funktioniert auch mit remote-EJBs aber ich denke, es wird betrachtet, eifrig, aufgrund der oben genannten Warnung.
Aktivieren Weben (oder auf eine andere Weise), diese Warnung zu vermeiden?
Wenn ich diesen Befehl eingeben wie bereits erwähnt hier,
java org.eclipse.persistence.tools.weaving.jpa.StaticWeave
auf der Kommandozeile, bekomme ich die folgende Fehlermeldung.
Fehler: konnte nicht gefunden oder geladen wichtigsten classorg.eclipse.die Persistenz.tools.in der Weberei.jpa.StaticWeave
Was sind die Möglichkeiten, Sie zu überwinden, diese Warnung?
InformationsquelleAutor Tiny | 2013-09-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Sie die EclipseLink.jar mit der
org.eclipse.persistence.tools.weaving.jpa.StaticWeave
auf den classpath beim ausführen dieser Klasse für statische Weben.Aber wenn Sie in GlassFish 4 Sie sollten nicht brauchen, um die Verwendung von statischen Weben. Entfernen Sie die
<property name="eclipselink.weaving" value="static"/>
Eigenschaft und versuchen Sie es erneut. Diese Eigenschaft gibt an, dass Ihre Klassen wurden bereits statisch verstärkt, so dass dynamische Weben sollte nicht auftreten. Da waren Sie nicht verbessert, faul, 1:1 und M:1-wird standardmäßig auf eager.javax.servlet.ServletException: Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session. This often occurs when an entity with an uninstantiated LAZY relationship is serialized and that lazy relationship is traversed after serialization. To avoid this issue, instantiate the LAZY relationship prior to serialization.
So, es ist faul ohne diese Eigenschaft.Das bedeutet, dass die Weberei wurde erfolgreich verwendet, aber Sie sind überqueren einer unfetched faul-Verhältnis nach der Serialisierung der Einrichtung, die nicht erlaubt ist. Nach der Serialisierung wird der Kontext nicht verfügbar ist, so ist der faule Beziehung kann nicht abgerufen werden. So müssen Sie auf die Beziehung vor der Serialisierung (beispielsweise durch Verwendung von join-fetch-über die Beziehung) oder um die Beziehung eifrig, so dass es abgerufen wird, schon.
Join fetch gearbeitet, obwohl es sieht ein bisschen hässlich mit den Kriterien, die API. Sind Beziehungen in diesem Fall wirklich nicht als eifrig?
Ja. Faul können die Anbieter abrufen, das referenzierte Objekt wenn es muss, das heißt, wenn Sie auf die Beziehung. Die Angabe fetch join auf die Beziehung zwingt Sie, zu sein, holte sofort eifrig. Es sollte nicht zu hässlich sein, verwenden Sie einfach die fetch api wie würden Sie auf einen join.
Byte-code-enhancement. Es ermöglicht, dass der Anbieter ändern Ihre Klasse Konstrukte (EclipseLink ist valueholders) wickeln Sie Ihre Verweise sowie andere performance-Verbesserungen. Es ist notwendig, für faul, 1:1, aber nicht für faule Sammlungen, wie Eclipselink benutzen können, Ihre eigene Sammlung der Umsetzung direkt. Siehe wiki.eclipse.org/EclipseLink/UserGuide/JPA/...
InformationsquelleAutor Chris