Problem sovled.  Thanks Tim you got me thinking on the right path.

I put the interface.jar in the tomcat shared/lib rather than in the
individual context's  lib folder.

This worked because the jar in the shared/lib folder is common to each of
the context's classloader.  Putting the interface.jar in each context
reflects having two different interfaces (because of the different
classloaders).


> My interface is only in the 2 context specific locations:
>
> Application A context a: /WEB-INF/lib/interface.jar
> Application B context b: /WEB-INF/lib/interface.jar
>
> It is not in the Tomcat common or shared lib folders; I've verified this
> just in case I had a brain cramp.
>
>
>
>> I've seen this with Oracle jdbc objects.  If you have classes12.jar in
>> your
>> WEB-INF/lib directory, and a copy in common/lib (for the Tomcat
>> Datasource)
>> then you will have TWO oracle.jdbc.XX classes loaded, one in the common
>> classloader and on in your web app's classloader and although they are
>> both
>> oracle.jdbc.XX, they are not the SAME class object (instance).
>>
>> So, be certain your interface X is not in two visible places.  Or if it
>> is,
>> you cannot cast objects from one classloader to the other.
>>
>> Tim
>>
>> -----Original Message-----
>> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
>> Sent: Thursday, April 06, 2006 10:10 AM
>> To: users@tomcat.apache.org
>> Subject: crossContext breaking class hierarchy?
>>
>> Hello,
>>
>> I am experiencing a problem with Tomcat and class hierarchies.  In
>> particular when an object (which implements interface X) is shared among
>> serveral contexts I am unable to cast the object back into interface X.
>>
>> Here is the setup (for simplicity I'll illustrate this with 2 contexts):
>>
>> * Interface "ClassInterface" is distributed across all applications in a
>> .jar.
>>
>> Application A in context a
>> --------------------------
>> - Implements ClassInterface and adds an instance of the class in it's
>> context:
>>
>>   ClassInterface i = new ClassInterfaceImplementation();
>>   getServletContext().setAttribute("some.key", i);
>>
>> Application B in context b
>> --------------------------
>> - Tries to cast the object in the context back into a ClassInterface but
>> fails with a classCastException: ClassInterfaceImplementation
>>
>>   ServletContext context = (ServletContext)
>> getServletContext.getContext("/a");
>>   ClassInterface i = (ClassInterface) context.getAttribute("some.key");
>>   -- EXCEPTION IS THROWN --
>>   java.lang.ClassCastException: ClassInterfaceImplementation
>>
>>
>> Has anybody experienced this before?  Does setting an attribute in the
>> context mess things up with the class hierarchy?
>>
>> Thanks.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to