I'm doing similar thing to download home and remote
interfaces for my beans from the server. It works.

But, I'm using regular SecurityManager instead of 
RMISecurityManager and I have all jboss-client jars
and jndi.properties in the client classpath.

It worked on cvs snapshot from 11/7. Client behavior
haven't dependent of number of runs.

If you can send me your hack to WebServer, I'll check
the situation more precisely.



[EMAIL PROTECTED] wrote:
> 
> Ok, so I'm a bit naive.... :)
> 
> Here's how i've hacked up my sample code:
> 
> import javax.naming.*;
> import javax.rmi.PortableRemoteObject;
> import java.rmi.RMISecurityManager;
> import java.net.*;
> 
> import assetmgr.biz.*;
> 
> public class test {
>   public static void main(String[] args) {
>     try {
>       Thread.currentThread().setContextClassLoader(new
> URLClassLoader(new URL[] { new URL("http://localhost:8083/") }));
> System.out.println("Set the classloader");
>       System.setSecurityManager(new RMISecurityManager());
> System.out.println("Set the security manager");
> 
>       Context ctx = new InitialContext();
> System.out.println("Created a context");
>       Object ref = ctx.lookup("UserMgmt");
> System.out.println("performed the lookup");
>       UserMgmtHome home =
> (UserMgmtHome)PortableRemoteObject.narrow(ref, UserMgmtHome.class);
> System.out.println("narrowed the reference");
>       UserMgmt usermg = home.create();
> System.out.println("created the bean instance");
> 
>       System.out.println(usermg.getAllUsersHTML());
> System.out.println("Got the user's html");
> 
>     } catch (Exception e) {
>       System.out.println("Caught an exception: " + e);
>       e.printStackTrace();
>     }
>   }
> }
> 
> I also added a line to the webserver so that it notifies the server
> console whenever it's going to transfer a file (and with the name of
> the file)
> 
> When I run my client like this:
> java -Djava.security.policy=java.policy test           (java.policy has
> AllPermission set)
> 
> The client fails with a "cannot instantiate class:
> org.jnp.interfaces.NamingContextFactory".  The funny thing is, is that
> the server just transferred that file (I can see that via my webserver
> hack)  Actually, the client must always be requesting jndi.properties,
> then the NamingContextFactory class (also via my webserver hack).
>         [Webserver] Going to transfer this path: jndi.properties
>         [Webserver] Going to transfer this path:
> org/jnp/interfaces/NamingContextFactory.class
> 
> SO--I conceded and included jnp-client.jar in my classpath, and run my
> client like this:
> java -classpath $CLASSPATH:/opt/jboss/client/jnp-client.jar
> -Djava.security.policy=java.policy test
> 
> The client then hangs after setting the security manager (problem while
> trying to create the Context). The webserver shows that it transfers
> jndi.properties. (and that's all)
>         [Webserver] Going to transfer this path: jndi.properties
> 
> What's even weirder is that the system behaves differently after it is
> first started up, than after a few runs of this test.  I start the
> server clean, and try the client, and the client complains about a
> NoClassDefFound for javax/ejb/EJBHome, right after this server output:
>         [Webserver] Going to transfer this path: jndi.properties
>         [Webserver] Going to transfer this path:
> assetmgr/biz/UserMgmtHome.class
>         [Webserver] Going to transfer this path:
> javax/ejb/EJBHome.class
> And this time, the client was able to create a context before the
> exception is thrown.
> 
> Running the client again immediately with the same params, hangs the
> client right after it creates the context, with the webserver reporting
> that only jndi.properties was transferred.
> 
> Wow--that was really long-winded. I really appreciate your help on
> this.  I had thought this should be possible, after reading this post
> by Rickard a long time ago --
> http://www.mail-archive.com/[email protected]/msg00382.html
> .
> 
> -Jason
> 
>  Rickard �berg
>  <[EMAIL PROTECTED]>               To:        jBoss
>                             <[EMAIL PROTECTED]>
>  11/08/2000 10:27 AM                cc:
>  Please respond to jBoss            Subject:        Re: [jBoss-User]
>                             DCL
> 
> Hey
> 
> [EMAIL PROTECTED] wrote:
> > <code>
> > import javax.naming.*;
> > import javax.rmi.PortableRemoteObject;
> > import java.rmi.RMISecurityManager;
> >
> > import assetmgr.biz.*;
> >
> > public class test {
> >   public static void main(String[] args) {
> >     try {
> >       System.setSecurityManager(new RMISecurityManager());
> >       Context ctx = new InitialContext();
> >       Object ref = ctx.lookup("UserMgmt");
> >       UserMgmtHome home =
> > (UserMgmtHome)PortableRemoteObject.narrow(ref, UserMgmtHome.class);
> >       UserMgmt usermg = home.create();
> >       System.out.println(usermg.getAllUsersHTML());
> >     } catch (Exception e) {
> >       System.out.println("Caught an exception: " + e);
> >       e.printStackTrace();
> >     }
> >   }
> > }
> > </code>
> >
> > Is it supposed to be that simple?
> 
> There's no policy file set above. Have you set that properly?
> 
> > Do I need to setup any special
> > classloaders?  Anyway here's the output:
> >
> > <output>
> > Caught an exception: javax.naming.NoInitialContextException: Cannot
> > instantiate class: org.jnp.interfaces.NamingContextFactory [Root
> > exception is java.lang.ClassNotFoundException
> > : org.jnp.interfaces.NamingContextFactory]
> > javax.naming.NoInitialContextException: Cannot instantiate class:
> > org.jnp.interfaces.NamingContextFactory.  Root exception is
> > java.lang.ClassNotFoundException: org.jnp.interfaces
> > .NamingContextFactory
> 
> Have you included jnp-client.jar in your clients classpath?
> 
> In its basic form dynamic classloading only works for jboss-client.jar
> and any EJB bean interfaces and classes. Due to the workings of JNDI
> DCL
> does not work the way you have done it above. A workaround for this is
> to use a Reference which points out the factory and codebase from where
> the classes can be loaded. There are more detailed postings on this (by
> me) in the archives for this list.
> 
> You can also set a URLClassLoader as context classloader for this to
> work, which might be simpler:
> Thread.currentThread().setContextClassLoader(new URLClassLoader(new
> URL[] { new URL("http://localhost:8083/") }));
> This will allow JNDI to find the JNP classes properly.
> 
> > (a jndi.properties file is in the classpath so the url to the server
> > should be known
> 
> Yes, but not the JNDI implementation codebase.
> 
> /Rickard
> 
> --
> Rickard �berg
> 
> Email: [EMAIL PROTECTED]
> http://www.telkel.com
> http://www.jboss.org
> http://www.dreambean.com
> 
> --
> --------------------------------------------------------------
> To subscribe:        [EMAIL PROTECTED]
> To unsubscribe:      [EMAIL PROTECTED]
> Problems?:           [EMAIL PROTECTED]

-- 
_________________________________________________________
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