0

休止状態 4 をサポートしている作成したサービスから、休止状態 3 をサポートする Web アプリケーションにタスクのリストを取得しようとしているときに、次の例外が発生します。

java.rmi.UnmarshalException: アンマーシャリングでエラーが返されました。ネストされた例外: java.lang.ClassNotFoundException: org.hibernate.collection.internal.PersistentBag (セキュリティ マネージャーなし: RMI クラス ローダーが無効)

             Services       ------------------>      WEB 
             (Hibernate 4)                           (Hibernate 3)

Web が RMI を介してサービスからデータを取得しようとし、例外を超える

4

1 に答える 1

0

どうやら、クライアントにはサービスのクラスが表示されません。これを実現する方法の 1 つは、rmi コード ベースを共有することです。lib フォルダー内のすべての jar と dist フォルダー内のプライマリ jar を rmi コードベースに追加し、それらをクライアントに表示する次のスクリプトを検討してください。

#!/bin/bash
lib_path=lib
artefact=name-of-your.jar
for file in $(ls $lib_path); do
 lib=$lib:$lib_path/$file
 rmicodebase="$rmicodebase file:$PWD/$lib_path/$file"
done

lib=$lib:dist/$artefact:etc
rmicodebase="$rmicodebase file:$PWD/dist/$artefact"
CLASSPATH=classes:etc:$lib
echo CLASSPATH: $CLASSPATH
echo rmicodebase=$rmicodebase

java -Xmx64M -Xms64M -classpath $CLASSPATH -Djava.rmi.server.codebase="$rmicodebase" $*

サーバーの中央プロセスに共有 rmi レジストリがあると仮定します。クラスの可視性を実現するもう 1 つの方法は、サーバー プロセスで別の rmi レジストリを実行することです。

java.rmi.registry.LocateRegistry.createRegistry(port)

クライアントをこのレジストリに接続させます。

よろしくレオン

于 2013-04-08T06:38:37.857 に答える