You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Nima Kaviani <ni...@gmail.com> on 2011/04/05 21:33:35 UTC

Problem getting the RMI client to work

Hi all,

I am trying to write an RMI client bundle on top of Felix to lookup and
import an object from an RMI registry; but my efforts fail with the
following error:

java.rmi.UnmarshalException: error unmarshalling return; nested exception
is:
    java.lang.ClassNotFoundException:
com.notehive.osgi.rubis.hibernate_osgi_rubis.web.browsereg.IServletRemote
(no security manager: RMI class loader disabled)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at
com.notehive.osgi.rubis.hibernate_osgi_rubis.web.core.SpringHttpWrapperImpl.register(SpringHttpWrapperImpl.java:102)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at
ch.ethz.iks.r_osgi.impl.ChannelEndpointImpl.handleMessage(ChannelEndpointImpl.java:1140)
    at
ch.ethz.iks.r_osgi.impl.ChannelEndpointImpl$2.run(ChannelEndpointImpl.java:295)
    at
ch.ethz.iks.r_osgi.impl.ChannelEndpointImpl$1.run(ChannelEndpointImpl.java:258)
Caused by: java.lang.ClassNotFoundException:
com.notehive.osgi.rubis.hibernate_osgi_rubis.web.browsereg.IServletRemote
(no security manager: RMI class loader disabled)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:535)
    at
java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
    at
java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
    at
sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
    at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
    ... 9 more

I am not sure if this is due to a classloading problem or a java security
issue.

For class loading I am using utilities from Pax Swissbox Core combined with
parts of Pax Exam's client code:

        if( _remoteServlet == null )
        {
            Throwable reason = null;
            long startedTrying = System.currentTimeMillis();
           try {
                ContextClassLoaderUtils.doWithClassLoader(null, new
Callable<Object>() {
                       public Object call() throws Exception {
                            try  {
                                _registry = LocateRegistry.getRegistry(
SpringHttpWrapperImpl.PORT );
                            }catch(Exception e){
                                e.printStackTrace();
                            }
                            return null;
                       }
                   });
            } catch (Exception e1) {
                e1.printStackTrace();
            }
           try
           {
               _remoteServlet =
                   (IServletRemote) _registry.lookup(
SpringHttpWrapperImpl.STUB_NAME );
               while( _remoteServlet == null
                      && System.currentTimeMillis() < startedTrying + 1000
);
           } catch( ConnectException e ) {
               reason = e;
           } catch( NotBoundException e ) {
               reason = e;
           } catch( RemoteException e ) {
               reason = e;
           }
           if( _remoteServlet == null )
                reason.printStackTrace();
        }

I also have Felix Security Framework in place and the following policy file
configured.

grant {
    permission java.security.AllPermission;
};

The part that triggers the error is the code below where I try to lookup for
the class from the RMI registry:

_remoteServlet = (IServletRemote) _registry.lookup(
SpringHttpWrapperImpl.STUB_NAME );

very much would appreciate any hints on what could be wrong.
-Nima

-- 
http://nima.magic.ubc.ca