1

私はこのフォーラムについて非常に疑問を持っていますが、喜んで驚かせたいと思います ;)私を軌道に乗せてくれた人々への称賛と大きなカルマ.

JavaSpaces ( http://www.dancres.org/blitz/blitz_js.html ) の blitz 実装を使用して、 http: //today.java.net/pub/a/today/ で提供されている ComputeFarm の例を実装しようとしています。 2005/04/21/farm.html

インメモリの例は問題なく動作しますが、blitz のアウトオブボックス実装を使用しようとすると、次のエラーが発生します。

(はいcom.sun.jini.mahalo.TxnMgrProxy、クラスパスにあります)

2008-09-24 09:57:37.316 ERROR [Thread-4] JavaSpaceComputeSpace 155     - Exception while taking task.
java.rmi.ServerException: RemoteException in server thread; nested exception is: 
    java.rmi.UnmarshalException: unmarshalling method/arguments; nested exception is: 
    java.lang.ClassNotFoundException: com.sun.jini.mahalo.TxnMgrProxy
    at net.jini.jeri.BasicInvocationDispatcher.dispatch(BasicInvocationDispatcher.java:644)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$6.run(ObjectTable.java:597)
    at net.jini.export.ServerContext.doWithServerContext(ServerContext.java:103)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch0(ObjectTable.java:595)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.access$700(ObjectTable.java:212)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$5.run(ObjectTable.java:568)
    at com.sun.jini.start.AggregatePolicyProvider$6.run(AggregatePolicyProvider.java:527)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch(ObjectTable.java:565)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch(ObjectTable.java:540)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$RD.dispatch(ObjectTable.java:778)
    at net.jini.jeri.connection.ServerConnectionManager$Dispatcher.dispatch(ServerConnectionManager.java:148)
    at com.sun.jini.jeri.internal.mux.MuxServer$2.run(MuxServer.java:244)
    at com.sun.jini.start.AggregatePolicyProvider$5.run(AggregatePolicyProvider.java:513)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.jini.jeri.internal.mux.MuxServer$1.run(MuxServer.java:241)
    at com.sun.jini.thread.ThreadPool$Worker.run(ThreadPool.java:136)
    at java.lang.Thread.run(Thread.java:595)
    at com.sun.jini.jeri.internal.runtime.Util.__________EXCEPTION_RECEIVED_FROM_SERVER__________(Util.java:108)
    at com.sun.jini.jeri.internal.runtime.Util.exceptionReceivedFromServer(Util.java:101)
    at net.jini.jeri.BasicInvocationHandler.unmarshalThrow(BasicInvocationHandler.java:1303)
    at net.jini.jeri.BasicInvocationHandler.invokeRemoteMethodOnce(BasicInvocationHandler.java:832)
    at net.jini.jeri.BasicInvocationHandler.invokeRemoteMethod(BasicInvocationHandler.java:659)
    at net.jini.jeri.BasicInvocationHandler.invoke(BasicInvocationHandler.java:528)
    at $Proxy0.take(Unknown Source)
    at org.dancres.blitz.remote.BlitzProxy.take(BlitzProxy.java:157)
    at compute.impl.javaspaces.JavaSpaceComputeSpace.take(JavaSpaceComputeSpace.java:138)
    at example.squares.SquaresJob.collectResults(SquaresJob.java:47)
    at compute.impl.AbstractJobRunner$CollectThread.run(AbstractJobRunner.java:28)
Caused by: java.rmi.UnmarshalException: unmarshalling method/arguments; nested exception is: 
    java.lang.ClassNotFoundException: com.sun.jini.mahalo.TxnMgrProxy
    at net.jini.jeri.BasicInvocationDispatcher.dispatch(BasicInvocationDispatcher.java:619)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$6.run(ObjectTable.java:597)
    at net.jini.export.ServerContext.doWithServerContext(ServerContext.java:103)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch0(ObjectTable.java:595)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.access$700(ObjectTable.java:212)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$5.run(ObjectTable.java:568)
    at com.sun.jini.start.AggregatePolicyProvider$6.run(AggregatePolicyProvider.java:527)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch(ObjectTable.java:565)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$Target.dispatch(ObjectTable.java:540)
    at com.sun.jini.jeri.internal.runtime.ObjectTable$RD.dispatch(ObjectTable.java:778)
    at net.jini.jeri.connection.ServerConnectionManager$Dispatcher.dispatch(ServerConnectionManager.java:148)
    at com.sun.jini.jeri.internal.mux.MuxServer$2.run(MuxServer.java:244)
    at com.sun.jini.start.AggregatePolicyProvider$5.run(AggregatePolicyProvider.java:513)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.jini.jeri.internal.mux.MuxServer$1.run(MuxServer.java:241)
    at com.sun.jini.thread.ThreadPool$Worker.run(ThreadPool.java:136)
    at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: com.sun.jini.mahalo.TxnMgrProxy
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at net.jini.loader.pref.PreferredClassLoader.loadClass(PreferredClassLoader.java:922)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:242)
    at net.jini.loader.pref.PreferredClassProvider.loadClass(PreferredClassProvider.java:613)
    at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
    at net.jini.loader.ClassLoading.loadClass(ClassLoading.java:138)
    at net.jini.io.MarshalInputStream.resolveClass(MarshalInputStream.java:296)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
    at com.sun.jini.jeri.internal.runtime.Util.unmarshalValue(Util.java:221)
    at net.jini.jeri.BasicInvocationDispatcher.unmarshalArguments(BasicInvocationDispatcher.java:1049)
    at net.jini.jeri.BasicInvocationDispatcher.dispatch(BasicInvocationDispatcher.java:599)
    ... 17 more 
