Actually, unless I miss my guess, this may be a sign that Orion isn't
setting the Thread's context ClassLoader appropriately. Rosanna Lee (of the
JNDI list) mentioned in a private email thread that JNDI uses the Thread's
context ClassLoader to appropriately resolve back to the right ClassLoader
when doing a lookup-and-classload operation. If the context ClassLoader
isn't set right, these kinds of errors *could* occur. That, or the Orion
ClassLoader implementation is overriding loadClass(), according to the JDK
1.1 rules, instead of overriding findClass(), which is the Java2 way.....

Just a wild-*ss guess, but without any sort of confirmation or denial from
the Orion team, it's about as good as it gets, it seems. Potential
workaround: do a Class.forName(p.get(Context.INITIAL_CONTEXT_FACTORY))
before calling into the JNDI InitialContext constructor.

Ted Neward
Java Instructor, DevelopMentor ( http://www.develop.com )
http://www.javageeks.com/~tneward
-----Original Message-----
From: Joe Walnes <[EMAIL PROTECTED]>
To: Orion-Interest <[EMAIL PROTECTED]>
Date: Wednesday, March 22, 2000 7:05 AM
Subject: Re: Orion and Visibroker 4: ClassLoader probs(?)


>Thanks to Magnus for solving this one.
>
>If anyone else runs into this problem, the problem is solved by copying the
>appropriate VisiBroker jar files to /path-to-jdk/jre/lib/ext/. Weird
>behaviour by the VM classloader.
>
>-Joe Walnes
>
>At 04:49 PM 3/22/00 +0000, Joe Walnes wrote:
>>I'm trying to use Orion as a client for some CORBA based objects that are
>>accessible via Visibroker.
>>
>>The following code works as a standalone client, providing the correct
>>jars are in the classpath and the appropriate system properties are set,
>>and the ORB is running on the localhost:
>>
>>-----------------------------
>>
>>// Get context
>>Properties p = new Properties();
>>p.put(Context.INITIAL_CONTEXT_FACTORY,"com.inprise.j2ee.jndi.CtxFactory");
>>p.put(Context.URL_PKG_PREFIXES,"com.inprise.j2ee");
>>Context context = new InitialContext(p);
>>
>>// Lookup CustomerHome
>>Object ref = context.lookup("customer");
>>CustomerHome home =
>>         (CustomerHome)
PortableRemoteObject.narrow(ref,CustomerHome.class);
>>
>>-----------------------------
>>
>>However, I'm trying to allow servlets/jsps access to the objects from
>>within Orion. All the appropriate system properties (-Dxx=yy) where set on
>>the command line when starting orion, the appropriate jars where placed in
>>orion/lib and the orb was running on localhost.
>>
>>In a Servlet running in Orion, when the code got as far as creating the
>>new InitialContext, a NoClassDefFoundError for
>>com.inprise.j2ee.jndi.CtxFactory was thrown, however,
>>Class.forName("com.inprise.j2ee.jndi.CtxFactory") did not throw an error.
>>
>>The problem appeared to be a ClassLoader problem, where InitialContext was
>>using a different method for loading classes that the servlet was using,
>>and only seemed to be looking in the base jars in the orion dir. I added
>>the appropriate jndi/corba/iiop/orb classes to orion/jndi.jar and the code
>>succesfully managed to lookup the required object. Hurrah!
>>
>>However, the object returned by context.lookup() is of type
>>org.omg.CORBA.portable.ObjectImpl which needs to be narrowed to
>>appropriate type before casting. This always throws a ClassCastException,
>>even though the ObjectImpl says it is the correct type. I'm stuck!
>>
>>I've been trying to get round this problem for days now unsuccesfully. I
>>can access the corba objects as standalone java apps, and from within Sun
>>Web Server, mod_jserv and jRun with no problem, just not Orion.
>>
>>Can anyone help, or shed some light on what the problem may be. I suspect
>>the problem is related to ClassLoader.
>>
>>Could one of the Orion team explain how the ClassLoader works in the
>>server please.
>>
>>Note, in this case Orion is simply being used as a web-server for serving
>>jsp/servlets. EJB/JTS/etc is not required, and the JNDI service is
>>replaced by that that Visibroker supplies.
>>
>>Thanks in advance
>>
>>-Joe Walnes
>


Reply via email to