cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Usage in Axis2
Date Sat, 21 Jul 2007 08:16:32 GMT
Glad you solved the problem, but now it presents a challenge to us -  
how do we support Axis class loading mechanism out of the box without  
breaking everything else (thread class loader so far worked in all  
environments I've tried...) I guess we need to do more research and  
testing. Can I ask you a favor - could you please open a bug report  
in Jira with a link to this discussion, so that it won't get forgotten:

http://issues.apache.org/cayenne/

Thanks
Andrus


On Jul 21, 2007, at 1:25 AM, Ajay H. Daptardar wrote:

> Hi Andrus,
>
> I managed to hack a fix. In the Util class, the getJavaClass method
> gets the class loader as:
>
> <code>
>
> ClassLoader classLoader = Thread.currentThread 
> ().getContextClassLoader();
>
> if (classLoader == null) {
>    classLoader = Util.class.getClassLoader();
> }
>
> </code>
>
> However (and I did verify this) the class loader is the one that
> tomcat uses for the Axis2 servlet. Here's how Axis2 uses class loaders
>
>
> Axis2 has the notion of service isolation where each service or module
> gets its own class loader. Using this class loader you can access any
> resource that you put into your service archive file.
>
> [See http://docs.huihoo.com/apache/axis/axis2-1.0-docs/xdocs/ 
> faq.html#b1]
>
> The fix was the following:
>
> <code>
>
> ClassLoader classLoader = null;
>
> if (classLoader == null) {
>    classLoader = Util.class.getClassLoader();
> }
>
> </code>
>
> this correctly gets the class loader that Axis2 assigned to the  
> particular WS.
>
> Best,
> - Ajay
>
> On 7/20/07, Ajay H. Daptardar <ajay.daptardar@gmail.com> wrote:
>> Hi Andrus,
>>
>> I tried the 3.0M1 build and am still getting the class not found  
>> error
>> although manifest as a CayenneRuntimeException caused by
>> ClassNotFoundException.
>>
>> Here is a trace:
>>
>> Caused by: org.apache.cayenne.CayenneRuntimeException: [v.3.0M1  
>> Jul 16
>> 2007 22:17:38] Failed to load class com.app.AnnotationType:
>> com.app.AnnotationType
>>         at org.apache.cayenne.map.ObjEntity.getJavaClass 
>> (ObjEntity.java:238)
>>         at  
>> org.apache.cayenne.reflect.PersistentDescriptorFactory.getDescriptor( 
>> PersistentDescriptorFactory.java:50)
>>         at  
>> org.apache.cayenne.reflect.ClassDescriptorMap.createDescriptor 
>> (ClassDescriptorMap.java:122)
>>         at  
>> org.apache.cayenne.reflect.LazyClassDescriptorDecorator.checkDescript 
>> orInitialized(LazyClassDescriptorDecorator.java:49)
>>         at  
>> org.apache.cayenne.reflect.LazyClassDescriptorDecorator.createObject( 
>> LazyClassDescriptorDecorator.java:63)
>>         at org.apache.cayenne.access.DataContext.newObject 
>> (DataContext.java:752)
>>         ... 26 more
>> Caused by: java.lang.ClassNotFoundException: com.app.AnnotationType
>>         at org.apache.catalina.loader.WebappClassLoader.loadClass 
>> (WebappClassLoader.java:1359)
>>         at org.apache.catalina.loader.WebappClassLoader.loadClass 
>> (WebappClassLoader.java:1205)
>>         at java.lang.ClassLoader.loadClassInternal 
>> (ClassLoader.java:319)
>>         at java.lang.Class.forName0(Native Method)
>>         at java.lang.Class.forName(Class.java:242)
>>         at org.apache.cayenne.util.Util.getJavaClass(Util.java:566)
>>         at org.apache.cayenne.map.ObjEntity.getJavaClass 
>> (ObjEntity.java:235)
>>         ... 31 more
>>
>> The problem is not that Cayenne cannot be found, it occurs when
>> Cayenne tries to load the mapped classes using the web app class
>> loader. What I don't get is that why the web app class loader cannot
>> load the classes.
>>
>> I am guessing that Axis2 creates a class loader for each web service,
>> loads the application classes and the jars in the lib folder (thats
>> why it finds Cayenne jars). But when Cayenne retrieves a class loader
>> (WebappClassLoader), this class loader is probably the one for the
>> Axis2 web service, not the one that Axis2 is using to load web
>> services.
>>
>> Probably there is a way to get the class loader for the particular  
>> web
>> service within the Axis2 (webapp) servlet.
>>
>> Best,
>> - Ajay
>>
>>
>>
>> On 7/20/07, Andrus Adamchik <andrus@objectstyle.org> wrote:
>> > This felt like a nested ClassLoader issue from the beginning...  
>> I am
>> > not familiar with the Axis2 archive details, but is it possible to
>> > put Cayenne jar at the same level as the application classes?
>> >
>> > Alternatively you can try upgrading to 3.0M1 (you can grab an
>> > *unofficial* build from here: http://people.apache.org/~aadamchik/
>> > release/3.0M1/). 3.0 uses String class names as keys and should
>> > hopefully be free from this problem. Please let me know if that
>> > worked - we will definitely need to fix it if it is still broken  
>> in 3.0.
>> >
>> > >                       // DataMaps can contain all kinds of  
>> garbage...
>> > >                        // TODO (Andrus, 10/18/2005) it would  
>> be nice
>> > > to log something
>> > >                        // here, but since EntityResolver is  
>> used on
>> > > the client, log4J is
>> > >                        // a no-go...
>> >
>> > Good catch. This is also obsolete in 3.0 - we can use commons
>> > logging. Let me clean it up.
>> >
>> > Andrus
>> >
>> >
>> >
>> > > // TODO (Andrus, 10/18/2005) it would be nice
>> > > to log something
>> > >                        // here, but since EntityResolver is  
>> used on
>> > > the client, log4J is
>> > >                        // a no-go...
>> >
>> >
>> >
>> >
>> > On Jul 20, 2007, at 9:15 PM, Ajay H. Daptardar wrote:
>> >
>> > > Hi Andrus,
>> > >
>> > > The structure of the Axis2 archive (app.aar) is as follows:
>> > >
>> > > META-INF/
>> > > META-INF/MANIFEST.MF
>> > > META-INF/services.xml
>> > > lib/
>> > > lib/bcel.jar
>> > > lib/cayenne.jar
>> > > lib/jibx-bind.jar
>> > > lib/jibx-extras.jar
>> > > lib/jibx-genbinding.jar
>> > > lib/jibx-genschema.jar
>> > > lib/jibx-run.jar
>> > > lib/mysql-connector-java-5.0.6-bin.jar
>> > > lib/qdox-1.6.1.jar
>> > > lib/stax-api.jar
>> > > lib/wstx-asl.jar
>> > > lib/xmlpull_1_1_4.jar
>> > > lib/xpp3.jar
>> > > app/<APPLICATION CLASSES>
>> > >
>> > > Cayenne jar is in the application's lib folder not axis'. After
>> > > stepping through the debugger, I found out that even though the
>> > > application can load the Cayenne data context, the entity  
>> resolver,
>> > > when it PUTS object entities in the cache, it uses the name of  
>> the
>> > > entity and when it tries to GET the object entity, it tries to  
>> use the
>> > > oe.getJavaClass() which throws an exception. This is not  
>> logged and
>> > > the comment there is:
>> > >
>> > >                        // DataMaps can contain all kinds of  
>> garbage...
>> > >                        // TODO (Andrus, 10/18/2005) it would  
>> be nice
>> > > to log something
>> > >                        // here, but since EntityResolver is  
>> used on
>> > > the client, log4J is
>> > >                        // a no-go...
>> > >
>> > > the Util.getJavaClass() fails to load the (application) class it
>> > > seems.
>> > >
>> > > Thanks,
>> > > Best,
>> > > - Ajay
>> > >
>> > >
>> > >
>> > >
>> > >
>> > > On 7/19/07, Andrus Adamchik <andrus@objectstyle.org> wrote:
>> > >> That is strange... I assume Cayenne jars are in "axis2/WEB- 
>> INF/lib",
>> > >> and not in some shared location?
>> > >>
>> > >> Andrus
>> > >>
>> > >> On Jul 18, 2007, at 11:53 PM, Ajay H. Daptardar wrote:
>> > >> > Hello all,
>> > >> >
>> > >> > I am trying to use Cayenne within Axis2. I copied the three
>> > >> > configuration XML files into  the classes folder for Axis2:
>> > >> >
>> > >> > /opt/apache-tomcat-6.0.13/webapps/axis2/WEB-INF/classes
>> > >> >
>> > >> > I can create the data context object but during runtime, data
>> > >> > context's entity resolver cannot find the mapped class and  
>> I get
>> > >> the
>> > >> > following:
>> > >> >
>> > >> > "Class is not mapped with Cayenne"
>> > >> >
>> > >> > However when I run the same application as standalone, I  
>> have no
>> > >> > errors.
>> > >> >
>> > >> > Any help much appreciated.
>> > >> >
>> > >> > Best,
>> > >> > - Ajay
>> > >> >
>> > >>
>> > >>
>> > >
>> > >
>> > > --
>> > > The mind is everything; what you think, you become. -- Buddha
>> > >
>> >
>> >
>>
>>
>> --
>> The mind is everything; what you think, you become. -- Buddha
>>
>
>
> -- 
> The mind is everything; what you think, you become. -- Buddha
>


Mime
View raw message