5

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.Timestampjava.util.Datejava.util.Date

経験豊富な人に話を聞いたところDBTimestamp、Web 層とビジネス層の WAS サーバーの間で JVM のバージョンまたはクラスのバージョンが異なることが原因である可能性が高いとのことでした。両方のサーバーの JVM、WAS、および JAR のバージョンは同じです。

ローカルの WAS 7 サーバーもあり、両方の層が同じサーバーにデプロイされています。EJB は引き続き、localhost への JNDI 呼び出しを介してリモートで解決されます。アプリケーションはローカル サーバーで正常に動作します。私が認識している唯一の違いは、WAS の異なるマイクロ バージョンと、両方の層を同じサーバーにデプロイすることです。

問題の原因は何ですか? DBTimestampクラスが Web 層で見つからないか、クラスのバージョンが異なるためですか? それともポリモーフィズムの問題なのか、それともまったく別の問題なのか?

答えは別として、どのデバッグを試すかについてのアドバイスもいただければ幸いです-私はアイデアがありません。

4

1 に答える 1

2

関連するDB2ドライバーJARをWeb層EARにパッケージ化することで、問題を「修正」することができました。

したがって、問題の原因は、クラスがWeb層のクラスパスで使用できなかったことです。環境のセットアップを調査して、なぜそれが利用できないのかを理解する必要がありますが、少なくとも問題は今では明らかです。

于 2012-07-19T22:50:08.243 に答える