[jboss-user] [EJB/JBoss] - RMI dynamic class loading

hipa do-not-reply at jboss.com
Tue Aug 19 06:33:45 EDT 2008


Does dynamic class loading really work in JBoss 4.2.2?
On server I have a bean:

Bean.java

  | @Stateless
  | public class Bean implements BeanRemote
  | {
  |     public void callMe()
  |     {
  |     }
  | }
  | 

BeanRemote.java

  | @Remote
  | public interface BeanRemote
  | {
  |     public void callMe();
  | }
  | 

Then I connect to server via RMI:

Client.java

  | public class Client
  | {
  |     public static void main(String[] args)
  |     {
  |         if (System.getSecurityManager() == null)
  |         {
  |             System.setSecurityManager(new RMISecurityManager());
  |         }
  | 
  |         Properties jndiProps = new Properties();
  |         jndiProps.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
  |         jndiProps.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
  |         jndiProps.put("java.naming.provider.url", "jnp://localhost/app");
  | 
  |         InitialContext ic = new InitialContext(jndiProps);
  |         Object bean = ic.lookup("Bean/remote");
  | 
  |         System.out.println("bean = " + bean);
  |     }
  | }
  | 

Exception occurs in the line with lookup:

  | Exception in thread "main" javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: org.test.BeanRemote]
  | 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:786)
  | 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
  | 	at javax.naming.InitialContext.lookup(InitialContext.java:351)
  | 	at org.test.Client.main(Client.java:53)
  | Caused by: java.lang.ClassNotFoundException: org.test.BeanRemote
  | 	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 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 sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:707)
  | 	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:651)
  | 	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:588)
  | 	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:1494)
  | 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1457)
  | 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
  | 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
  | 	at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
  | 	at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
  | 	at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:710)
  | 	... 4 more
  | 

I also tried setting java.rmi.server.codebase property on client to 'http://localhost:8083' but it didn't help. Webserver on 8083 port seems not to see my bean. I can get class for example for org.jboss.web.WebServer using url 'http://localhost:8083/org.jboss.web.WebServer' but 'http://localhost:8083/org.test.BeanRemote' returns blank page.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4171219#4171219

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4171219



More information about the jboss-user mailing list