> May be you can participate the discussions too. ;)
I will at least watch it - I am on Geronimo dev list.
Andrus
On Feb 27, 2007, at 6:54 PM, Lasantha Ranaweera wrote:
> Thanks Andrus for your explanation... I will investigate this more
> bit &
> create a patch pretty soon. We will try to get some help from Geronimo
> side too. May be you can participate the discussions too. ;)
>
> Thanks,
> Lasantha
>
>>
>> On Feb 27, 2007, at 4:37 PM, Lasantha Ranaweera wrote:
>>
>>
>>> BTW as a solution I changed the given lines in EntityMapLoader
>>> class, then
>>> it goes bit further and failed in Visitor classes again.
>>>
>>> ClassLoader loader = context.getTempClassLoader(); //caynne
>>> existing one
>>> ClassLoader loader = persistenceUnit.getClassLoader(); //my
>>> soultion since
>>
>> We can't use the unit main ClassLoader at the point of loading the
>> annotations, as annotations processing predates class enhancement,
>> and we can't pollute the main class loader with unenhanced classes.
>>
>>
>>> Caused by: java.lang.NullPointerException
>>> at
>>> org.apache.cayenne.jpa.conf.ClassAnnotationProcessorFactory
>>> $EntityProcessor.onStartElement
>>> (ClassAnnotationProcessorFactory.java:85)
>>> at
>>> org.apache.cayenne.jpa.conf.EntityMapAnnotationLoader.loadClassMappi
>>> ng
>>> (EntityMapAnnotationLoader.java:202)
>>> at
>>> org.apache.cayenne.jpa.conf.EntityMapLoader.loadFromAnnotations
>>> (EntityMapLoader.java:195)
>>> at
>>> org.apache.cayenne.jpa.conf.EntityMapLoader.loadEntityMap
>>> (EntityMapLoader.java:97)
>>> ... 28 more
>>
>>
>> I assume there is a line mismatch, and the NPE is really at line 84,
>> so "element.getAnnotation(Entity.class)" returns null:
>>
>> public void onStartElement(
>> AnnotatedElement element,
>> AnnotationProcessorStack context) {
>> Entity entityAnnotation = element.getAnnotation
>> (Entity.class);
>>
>> JpaEntity entity = new JpaEntity();
>> entity.setClassName(((Class) element).getName());
>> entity.setAttributes(new JpaAttributes());
>>
>> if (!Util.isEmptyString(entityAnnotation.name()))
>> { // LINE 84
>> entity.setName(entityAnnotation.name
>> ()); // LINE 85
>> }
>>
>> context.push(entity);
>> }
>>
>> OpenEJB TemporaryClassLoader has this code that I suspect may causes
>> this error?? (I can't confirm it - it works in my OpenEJB integration
>> test environment):
>>
>> // Annotation classes must be loaded by the normal
>> classloader
>> if (isAnnotationClass(bytes)) {
>> return Class.forName(name, resolve, getClass
>> ().getClassLoader());
>> }
>>
>> While the bug may still be on Cayenne end, I wonder if Dain or
>> somebody else from Geronimo can comment on this?
>>
>> Andrus
>>
>
>
This archive was generated by hypermail 2.0.0 : Wed Feb 28 2007 - 03:44:58 EST