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.