Spring Application mit Hessian Remote-Zugriff

lumpiscore

Grünschnabel
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:

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 für Eure Hilfe

Lumpiscore
 

Neue Beiträge

Zurück