私は、UI層(WARモジュールを含む)とビジネス層(EJBを含む)の2つのEARに配置されたJava Webアプリケーションを持っています。 EJBモジュール)。どちらの層もWebSphere Application Server 7にデプロイされます。これらの層は、EJB 3.0のステートレス・セッションBeanを介して接続されます。 BeanはJNDI経由で参照されます。EJBリモートメソッドの直列化UIDが一致しません - java.util.dateとDBTimestamp
私たちは永続性のために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
フィールドが延びjava.sql.Timestamp
を拡張com.ibm.db2.jcc.DBTimestamp
フィールドとして休止状態から返されるjava.util.Date
。 java.util.Date
のサブクラスであり、シリアライズ可能なので、これは処理されるべきではありませんか?
JVMバージョンまたはDBTimestamp
クラスのバージョンがWeb層とビジネス層のWASサーバーで異なると思われるより多くの経験者と話しました。両方のサーバーには、同じJVM、WAS、およびJARバージョンがあります。
ローカルWAS 7サーバーもあり、両方の層が同じサーバーに配置されています。 EJBは、localhostへのJNDI呼び出しを介してリモートで解決されます。アプリケーションはローカルサーバー上で正常に動作します。私が知っている唯一の違いは、WASの異なるマイクロバージョンと、両方のティアを同じサーバーに配置することです。
問題の原因は何ですか? DBTimestamp
クラスがWeb層で見つからないか、クラスのバージョンが異なっていますか?それとも、多形性に問題があるのでしょうか、それとも全く別のものですか?
答えとは別に、試してみるデバッグのアドバイスもありがとうございます。私はアイデアがありません。