You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Balazs Zsoldos (JIRA)" <ji...@apache.org> on 2011/06/17 17:38:47 UTC

[jira] [Updated] (ARIES-681) JPA Container BundleDelegatingClassLoader should look for classes in the provider bundle, too

     [ https://issues.apache.org/jira/browse/ARIES-681?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Balazs Zsoldos updated ARIES-681:
---------------------------------

    Attachment: classloadingFromMultipleProviderDuringQuery.0.3.patch

The attached file contains a patch for version 0.3 (till now I tested with the release only). I guess the patch is almost the same for the version in the SVN trunk.
The patch changes the Temp and the normal DelegatingClassLoader to search resources and classes in the PU bundle first and if it does not find it checks the bundle of the JPA provider.

> 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