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:

Code java:
1
2
@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 :
1
2
3
4
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 für Eure Hilfe

Lumpiscore