【问题标题】:Using Blitz implementation of JavaSpaces使用 JavaSpaces 的 Blitz 实现
【发布时间】:2008-09-24 15:26:27
【问题描述】:

我对这个论坛有很大的怀疑,但我愿意惊喜;) 感谢那些让我重回正轨的人。

我正在尝试使用 JavaSpaces (http://www.dancres.org/blitz/blitz_js.html) 的 blitz 实现来实现 http://today.java.net/pub/a/today/2005/04/21/farm.html 提供的 ComputeFarm 示例

内存中的示例运行良好,但每当我尝试使用 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 

【问题讨论】:

    标签: java distributed-computing javaspaces


    【解决方案1】:

    所以 com.sun.jini.mahalo.TxnMgrProxy 包含在某个 jar 中,它包含在您的 CLASSPATH 环境变量中。

    但您可能正在使用一些脚本来启动服务器。这很可能通过指定一个“-classpath”命令行开关来启动 java,该开关优先于您的环境 CLASSPATH 变量。

    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 ...”并将输出粘贴到此处)。

    【讨论】:

      【解决方案2】:

      这看起来像是一个 RMI 类加载问题。似乎服务器进程正在尝试解组传递给它的 TxnMgrProxy 对象(我不知道该示例的细节,我从堆栈跟踪中猜测)。该对象需要使用可以找到类定义的代码库进行注释。您可能需要确保以 java.rmi.server.codebase 属性启动 Mahalo,该属性指向可以下载 mahalo-dl.jar(或一些包含类定义的 JAR)的 URL。

      即使 JAR 在本地可用,也可能还不够。 PreferredClassProvider(它隐藏在堆栈跟踪中)篡夺了普通的 Java 类加载器委托方案,因此即使该类在本地,它仍然希望通过代码库提取定义。

      这些都是很难解决的问题。希望我能找到接近答案的东西。祝你好运。

      【讨论】:

        【解决方案3】:

        好吧,您的 java 空间服务器似乎没有找到该类:

        com.sun.jini.mahalo.TxnMgrProxy.

        所以我猜你只需要在启动服务器时将 Mahalo(根据此:http://www.dancres.org/blitz/blitz_inst.html 页)添加到你的类路径中。

        如果此建议没有帮助,请发布有关如何启动服务器的更多信息。

        【讨论】:

          【解决方案4】:

          确保您指定 -Djava.security.policy=/wherever/policy.all 和 -Djava.security.manager= 您可能还需要运行 RMI 代码服务器。

          【讨论】:

            【解决方案5】:

            请注意我的原帖:是的 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);
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-03-31
              • 2013-12-04
              • 1970-01-01
              相关资源
              最近更新 更多