[ 
https://issues.apache.org/jira/browse/ARIES-681?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13051905#comment-13051905
 ] 

Timothy Ward commented on ARIES-681:
------------------------------------

Hi,

>From what you are saying it seems as though you are not pre-enhancing your 
>entities with the EclipseLink tools - is this correct?

Assuming you aren't enhancing your entities at build time they must be being 
enhanced at some other point to end up referencing IndirectList. Glassfish 
offers deploy time weaving for OSGi bundles, which is probably what's causing 
this problem. This can be disabled by specifying 

GlassFish-StaticallyWeaved: true

in the bundle manifest. I think they are doing this deploy-time enhancement, 
then not adding the extra dependencies into the bundle manifest, which is then 
breaking things.

As for whether the EclipseLink team would take this seriously, they're actually 
pretty OSGi savvy. In fact EclipseLink was the first properly OSGi compatible 
JPA provider. I think they would be very interested to know about this issue.

I am still not convinced that we should be adding the Persistence Provider into 
the ClassLoader returned by PersistenceUnitInfo#getClassLoader(). This may 
solve the issue here, but it causes many more. The actual persistence bundle 
doesn't gain any dependency or lifecycle management this way, and it won't 
actually allow the bundle to load these classes if they're really needed. I 
still think getting EclipseLink and/or GlassFish to look at this is important.

Regards,

Tim

> JPA Container BundleDelegatingClassLoader should look for classes in the 
> provider bundle, too
> ---------------------------------------------------------------------------------------------
>
>                 Key: ARIES-681
>                 URL: https://issues.apache.org/jira/browse/ARIES-681
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>    Affects Versions: 0.3
>         Environment: Glassfish 3.0 (EclipseLink 2.0.2), Glassfish 3.1 
> (EclipseLink 2.2)
>            Reporter: Balazs Zsoldos
>         Attachments: classloadingFromMultipleProviderDuringQuery.0.3.patch
>
>
> Currently the BundleDelegatingClassLoader in JPA container only looks for 
> classes in the bundle of the entitymanager. However the JPA implementation 
> Eclipselink needs some classes from itself. The reason is that in entity 
> classes the properties that hold mapping of One-To-Many are converted to 
> EclipseLink list type. See the following exception stacktrace:
> Internal Exception: java.lang.ClassNotFoundException: 
> org.eclipse.persistence.indirection.IndirectList
>       at 
> org.eclipse.persistence.exceptions.ValidationException.classNotFoundWhileConvertingClassNames(ValidationException.java:2317)
>       at 
> org.eclipse.persistence.internal.queries.InterfaceContainerPolicy.convertClassNamesToClasses(InterfaceContainerPolicy.java:123)
>       at 
> org.eclipse.persistence.mappings.CollectionMapping.convertClassNamesToClasses(CollectionMapping.java:788)
>       at 
> org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1458)
>       at 
> org.eclipse.persistence.sessions.Project.convertClassNamesToClasses(Project.java:362)
>       at 
> org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:322)
>       ... 83 more
> Caused by: java.lang.ClassNotFoundException: 
> org.eclipse.persistence.indirection.IndirectList
>       at 
> org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:744)
>       at org.apache.felix.framework.ModuleImpl.access$100(ModuleImpl.java:61)
>       at 
> org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1656)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>       at 
> org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:604)
>       at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1487)
>       at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:897)
>       at 
> org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader$1.run(BundleDelegatingClassLoader.java:50)
>       at 
> org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader$1.run(BundleDelegatingClassLoader.java:47)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at 
> org.apache.aries.jpa.container.unit.impl.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:47)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:247)
>       at 
> org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:88)
>       at 
> org.eclipse.persistence.internal.queries.InterfaceContainerPolicy.convertClassNamesToClasses(InterfaceContainerPolicy.java:120)
>       ... 87 more

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to