2012-07-19 13 views
5

Ho un'applicazione web Java distribuita in due EAR: una per il livello UI (contiene un modulo WAR) e una per il livello aziendale (contiene un modulo EJB). Entrambi i livelli vengono distribuiti su WebSphere Application Server 7. I livelli sono connessi tramite bean di sessione stateless EJB 3.0. I fagioli vengono cercati tramite JNDI.UID di serializzazione non corrispondenti nel metodo remoto EJB - java.util.date e DBTimestamp

Utilizziamo Hibernate per la persistenza e un database DB2.

Quando la chiamata EJB remota viene restituito, il seguente errore si verifica sul lato client:

java.rmi.MarshalException: CORBA MARSHAL 0x4942f896 No; nested exception is: 
    org.omg.CORBA.MARSHAL: Unable to read value from underlying bridge : Mismatched serialization UIDs : Source (RepId RMI:java.util.Date:AC117E28FE36587A:686A81014B597419) = 686A81014B597419 whereas Target (RepId RMI:com.ibm.db2.jcc.DBTimestamp:AA774DBE96ECCE99:7AFCE1FB570D419C) = 7AFCE1FB570D419C vmcid: IBM minor code: 896 completed: No 

Il campo java.util.Date sull'oggetto viene restituito dalla sospensione come campo com.ibm.db2.jcc.DBTimestamp, che si estende java.sql.Timestamp estendentesi java.util.Date . Poiché è una sottoclasse di java.util.Date ed è serializzabile, non dovrebbe essere gestito questo?

Ho parlato con una persona più esperta che ha affermato che la causa probabile è che la versione di JVM o la versione di classe DBTimestamp è diversa tra i server WAS di livello Web e di livello aziendale. Entrambi i server hanno la stessa versione JVM, WAS e JAR.

Ho anche un server WAS 7 locale, in cui entrambi i livelli sono distribuiti sullo stesso server. Gli EJB sono ancora risolti da remoto tramite una chiamata JNDI a localhost. L'applicazione funziona bene sul mio server locale. L'unica differenza io sappia è una micro-versione diversa di WAS, così come la distribuzione di entrambi i livelli allo stesso server.

Qual è la causa del problema? È possibile che la classe DBTimestamp non venga trovata sul livello Web o che la versione della classe sia diversa? O è un problema con il polimorfismo, o qualcos'altro interamente?

Oltre a una risposta, apprezzerei anche qualche consiglio su cosa fare il debug per provare - Sono fuori di idee.

risposta

2

sono riuscito a 'risolvere' il problema imballaggio il relativo JAR driver DB2 nel EAR livello Web.

La causa del problema è quindi che la classe non era disponibile sul classpath del livello web. dovrò studiare la configurazione dell'ambiente di capire perché non è disponibile, ma almeno il problema è chiaro ora.