Hallo Zusammen
Ich bin am erstellen einer Client-Server Anwendung und bin dabei noch auf ein Problem gestossen. Zur Umgebung; Client JavaFx der mittels Hessian auf den Server (Spring Tomcat) zugreift. Auf der Server-Seite wird Hibernate mit JPA als persistence-Provider eingesetzt. Nun habe ich Probleme beim Laden einer Entität über einen Hessian-Service - genau liegt es beim Laden einer Collection von Child-Records einer Entität. ???:L
Ich habe folgende OneToMany-Relation auf der zu ladenden Entität:
Den Service gemäss applicationContext.xml ist wie folgt definiert:
<bean id="TestService" class="org.springframework.remoting.caucho.HessianServiceExporter"
Wenn ich nun vom Client diesen Service aufrufe und dort ein Query auf der Entität HEAD ausführe erhalte ich auf Client-Seite folgende Fehlermeldung:
Grundsätzlich ist mir klar warum dieser Fehler entsteht, nur wie ich diesen beheben kann ist mir nicht klar. Weil die Relation auf Fetch= FetchType.EAGER eingestellt ist, werden grundsätzlich beim Laden der Entität alle Child-records auch mitgeladen. Dies sehe ich auch beim Debuggen der Server-Seite. Jedoch sobald hessian mit der Serialisierung beginnt, fliegt mir die Kiste um die Ohren. ;(
Hoffe es hat jemand von Euch eine Idee wie ich das lösen kann.
Danke
Lumpiscore
Ich bin am erstellen einer Client-Server Anwendung und bin dabei noch auf ein Problem gestossen. Zur Umgebung; Client JavaFx der mittels Hessian auf den Server (Spring Tomcat) zugreift. Auf der Server-Seite wird Hibernate mit JPA als persistence-Provider eingesetzt. Nun habe ich Probleme beim Laden einer Entität über einen Hessian-Service - genau liegt es beim Laden einer Collection von Child-Records einer Entität. ???:L
Ich habe folgende OneToMany-Relation auf der zu ladenden Entität:
Java:
@OneToMany(fetch = FetchType.EAGER, targetEntity = Item.class, mappedBy = "_itemHeadId")
private Collection<Item> _headItems = new HashSet<Item>();
Den Service gemäss applicationContext.xml ist wie folgt definiert:
<bean id="TestService" class="org.springframework.remoting.caucho.HessianServiceExporter"
Code:
scope="session">
<property name="service" ref="testService" />
<property name="serviceInterface" value="Application.BaseData.BusinessProcess.ITestService" />
</bean>
Wenn ich nun vom Client diesen Service aufrufe und dort ein Query auf der Entität HEAD ausführe erhalte ich auf Client-Seite folgende Fehlermeldung:
Code:
2010-05-02 17:36:31,412 [main] ERROR - failed to lazily initialize a collection, no session or session was closed
0org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:205)
at org.hibernate.collection.PersistentBag.add(PersistentBag.java:297)
at com.caucho.hessian.io.CollectionDeserializer.readList(CollectionDeserializer.java:78)
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:1043)
at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:383)
at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:199)
at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:141)
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:1030)
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:201)
at $Proxy0.queryHeadByHeadId(Unknown Source)
at ch.bizWare.client.SampleClient.main(SampleClient.java:51)
Exception in thread "main" com.caucho.hessian.client.HessianRuntimeException: com.caucho.hessian.io.HessianFieldException: ch.bizWare.Core.Domain.BaseData.Head._headItems: java.util.Collection cannot be assigned from null
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:213)
at $Proxy0.queryHeadByHeadId(Unknown Source)
at ch.bizWare.client.SampleClient.main(SampleClient.java:51)
Caused by: com.caucho.hessian.io.HessianFieldException: ch.bizWare.Core.Domain.BaseData.Head._headItems: java.util.Collection cannot be assigned from null
at com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:592)
at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:387)
at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:199)
at com.caucho.hessian.io.JavaDeserializer.readMap(JavaDeserializer.java:141)
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:1030)
at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:201)
... 2 more
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:365)
at org.hibernate.collection.AbstractPersistentCollection.write(AbstractPersistentCollection.java:205)
at org.hibernate.collection.PersistentBag.add(PersistentBag.java:297)
at com.caucho.hessian.io.CollectionDeserializer.readList(CollectionDeserializer.java:78)
at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:1043)
at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:383)
... 6 more
Grundsätzlich ist mir klar warum dieser Fehler entsteht, nur wie ich diesen beheben kann ist mir nicht klar. Weil die Relation auf Fetch= FetchType.EAGER eingestellt ist, werden grundsätzlich beim Laden der Entität alle Child-records auch mitgeladen. Dies sehe ich auch beim Debuggen der Server-Seite. Jedoch sobald hessian mit der Serialisierung beginnt, fliegt mir die Kiste um die Ohren. ;(
Hoffe es hat jemand von Euch eine Idee wie ich das lösen kann.
Danke
Lumpiscore