У меня есть большие сомнения по поводу этого форума, но я готов быть приятно удивлен;) Престижность и отличная карма тем, кто вернул меня на правильный путь.
Я пытаюсь использовать блиц-реализацию JavaSpaces (http://www.dancres.org/blitz/blitz_js.html) для реализации примера ComputeFarm, представленного в http://today.java.net/pub/a/today/2005/04/21/farm.html
Пример в памяти работает нормально, но всякий раз, когда я пытаюсь использовать нестандартную реализацию блиц, я получаю следующую ошибку:
(да, 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.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.access0(ObjectTable.java:212)
at com.sun.jini.jeri.internal.runtime.ObjectTable.run(ObjectTable.java:568)
at com.sun.jini.start.AggregatePolicyProvider.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.run(MuxServer.java:244)
at com.sun.jini.start.AggregatePolicyProvider.run(AggregatePolicyProvider.java:513)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.jini.jeri.internal.mux.MuxServer.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.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.access0(ObjectTable.java:212)
at com.sun.jini.jeri.internal.runtime.ObjectTable.run(ObjectTable.java:568)
at com.sun.jini.start.AggregatePolicyProvider.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.run(MuxServer.java:244)
at com.sun.jini.start.AggregatePolicyProvider.run(AggregatePolicyProvider.java:513)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.jini.jeri.internal.mux.MuxServer.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.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-пространств, похоже, не находит класс:
com.sun.jini.mahalo.TxnMgrProxy.
Итак, я думаю, вам просто нужно добавить Mahalo (должен быть включен в блиц-дистрибутив в соответствии со следующим: страница http://www.dancres.org/blitz/blitz_inst.html) в свой путь к классам при запуске сервера.
Пожалуйста, опубликуйте дополнительную информацию о том, как вы запускаете свой сервер, если этот совет не поможет.
Обратите внимание на мое исходное сообщение: да, 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);
}
Итак, com.sun.jini.mahalo.TxnMgrProxy содержится в некоторой банке, которая содержится в вашей переменной среды 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 и вставьте сюда вывод).
Убедитесь, что вы указали -Djava.security.policy = / wherever / policy.all и -Djava.security.manager = Возможно, вам также потребуется запустить сервер кода RMI.
Это похоже на проблему загрузки классов RMI. Похоже, что серверный процесс пытается демаршалировать объект TxnMgrProxy, который ему передается (я не знаю деталей примера, я как бы догадываюсь по трассировке стека). Этот объект необходимо аннотировать с помощью базы кода, в которой можно найти определение класса. Вероятно, вам нужно убедиться, что Mahalo запущен со свойством java.rmi.server.codebase, указывающим на URL-адрес, по которому можно загрузить mahalo-dl.jar (или какой-либо JAR, содержащий определение класса).
Даже если JAR доступен локально, этого может быть недостаточно. PreferredClassProvider (он похоронен в трассировке стека) узурпирует обычную схему делегирования загрузчика классов Java, поэтому даже если класс находится там локально, он все равно захочет вытащить определение через кодовую базу.
Это сложные проблемы. Надеюсь, я нашел что-то близкое к ответу. Удачи.