Tuesday, February 8, 2011

Using Blitz implementation of JavaSpaces

I have great doubts about this forum, but I am willing to be pleasantly surprised ;) Kudos and great karma to those who get me back on track.

I am attempting to use the blitz implementation of JavaSpaces (http://www.dancres.org/blitz/blitz_js.html) to implement the ComputeFarm example provided at http://today.java.net/pub/a/today/2005/04/21/farm.html

The in memory example works fine, but whenever I attempt to use the blitz out-of-box implementation i get the following error:

(yes com.sun.jini.mahalo.TxnMgrProxy is in the class path)

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
  • Well, your java spaces server does not seem to find the class:

    com.sun.jini.mahalo.TxnMgrProxy.

    So I guess you just have to add Mahalo (should be included in the blitz distribution according to this: http://www.dancres.org/blitz/blitz_inst.html page) to your classpath when starting the server.

    Please post some more information about how you are starting your server, if this advice does not help.

    From jiriki
  • Please note my original post:yes com.sun.jini.mahalo.TxnMgrProxy is in the class path

    if you are familiar with javap -- if you specify a fully qualified class name it will determine whether or not it is on the class path.

    this is the result that I get when running 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);
    }
    
    From DeltaVee
  • So com.sun.jini.mahalo.TxnMgrProxy is contained in some jar, that is contained in your CLASSPATH environment variable.

    But probably your are using some script to start the server. And this most probably starts java by specifying a "-classpath" commandline switch which takes precendence over your environment CLASSPATH variable.

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

    You can simulate this by executing:

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

    ... and suddenly the class cannot be found anymore. So can you please try and find out the way the java VM of the client and server are started and provide the complete command line. (If you are using some kind of script just add an "echo ..." in front of the java command and paste the output in here).

    From jiriki
  • Make sure that you specify -Djava.security.policy=/wherever/policy.all and -Djava.security.manager= You may also have to have the RMI code server running.

  • This looks like an RMI classloading issue. It appears that the server process is trying to unmarshal the TxnMgrProxy object that is getting passed to it (I don't know the specifics of the example, I'm kind of guessing from the stack trace). That object needs to be annotated with a codebase where the class definition can be found. You probably need to make sure that Mahalo is started with the java.rmi.server.codebase property pointing to a URL where mahalo-dl.jar (or some JAR holding the class definition) can be downloaded.

    Even if the JAR is available locally, it might not be enough. The PreferredClassProvider (it's buried in the stack trace) usurps the normal Java classloader delegation scheme, so even if the class is there locally, it'll still want to pull the definition through the codebase.

    These are tough problems to figure out. Hope I hit on something close to the answer. Good luck.

    From shockwave
  • I'm having the same problem... Did you ever get it working?

0 comments:

Post a Comment