Использование блиц-реализации JavaSpaces - PullRequest
1 голос
/ 24 сентября 2008

У меня есть большие сомнения по поводу этого форума, но я хочу быть приятно удивлен;) Престижность и отличная карма для тех, кто вернул меня на путь.

Я пытаюсь использовать блиц-реализацию JavaSpaces (http://www.dancres.org/blitz/blitz_js.html) для реализации примера ComputeFarm, предоставленного в http://today.java.net/pub/a/today/2005/04/21/farm.html

Пример работы с памятью работает нормально, но всякий раз, когда я пытаюсь использовать реализацию blitz in-box, я получаю следующую ошибку:

(да 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 

Ответы [ 5 ]

1 голос
/ 03 октября 2008

Это похоже на проблему загрузки классов RMI. Похоже, что серверный процесс пытается разархивировать объект TxnMgrProxy, который передается ему (я не знаю специфику примера, я как бы догадываюсь по трассировке стека). Этот объект должен быть аннотирован с помощью кодовой базы, где можно найти определение класса. Возможно, вам нужно убедиться, что Mahalo запускается с помощью свойства java.rmi.server.codebase, указывающего на URL-адрес, по которому можно скачать mahalo-dl.jar (или какой-нибудь JAR, содержащий определение класса).

Даже если JAR доступен локально, этого может быть недостаточно. PreferredClassProvider (он скрыт в трассировке стека) узурпирует обычную схему делегирования загрузчика классов Java, поэтому даже если класс существует локально, он все равно захочет получить определение через кодовую базу.

Это сложные проблемы, которые нужно выяснить. Надеюсь, я наткнулся на что-то близкое к ответу. Удачи.

1 голос
/ 24 сентября 2008

Таким образом, com.sun.jini.mahalo.TxnMgrProxy содержится в некотором jar-файле, который содержится в вашей переменной среды CLASSPATH.

Но, вероятно, вы используете какой-то скрипт для запуска сервера. И это, скорее всего, запускает Java, указав параметр командной строки "-classpath", который имеет приоритет над переменной CLASSPATH вашей среды.

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

Вы можете смоделировать это, выполнив:

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

... и вдруг класс больше не может быть найден. Поэтому не могли бы вы попытаться выяснить, как запускается Java-машина клиента и сервера, и предоставить полную командную строку. (Если вы используете какой-то скрипт, просто добавьте «echo ...» перед командой java и вставьте сюда вывод).

0 голосов
/ 24 сентября 2008

Убедитесь, что вы указали -Djava.security.policy = / wherever / policy.all и -Djava.security.manager = Возможно, вам также понадобится запустить сервер кода RMI.

0 голосов
/ 24 сентября 2008

Обратите внимание на мой оригинальный пост: да 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);
}
0 голосов
/ 24 сентября 2008

Ну, ваш сервер Java-пространств, похоже, не находит класс:

com.sun.jini.mahalo.TxnMgrProxy.

Так что, я думаю, вам просто нужно добавить Mahalo (должен быть включен в дистрибутив blitz в соответствии с: http://www.dancres.org/blitz/blitz_inst.html page) к вашему classpath при запуске сервера.

Пожалуйста, опубликуйте дополнительную информацию о том, как вы запускаете свой сервер, если этот совет не поможет.

...