2

Java Update 1.6.0_29 の背景については、まずこの記事の「RMI Registry Issue」の一節を参照してください。

私が正しく理解していれば (私はドイツ人です)、更新により rm​​iregistry にバグが発生し、コードベースの file: pattern が機能しなくなります。

IE では、1.6.0_29 では次のものが機能しなくなります。

-Djava.rmi.server.codebase="file:myproject/bin/ ..."

現在、file: 構文のコードベースを持つ機能を使用しています。これを機能させるための回避策を知っている人はいますか?

注:いいえ、ローカル Web サーバーまたは ftp サーバーを開始する必要はありません。

アップデート:

Naming.bind では、次の例外がスローされます。

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: access to class loader denied
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:400)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
4

8 に答える 8

2

私も同じ問題を抱えていましたが、JDK を以前のバージョンにダウングレードすると問題が解決することが確認できました。私は知っています、それはあなたが探している解決策ではありませんが、少なくともそれは機能します.

于 2011-11-17T00:33:10.923 に答える
2

例として、Windows での実行を取り上げます。

ステップ 1. C:\Users\Jimmy.java.policy (存在しない場合は作成します) で、以下の内容を追加します。

grant { permission java.security.AllPermission; };

もちろん「C:\Users\Jimmy\」はユーザーのホームですので、適宜自分のホームに変更してください。AllPermission を追加するのは、問題を迅速に解決するためだけです。ここで、より正確な FilePermission を構成することをお勧めします。


ステップ 2. rmiregistry を開始します。

C:\JDK\bin>rmiregistry -J-Djava.rmi.server.codebase=file://C:/workspaces/MyLab/target/classes/

(コードベースは「/」で終了する必要があることに注意してください)


ステップ 3. サーバーおよびクライアント プログラムを実行します。

参考文献:

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/codebase.html http://docs.oracle.com/javase/7/docs/technotes/guides/security/spec/security -spec.doc3.html http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7.html

于 2013-08-14T07:20:20.270 に答える
1

プロジェクトの作業ディレクトリで rmiregistry を開始すると、機能します。したがって、基本的にプロジェクトの作業ディレクトリと rmiregistry の現在のディレクトリは同じである必要があります。

于 2012-05-23T20:13:18.937 に答える
1

私も最近この問題に遭遇しました。file: プロトコルを使用する場合、rmiregistry は次のいずれかでなければならないことを確認できます。

  • 共有クラスを含むディレクトリのルートで開始されます。また
  • 共有クラスまたは共有クラス jar を指すようにクラスパスを設定します。また
  • file:// 以外のプロトコルを使用します (ngnix をセットアップし、そこから jar を提供しました)。
于 2013-12-26T20:02:31.457 に答える
1

バグなので回避策はないようですので修正をお待ちください

詳細はこちら

https://bugzilla.redhat.com/show_bug.cgi?id=751203

コード修正 http://icedtea.classpath.org/hg/icedtea6/rev/67df573b0734

于 2011-12-15T06:32:13.033 に答える
1

動的なコードのダウンロードが必要ない場合 (その場合は ftp コードベースを使用できます)、解決策は単に CLASSPATH 環境変数を jar ファイルへのパスに設定することです。

Windows: set CLASSPATH="path_to_jarfile"

Linux (バッチ): CLASSPATH="path_to_jarfile" export CLASSPATH

これを行うのに最適な場所は、RMI サーバーを呼び出すスクリプト内です。RMI サーバーの起動時にコマンド ライン (-cp オプション) でクラス パスを設定しても、rmiregistry クラスパスには影響しないため、役に立ちません。

于 2012-02-25T08:43:50.807 に答える
0

おそらくあなたが望むものではないかもしれませんが、コードベースではなくクラスパスでこれを解決することができます。必要なクラスをクラスパスに追加すると、クライアントJVMは正常に機能します。URLスキームを使用している場合file:、クラスはローカルホストですでに利用可能である必要があります。

于 2011-11-16T14:37:10.990 に答える
0

私は同じ問題を抱えていましたが、JDKのバージョンを変更できませんでした。私の場合はターゲット/クラスであったコードベースと同じディレクトリからrmiregistryを実行/開始することで解決できることがわかりました。したがって、cd project/target/classes を実行してから、rmiregistry & を実行します。

于 2012-05-29T13:46:25.383 に答える