domenica 26 settembre 2010

JBoss, Hibernate, JPA, Spring, Struts2: Javassist Enhancement failed

Durante una delle mie belle prove di testare framework (nel tempo libero nn mi piace fare sudoku... ) mi è venuto in mente di introdurre Hibernate 3 con JPA in un'applicazione basata sull'integrazione di Struts2 e Spring (se avete letto altri post del mio blog l'applicazione è struts2tutorial).

L'applicazione girava su Apache Tomcat, ma per testare la mia nuova idea avevo bisogno di un application server di tipo transazionale allora mi sono rivolto a JBOSS 4.2.2 GA utilizzando le librerie fornite fra le quali hibernate 3.

Comunque dopo aver avviato JBOSS e in fase di inizializzazione dei bean di Spring mi esce un errore:

[......]
<>(JavassistLazyInitializer.java:141) - Javassist Enhancement failed: com.blogspot.piergiuseppe82.struts2intro.dto.Persona
java.lang.RuntimeException: java.lang.IllegalArgumentException
at javassist.util.proxy.ProxyFactory.setField(ProxyFactory.java:356)
at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:339)
at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:312)
at javassist.util.proxy.ProxyFactory.createClass(ProxyFactory.java:271)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:138)
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:42)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(Pojo

[......]


Caused by: java.lang.IllegalArgumentException
at sun.reflect.UnsafeStaticObjectFieldAccessorImpl.set(UnsafeStaticObjectFieldAccessorImpl.java:61)
at java.lang.reflect.Field.set(Field.java:656)
at javassist.util.proxy.ProxyFactory.setField(ProxyFactory.java:352)

Problema risolto e posto la soluzione in caso qualcuno abbia necessità di usare struts2, JBoss e Hibernate.

Il problema non è javassist ma struts2 o meglio la xwork di struts2 (presente nel mio caso nella lib del war).
Infatti quest'ultima contiene javassist e crea problemi a quella fornita da JBoss.

La soluzione ideale sarebbe quella di scaricare i sorgenti di xwork, togliere i package di javassist e ricompilare il tutto con le librerie di JBoss. In tal modo si usa quella fornita da jboss.

Però per i + sfaticati (come ho fatto io :D ) basta aprire il jar di xwork con qualsiasi tool di compressione che lo supporta e eliminare la cartella javassist.

Spero di essere stato utile e se finisco il progetto (sempre che non mi scoccio) posto un tutorial.

Alla prossima!!

Nessun commento:

Posta un commento