2008-09-24 176 views
1

我有這個論壇偉大的懷疑,但我願意驚喜;)榮譽和偉大的因果報應那些誰幫我回到正軌。使用突擊實施的JavaSpaces

我試圖使用JavaSpaces的(http://www.dancres.org/blitz/blitz_js.html)的突擊執行以實現存儲例如在http://today.java.net/pub/a/today/2005/04/21/farm.html

所提供的ComputeFarm例如工作正常,但每當我試圖使用熱捧外的盒子實現我得到以下錯誤:

(是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 

回答

0

好了,你的java空間服務器似乎並沒有找到類:

com.sun.jini.mahalo.TxnMgrProxy。

所以我想你只需在啓動服務器時添加Mahalo(應該包含在閃電分配中,按照此:http://www.dancres.org/blitz/blitz_inst.html頁)到你的類路徑中。

如果此建議無效,請發佈一些有關如何啓動服務器的更多信息。

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); 
} 
1

所以com.sun.jini.mahalo.TxnMgrProxy包含在一些罐子,即包含在您的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虛擬機的啓動方式,並提供完整的命令行。 (如果您正在使用某種腳本,只需在java命令前添加一個「echo ...」並將輸出粘貼到此處)。

0

確保指定-Djava.security.policy =/wherever/policy.all和-Djava.security.manager =您可能還必須運行RMI代碼服務器。

1

這看起來像是一個RMI類加載問題。看起來,服務器進程正在嘗試解組傳遞給它的TxnMgrProxy對象(我不知道該示例的細節,我是從堆棧跟蹤中猜測的)。該對象需要用可以找到類定義的代碼庫進行註釋。您可能需要確保Mahalo的java.rmi.server.codebase屬性指向一個可以下載mahalo-dl.jar(或者一些包含類定義的JAR)的URL。

即使JAR在本地可用,也可能不夠。 PreferredClassProvider(它隱藏在堆棧跟蹤中)篡奪了普通的Java classloader委託方案,因此即使該類在本地存在,它仍然希望通過代碼庫獲取定義。

這些都是很難解決的問題。希望我能找到接近答案的東西。祝你好運。