UI層用(WARモジュールを含む)とビジネス層用(EJBモジュールを含む)の2つのEARにデプロイされたJava Webアプリケーションがあります。どちらの層も WebSphere Application Server 7 にデプロイされます。これらの層は、EJB 3.0 ステートレス セッション Bean を介して接続されます。Bean は JNDI 経由で検索されます。
永続性のために Hibernate を使用し、DB2 データベースを使用します。
リモート EJB 呼び出しが返されると、クライアント側で次のエラーが発生します。
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
オブジェクトのフィールドはjava.util.Date
、Hibernate からフィールドとして返されcom.ibm.db2.jcc.DBTimestamp
ます。のサブクラスでありシリアライズ可能であるため、これを処理する必要はありませんか?java.sql.Timestamp
java.util.Date
java.util.Date
経験豊富な人に話を聞いたところDBTimestamp
、Web 層とビジネス層の WAS サーバーの間で JVM のバージョンまたはクラスのバージョンが異なることが原因である可能性が高いとのことでした。両方のサーバーの JVM、WAS、および JAR のバージョンは同じです。
ローカルの WAS 7 サーバーもあり、両方の層が同じサーバーにデプロイされています。EJB は引き続き、localhost への JNDI 呼び出しを介してリモートで解決されます。アプリケーションはローカル サーバーで正常に動作します。私が認識している唯一の違いは、WAS の異なるマイクロ バージョンと、両方の層を同じサーバーにデプロイすることです。
問題の原因は何ですか? DBTimestamp
クラスが Web 層で見つからないか、クラスのバージョンが異なるためですか? それともポリモーフィズムの問題なのか、それともまったく別の問題なのか?
答えは別として、どのデバッグを試すかについてのアドバイスもいただければ幸いです-私はアイデアがありません。