Incompatibles sérialisation des Uides dans les EJB Distant de la Méthode java.util.date & DBTimestamp
J'ai une application web java qui est déployé dans les deux Oreilles - un pour la couche utilisateur (contient une GUERRE module) et un pour la couche d'entreprise (contient un module EJB). Les deux niveaux sont déployés pour WebSphere Application Server 7. Les niveaux sont connectés via des EJB 3.0 beans de session sans état. Les haricots sont regardé via JNDI.
Nous utiliser Hibernate pour la persistance, et une base de données DB2.
Lorsque la distance EJB appel est renvoyé, l'erreur suivante se produit sur le côté 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
La java.util.Date
champ sur l'objet est retourné à partir d'Hiberner comme une com.ibm.db2.jcc.DBTimestamp
domaine, qui s'étend java.sql.Timestamp
qui s'étend java.util.Date
. Comme c'est une sous-classe de java.util.Date
et est sérialisable, ne devrait-ce pas être traités?
J'en ai parlé à un plus d'expérience de la personne qui a dit que la cause probable est que la version de la JVM ou DBTimestamp
version de la classe est différente entre le web et la couche d'entreprise ÉTAIT serveurs. Les deux serveurs ont la même JVM, a ÉTÉ, et un POT de version.
J'ai aussi un local a ÉTÉ de 7 serveur, où les deux niveaux sont déployées sur le même serveur. Les Ejb sont toujours résolu à distance, via un JNDI appel à localhost. L'application fonctionne très bien sur mon serveur local. La seule différence, je suis conscient, c'est un autre micro-version de a ÉTÉ, ainsi que le déploiement de deux niveaux sur le même serveur.
Quelle est la cause du problème? Est-ce que le DBTimestamp
classe ne peut pas être trouvé sur la couche web, ou que la version de la classe est-elle différente? Ou est-ce un problème avec le polymorphisme, ou tout autre chose?
Côté d'une réponse, je voudrais aussi apprécie tous les conseils sur ce que le débogage pour essayer - je suis à court d'idées.
OriginalL'auteur J Barclay | 2012-07-19
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à régler le problème par l'emballage des DB2 JAR du pilote dans la couche web de l'OREILLE.
La cause du problème est donc que la classe n'était pas disponible dans le classpath de la couche web.
J'ai besoin d'enquêter sur la configuration de l'environnement pour comprendre pourquoi il n'est pas disponible, mais au moins le problème est clair maintenant.
OriginalL'auteur J Barclay