4

5 に答える 5

1

したがって、com.sun.jini.mahalo.TxnMgrProxy は、CLASSPATH 環境変数に含まれている jar に含まれています。

しかし、おそらくスクリプトを使用してサーバーを起動しています。そして、これはおそらく、環境の CLASSPATH 変数よりも優先される「-classpath」コマンドライン スイッチを指定することで Java を起動します。

http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/classpath.html

これをシミュレートするには、次を実行します。

javap -classpath someUnknownJar.jar com.sun.jini.mahalo.TxnMgrProxy

...そして突然、クラスが見つからなくなりました。クライアントとサーバーの Java VM を起動する方法を調べて、完全なコマンド ラインを提供してください。(何らかのスクリプトを使用している場合は、java コマンドの前に「echo ...」を追加し、出力をここに貼り付けます)。

于 2008-09-24T19:05:34.200 に答える
1

これは、RMI クラスローディングの問題のようです。サーバー プロセスが、渡された TxnMgrProxy オブジェクトを非整列化しようとしているようです (例の詳細はわかりません。スタック トレースから推測しています)。そのオブジェクトには、クラス定義が見つかるコードベースで注釈を付ける必要があります。おそらく、java.rmi.server.codebase プロパティが mahalo-dl.jar (またはクラス定義を保持する何らかの JAR) をダウンロードできる URL を指している状態で Mahalo が開始されていることを確認する必要があります。

JAR がローカルで利用可能であっても、十分ではない可能性があります。PreferredClassProvider (スタック トレースに埋もれています) は、通常の Java クラスローダー委任スキームを奪います。そのため、クラスがローカルにある場合でも、コードベースから定義を取得する必要があります。

これらは、理解するのが難しい問題です。答えに近い何かを思いついたことを願っています。幸運を。

于 2008-10-03T13:14:44.260 に答える
0

-Djava.security.policy=/wherever/policy.allおよび-Djava.security.manager=を指定していることを確認してください。RMIコードサーバーを実行する必要がある場合もあります。

于 2008-09-24T19:24:58.850 に答える
0

さて、あなたのJavaスペースサーバーはクラスを見つけられないようです:

com.sun.jini.mahalo.TxnMgrProxy.

したがって、サーバーを起動するときにクラスパスにMahalo ( http://www.dancres.org/blitz/blitz_inst.htmlページに従って blitz ディストリビューションに含まれている必要があります) を追加するだけでよいと思います。

このアドバイスが役に立たない場合は、サーバーの起動方法についてさらに情報を投稿してください。

于 2008-09-24T16:38:06.707 に答える
0

私の元の投稿に注意してください: はい com.sun.jini.mahalo.TxnMgrProxy はクラスパスにあります

javap に精通している場合 -- 完全修飾クラス名を指定すると、それがクラス パス上にあるかどうかが判断されます。

これは、javap com.sum.jini.mahalo.TxnMgrProxy を実行したときに得られる結果です。

C:\dev\jini\blitz>javap com.sun.jini.mahalo.TxnMgrProxy
Compiled from "TxnMgrProxy.java"
class com.sun.jini.mahalo.TxnMgrProxy extends java.lang.Object implements net.jini.core.transaction.server.TransactionManager,net.jini.admin.Admi
nistrable,java.io.Serializable,net.jini.id.ReferentUuid{
    final com.sun.jini.mahalo.TxnManager backend;
    final net.jini.id.Uuid proxyID;
    static com.sun.jini.mahalo.TxnMgrProxy create(com.sun.jini.mahalo.TxnManager, net.jini.id.Uuid);
    public net.jini.core.transaction.server.TransactionManager$Created create(long)       throws net.jini.core.lease.LeaseDeniedException, java.r
mi.RemoteException;
    public void join(long, net.jini.core.transaction.server.TransactionParticipant, long)       throws net.jini.core.transaction.UnknownTransacti
onException, net.jini.core.transaction.CannotJoinException, net.jini.core.transaction.server.CrashCountException, java.rmi.RemoteException;
    public int getState(long)       throws net.jini.core.transaction.UnknownTransactionException, java.rmi.RemoteException;
    public void commit(long)       throws net.jini.core.transaction.UnknownTransactionException, net.jini.core.transaction.CannotCommitException,
 java.rmi.RemoteException;
    public void commit(long, long)       throws net.jini.core.transaction.UnknownTransactionException, net.jini.core.transaction.CannotCommitExce
ption, net.jini.core.transaction.TimeoutExpiredException, java.rmi.RemoteException;
    public void abort(long)       throws net.jini.core.transaction.UnknownTransactionException, net.jini.core.transaction.CannotAbortException, j
ava.rmi.RemoteException;
    public void abort(long, long)       throws net.jini.core.transaction.UnknownTransactionException, net.jini.core.transaction.CannotAbortExcept
ion, net.jini.core.transaction.TimeoutExpiredException, java.rmi.RemoteException;
    public java.lang.Object getAdmin()       throws java.rmi.RemoteException;
    public net.jini.id.Uuid getReferentUuid();
    public int hashCode();
    public boolean equals(java.lang.Object);
    com.sun.jini.mahalo.TxnMgrProxy(com.sun.jini.mahalo.TxnManager, net.jini.id.Uuid, com.sun.jini.mahalo.TxnMgrProxy$1);
}
于 2008-09-24T18:30:41.583 に答える