Well... "dedicated.connection=true" is not documented :))) Second. There ARE drawbacks. The method you show in the message will lead you to resource leakage. Try reusing contexts for one and the same target. Anyway. The Answer is: YES, it WILL work.
However. The classes, for the Home and remote interfaces for the beans you are looking-up for have to be in the Bootstrap class-path (in most cases in the boot jar, or specified on the commandline). Otherwise you will get a ClassCastException ( "MyClass" implements "MyInterface" and not "MyInterface" and the VM thinks these are different classes :((( ). Anyway. for a simple stand-alone client this works fine, as long as you stay out of dynamic-class-loading and keep in mind, that each ne Context gets another thread, socket and leads to resource shortage. Otherwise the code in your case would work just fine. :))) Lachezar > Brilliant -- thanks. What I couldn't find was any documentation > on what goes in the environment Hashtable. :) > > What does the dedicated.connection=true property do? If I were > to do this: > > public FooRemote getRemote(String jndiURL) > { > Hashtable env = new Hashtable(); > env.put(Context.PROVIDER_URL, jndiURL); > InitialContext context = new InitialContext(env); > Object ref = context.lookup(EJB_NAME); > FooHome home = > (FooHome)PortableRemoteObject.narrow(ref, FooHome.class); > FooRemote remote = home.create(); > return fooRemote; > } > > public void doStuff() > { > FooRemote beanOne = getRemote("ormi://fred/app"); > FooRemote beanTwo = getRemote("ormi://wilma/app"); > // do stuff... > } > > Will it work? Or is the remote going to get confused as to > which server it points to? > > On Thu, 2002-04-18 at 00:53, Lachezar Dobrev wrote: > > Hi. > > A working model is to create two Initial Context-s for each server. > > Use a "dedicated.connection=true" property to create the context. > > The "dedicated.connection" however leads to resource leakage, and if you > > keep creating more and more of them you will eventualy get > > "java.lang.OutOfMemoryError: Can not create native thread" at some 200-300 > > contexts. > > If you create an context for both servers, and then use them later you > > might not have this problem. > > > > public static Context[] connections; > > > > public void ejbCreate(){ > > if ( connections != null ) return; > > Hashtable env = new Hashtable(); > > > > // Use any of these. > > env.put("dedicated.connection", Boolean.TRUE ); > > // env.put("dedicated.connection", "true"); > > > > // Set up user, pass, > > // factory (RMIInitialContextFactory). > > env.put(".......", "...."); // Set up things > > > > connections = new Context[2]; > > > > // For The first server > > env.put(Context.PROVIDER_URL, "ormi://Comp1/App1"); > > connections[0] = new InitialContext(env); > > > > // Now for the other server > > env.put(Context.PROVIDER_URL, "ormi://Comp2/App2"); > > connections[1] = new InitialContext(env); > > } > > > > public void connectServer1(){ > > connections[0].lookup("MyBean1"); > > } > > public void connectServer2(){ > > connections[1].lookup("MyBean2"); > > } > > > > You DO understand this is Orion-specific, right? > > > > Good luck. Lachezar. > > > > > I've got the same beans deployed on two different app servers (each > > > backed by a different database). I want my client to talk to both. > > > Say the two app servers are running on machines named Fred and Wilma; > > > > > > I know I can choose which one I talk to by setting > > > > > > java.naming.provider.url=ormi://fred/app > > > > > > or > > > > > > java.naming.provider.url=ormi://wilma/app > > > > > > But how do I switch at run time? I don't want to keep changing the > > > system property every time I get an InitialContext(), because the > > > system property is a global setting and one piece of code might not > > > know what another piece of code is doing. Is there a way to specify > > > the JNDI url when you create an InitialContext? > > > > > > > > > > > > > > > > >