Hi,
I posted a question on stackoverflow but got no answer, can anybody help me
here?

I am having some difficulties with RMI and Tomcat. This is the big picture
of this project I am working on: the RMI client is called by a Java servlet
that runs in Tomcat, the servlet accept user input and pass the parameters
to the RMI client. Then the RMI client then calls the RMI server to run the
heavy compuation part. The problem is that although everything works fine
without hosting the RMI client in the Tomcat server, it doesn't run once I
put it in Tomcat.

Here are some configurations:

I DID NOT set up the security manager in the code, I assume that Tomcat
will use its own.
 //if (System.getSecurityManager() == null) {
 //   System.setSecurityManager(new SecurityManager());
 //}

I also set the permission as following:
> $CATALINA_HOME/conf/catalina.policy
    grant codeBase "file:${catalina.home}/webapps/MyAPP/WEB-INF/classes/-"
{
        permission java.security.AllPermission "", ""; };
    grant codeBase "file:${catalina.home}/webapps/MyAPP/WEB-INF/lib/-" {
        permission java.security.AllPermission "", "";
    };
    grant codeBase
"file:${catalina.home}/webapps/MyAPP/WEB-INF/lib/some-common-3.0.jar" {
        permission java.io.FilePermission "*", "read, write";
    };

Other than these two configurations, I didn't set any
java.rmi.server.codebase or java.security.policy.

I got the following error by submitting the code from RMI client to RMI
server:
 java.rmi.ServerException: RemoteException occurred in server thread;
nested exception is:
 java.rmi.UnmarshalException: error unmarshalling arguments; nested
exception is:
 java.lang.ClassNotFoundException: mypackage.SomeClass
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:334)
 at sun.rmi.transport.Transport$1.run(Transport.java:159)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
 at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
 at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
 at java.lang.Thread.run(Thread.java:662)
 at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
 at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
 at
java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
 at
java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
 at com.sun.proxy.$Proxy19.executeTask(Unknown Source)
 at
cluster.server.centralservice.CentralManagementServer.submitJob(CentralManagementServer.java:232)
 at cluster.server.centralservice.JobSubmitter.runJob(JobSubmitter.java:226)
 at cluster.server.centralservice.JobSubmitter.doPost(JobSubmitter.java:144)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
 at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
 at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
 at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
 at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
 at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
 at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
 at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
 at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
 at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
 at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
 at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
 at
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
 at java.lang.Thread.run(Thread.java:662)
 Caused by: java.rmi.UnmarshalException: error unmarshalling arguments;
nested exception is:
 java.lang.ClassNotFoundException: mypackage.SomeClass

I have been stuck here for a few days. Most examples I searched online is
outdated and do not cover the RMI with Tomcat set up.
How can I set "java.rmi.server.codebase" in Tomcat 7 or how RMI server can
find the codebase? Everything works fine before puting in Tomcat. Can
anybody help?

The post is listed here:
http://stackoverflow.com/questions/17114804/running-rmi-client-in-tomcat-7-got-classnotfoundexception

Many thanks.


William

Reply via email to