2008-09-24 8 views
1

J'ai de grands doutes sur ce forum, mais je suis prêt à être agréablement surpris;) Félicitations et bon karma à ceux qui me remettent sur la bonne voie.Utilisation de l'implémentation Blitz de JavaSpaces

Je tente d'utiliser la mise en œuvre de blitz de JavaSpaces (http://www.dancres.org/blitz/blitz_js.html) pour mettre en œuvre l'exemple ComputeFarm fourni à http://today.java.net/pub/a/today/2005/04/21/farm.html

Le dans l'exemple de la mémoire fonctionne très bien, mais chaque fois que je tente d'utiliser le blitz out-of-box la mise en œuvre que je reçois l'erreur suivante:

(oui com.sun.jini.mahalo.TxnMgrProxy est dans le chemin de classe)

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 

Répondre

0

Eh bien, votre serveur d'espaces Java ne semble pas trouver la classe:

com.sun.jini.mahalo.TxnMgrProxy.

Donc je suppose que vous juste devez ajouter Mahalo (devrait être inclus dans la distribution blitz selon ceci: page http://www.dancres.org/blitz/blitz_inst.html) à votre chemin de classe lors du démarrage du serveur.

S'il vous plaît poster plus d'informations sur la façon dont vous démarrez votre serveur, si ce conseil ne aide pas.

0

S'il vous plaît noter mon message original: oui com.sun.jini.mahalo.TxnMgrProxy est dans le chemin de la classe

si vous êtes familier avec javap - si vous spécifiez un nom de classe entièrement qualifié, il déterminera si ce n'est pas sur le chemin de la classe.

ceci est le résultat que je reçois lors de l'exécution 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

Alors com.sun.jini.mahalo.TxnMgrProxy est contenu dans une jarre, qui est contenu dans votre variable d'environnement CLASSPATH.

Mais vous utilisez probablement un script pour démarrer le serveur. Et cela lance probablement très probablement java en spécifiant un commutateur de ligne de commande "-classpath" qui prend de l'avance sur votre variable CLASSPATH d'environnement.

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

Vous pouvez simuler en exécutant:

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

... et tout à coup la classe ne peut pas être trouvé plus . Alors pouvez-vous s'il vous plaît essayer de trouver la façon dont la VM Java du client et du serveur sont démarrés et fournir la ligne de commande complète. (Si vous utilisez une sorte de script, ajoutez juste un "echo ..." devant la commande java et collez la sortie ici).

0

Assurez-vous de spécifier -Djava.security.policy =/anywhere/policy.all et -Djava.security.manager = Le serveur de code RMI peut également être en cours d'exécution.

1

Cela ressemble à un problème de chargement de classe RMI.Il semble que le processus serveur essaye de démasquer l'objet TxnMgrProxy qui lui est passé (je ne connais pas les détails de l'exemple, je devine à partir de la trace de la pile). Cet objet doit être annoté avec une base de code où la définition de classe peut être trouvée. Vous devez probablement vous assurer que Mahalo est démarré avec la propriété java.rmi.server.codebase pointant vers une URL où mahalo-dl.jar (ou un fichier JAR contenant la définition de classe) peut être téléchargé.

Même si le fichier JAR est disponible localement, il se peut qu'il ne soit pas suffisant. Le PreferredClassProvider (il est enterré dans la trace de la pile) usurpe le schéma de délégation de classloader Java normal, donc même si la classe est là localement, il voudra toujours tirer la définition à travers la base de code.

Ce sont des problèmes difficiles à résoudre. J'espère avoir trouvé quelque chose près de la réponse. Bonne chance.