Rickard,

Thanks a lot for your detailed answer. I followed your 
recommendation and got my test working using reflection.
Now I don't need to know exact names for Home/Remote
interfaces.
Great, but it looks like they have to be present in CLASSPATH
anyway. Otherwise I'm getting CommunicationException:

javax.naming.CommunicationException [Root exception is
java.lang.ClassNotFoundException: UserHome]

Sorry, for bothering you again, but let me ask you, 
as the master of JNDI, what I'm doing wrong? 

I'm afraid I missed something about JNDI (in spite of I 
have c++/corba background).
Does lookup() method required "looked" class to be present
in classpath or at list to be dynamically loaded?
Is there any other way to get an object without having it
in classpath?

My client looks like:

[...]
try
{
  InitialContext jndiContext = new InitialContext();

  // here I got an exception, if UserHome interface is not in
classpath
  Object ref  = jndiContext.lookup("User");

  Method createMethod = ref.getClass.getMethod("create",
null);
  Object o = createMethod.invoke(ref, null);

  Method computeMethod = o.getClass()
                          .getMethod("compute",
                                     new
Class[]{String.class});

  String xml = (String)computeMethod.invoke(o, 
                                new Object[]{new String("aaa")});
  [...]
}
catch(Exception e)
{
  System.err.println( e );
  e.printStackTrace();
}
[...]


Everything works when UserHome.class is in classpath, but if
not:

javax.naming.CommunicationException.  Root exception is
java.lang.ClassNotFoundException: userbean.UserHome
        at java.net.URLClassLoader$1.run(URLClassLoader.java,
Compiled Code)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java,
Compiled Code)
        at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled
Code)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java,
Compiled Code)
        at java.lang.ClassLoader.loadClass(ClassLoader.java, Compiled
Code)
        at
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:314)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java, Compiled Code)
        at
sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.inputProxyClassDescriptor(ObjectInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.readObject(ObjectInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.readObject(ObjectInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.inputObject(ObjectInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.readObject(ObjectInputStream.java,
Compiled Code)
        at
java.io.ObjectInputStream.readObject(ObjectInputStream.java,
Compiled Code)
        at java.rmi.MarshalledObject.get(MarshalledObject.java,
Compiled Code)
        at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java,
Compiled Code)
        at
org.jnp.interfaces.NamingContext.lookup(NamingContext.java,
Compiled Code)
        at javax.naming.InitialContext.lookup(InitialContext.java,
Compiled Code)
        at engasbeenclient.EngasBeanClient.main(EngasBeanClient.java,
Compiled Code)


-- 
_________________________________________________________
Alexander Kogan    Parametric Technology Corporation
[EMAIL PROTECTED]      128 Technology Drive, Waltham MA 02453


--
--------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Problems?:           [EMAIL PROTECTED]

Reply via email to