1 Reply Latest reply on Jan 16, 2009 5:07 PM by Matthias Hueller

    javax.naming.CommunicationException - no security manager: R

    Matthias Hueller Novice

      Hi!

      I'm working on an application with a client and a server. I'm using JBoss 4.2 and Java 1.6.
      On client side I bind an object to JNDI and try to lookup this object on server side.

      CLIENT:

      Object callback = ...;
      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
      p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
      Context context = new InitialContext(p);
      context.bind (newBindName, callback); // Bind the callback object to JNDI


      This is the Callback class:

      public class Callback
       implements BCServiceProxy, Serializable, Remote {
      
      /**
       * Logger
       */
      private static final Log log = LogFactory.getLog (Callback.class);
      
      /**
       * The listener to be notified about new postboxentries
       */
      private transient PostboxListener postboxListener;
      
      /**
       * Constructor
       * @param postboxListener listener to be notified about new postboxentries
       */
      public Callback (PostboxListener postboxListener) {
       this.postboxListener = postboxListener;
      }
      
      /**
       * @inheritDoc
       */
      public String gotPostboxEntry (PostboxEntry postboxEntry) {
       String rc = null;
       if (postboxListener!=null) {
       rc = postboxListener.gotPostboxEntry (postboxEntry);
       }
       return rc;
      }
      
      }


      After the binding I can see the object at the JNDIView in Global JNDI Namespace:
      +- a5xk891BCServiceProxyPostboxTask 41232010727767 (class: de.postbox.proxies.bcservice.Callback)


      SERVER:

      The remote interface BCServiceProxy which the Callback class implements is in a JAR which is deyploed on the server.

      public interface BCServiceProxy
       extends Serializable, Remote {
      
       /**
       * Called when the next postboxentry is known
       * @param postboxEntry the next postboxentry
       * @return String the id of the workitem, which should be delivered next.
       * For null the order of the delivered postboxentries will not be modified
       * @throws RemoteException
       */
       public String gotPostboxEntry (PostboxEntry postboxEntry) throws RemoteException;
      
      }


      Now I try to make the lookup on server side:

      Properties p = new Properties();
      p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
      p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
      Context context = new InitialContext(p);
      Object objref = context.lookup(requestorbindname);


      This results in an exception:
      javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: No ClassLoaders found for: de.postbox.proxies.bcservice.Callback (no security manager: RMI class loader disabled)]

      Why do I get this exception?
      Is it because I see the concrete class in JNDIView (see above). Shouldn't I see there something like this: +- a5xk891BCServiceProxyPostboxTask 41232010727767 (proxy: $Proxy99 implements interface de.postbox.services.bcservice.proxy.BCServiceProxy)?

      Any help will be greatly appreciated!