You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Mark Struberg <st...@yahoo.de> on 2010/01/05 21:42:50 UTC

reincarnation of OPENJPA-256?

Hi!

I fear I got hit by OPENJPA-256 [1].

I'm still not sure why, but in ObjectValue#newInstance for clsName=org.apache.openjpa.util.CacheMap and type=interface java.util.Map the SystemClassLoader is being used and I get a java.lang.reflect.InvocationTargetException so the workaround mentioned in the old Jira simply does not work.

I'm using OpenJPA compiled myself from Revision 896212 under jdk-1.6.0_17-b04 x86_64 and running under jetty-6.1.22 

...
Caused by: java.lang.NoClassDefFoundError: org/apache/openjpa/lib/util/SizedMap
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
	at java.lang.Class.getConstructor0(Class.java:2699)
	at java.lang.Class.newInstance0(Class.java:326)
	at java.lang.Class.newInstance(Class.java:308)
	at org.apache.openjpa.lib.util.J2DoPrivHelper$11.run(J2DoPrivHelper.java:368)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:223)
	at org.apache.openjpa.lib.conf.ObjectValue.newInstance(ObjectValue.java:124)
	at org.apache.openjpa.conf.QueryCompilationCacheValue.newInstance(QueryCompilationCacheValue.java:60)
	at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
	at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
	at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getQueryCompilationCacheInstance(OpenJPAConfigurationImpl.java:1522)
	at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:634)
	at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:617)
	at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:679)
	at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:586)
	at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:971)
	at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:957)
	at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:953)
	... 90 more
Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.lib.util.SizedMap
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)


txs and LieGrue,
strub


[1] http://issues.apache.org/jira/browse/OPENJPA-256


      

Re: reincarnation of OPENJPA-256?

Posted by Donald Woods <dw...@apache.org>.
Please open a new JIRA.

Is this related to your Jetty/Tomcat javaagent issues in OPENJPA-1454?


-Donald


Mark Struberg wrote:
> I did a quick hack for now. I don't think it's perfect, but imho better than to add another catch and retry ...
> 
> As I said: this works for me, but I have no clue if it is ok.
> Should I open a new JIRA or reopen the 256?
> 
> txs,
> strub
> 
> Index: openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java
> ===================================================================
> --- openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java	(Revision 896212)
> +++ openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java	(Arbeitskopie)
> @@ -19,6 +19,7 @@
>  package org.apache.openjpa.lib.conf;
>  
>  import java.security.AccessController;
> +import java.security.PrivilegedActionException;
>  
>  import org.apache.commons.lang.ObjectUtils;
>  import org.apache.openjpa.lib.util.J2DoPrivHelper;
> @@ -115,6 +116,21 @@
>          if (cl == null) {
>              cl = AccessController.doPrivileged(
>                  J2DoPrivHelper.getClassLoaderAction(type));
> +            if (cl == null) {
> +                ClassLoader ctxLoader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
> +                // TODO if ctxLoader == null use the normal cl
> +
> +                try {
> +                   @SuppressWarnings("unchecked")
> +                   Class clsClazz = AccessController.doPrivileged(
> +                        J2DoPrivHelper.getForNameAction(clsName, true, ctxLoader));
> +                   cl = AccessController.doPrivileged(
> +                        J2DoPrivHelper.getClassLoaderAction(clsClazz));
> +                }
> +                catch (PrivilegedActionException pae) {
> +                  // we basically do nothing
> +                    cl = null;
> +                }
> +            }
>              if (cl == null) {  // System classloader is returned as null
>                  cl = AccessController.doPrivileged(
>                      J2DoPrivHelper.getSystemClassLoaderAction()); 
> 
> 
> 
> --- On Tue, 1/5/10, Mark Struberg <st...@yahoo.de> wrote:
> 
>> From: Mark Struberg <st...@yahoo.de>
>> Subject: reincarnation of OPENJPA-256?
>> To: dev@openjpa.apache.org
>> Date: Tuesday, January 5, 2010, 9:42 PM
>> Hi!
>>
>> I fear I got hit by OPENJPA-256 [1].
>>
>> I'm still not sure why, but in ObjectValue#newInstance for
>> clsName=org.apache.openjpa.util.CacheMap and type=interface
>> java.util.Map the SystemClassLoader is being used and I get
>> a java.lang.reflect.InvocationTargetException so the
>> workaround mentioned in the old Jira simply does not work.
>>
>> I'm using OpenJPA compiled myself from Revision 896212
>> under jdk-1.6.0_17-b04 x86_64 and running under jetty-6.1.22
>>
>>
>> ...
>> Caused by: java.lang.NoClassDefFoundError:
>> org/apache/openjpa/lib/util/SizedMap
>>     at
>> java.lang.Class.getDeclaredConstructors0(Native Method)
>>     at
>> java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
>>     at
>> java.lang.Class.getConstructor0(Class.java:2699)
>>     at
>> java.lang.Class.newInstance0(Class.java:326)
>>     at
>> java.lang.Class.newInstance(Class.java:308)
>>     at
>> org.apache.openjpa.lib.util.J2DoPrivHelper$11.run(J2DoPrivHelper.java:368)
>>     at
>> java.security.AccessController.doPrivileged(Native Method)
>>     at
>> org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:223)
>>     at
>> org.apache.openjpa.lib.conf.ObjectValue.newInstance(ObjectValue.java:124)
>>     at
>> org.apache.openjpa.conf.QueryCompilationCacheValue.newInstance(QueryCompilationCacheValue.java:60)
>>     at
>> org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
>>     at
>> org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
>>     at
>> org.apache.openjpa.conf.OpenJPAConfigurationImpl.getQueryCompilationCacheInstance(OpenJPAConfigurationImpl.java:1522)
>>     at
>> org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:634)
>>     at
>> org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:617)
>>     at
>> org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:679)
>>     at
>> org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:586)
>>     at
>> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:971)
>>     at
>> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:957)
>>     at
>> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:953)
>>     ... 90 more
>> Caused by: java.lang.ClassNotFoundException:
>> org.apache.openjpa.lib.util.SizedMap
>>     at
>> java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>>     at
>> java.security.AccessController.doPrivileged(Native Method)
>>     at
>> java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>>     at
>> java.lang.ClassLoader.loadClass(ClassLoader.java:303)
>>     at
>> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>>     at
>> java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>>     at
>> java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
>>
>>
>> txs and LieGrue,
>> strub
>>
>>
>> [1] http://issues.apache.org/jira/browse/OPENJPA-256
>>
>>
>>       
>>
> 
> 
>       
> 

Re: reincarnation of OPENJPA-256?

Posted by Mark Struberg <st...@yahoo.de>.
I did a quick hack for now. I don't think it's perfect, but imho better than to add another catch and retry ...

As I said: this works for me, but I have no clue if it is ok.
Should I open a new JIRA or reopen the 256?

txs,
strub

Index: openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java
===================================================================
--- openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java	(Revision 896212)
+++ openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ObjectValue.java	(Arbeitskopie)
@@ -19,6 +19,7 @@
 package org.apache.openjpa.lib.conf;
 
 import java.security.AccessController;
+import java.security.PrivilegedActionException;
 
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.openjpa.lib.util.J2DoPrivHelper;
@@ -115,6 +116,21 @@
         if (cl == null) {
             cl = AccessController.doPrivileged(
                 J2DoPrivHelper.getClassLoaderAction(type));
+            if (cl == null) {
+                ClassLoader ctxLoader = AccessController.doPrivileged(J2DoPrivHelper.getContextClassLoaderAction());
+                // TODO if ctxLoader == null use the normal cl
+
+                try {
+                   @SuppressWarnings("unchecked")
+                   Class clsClazz = AccessController.doPrivileged(
+                        J2DoPrivHelper.getForNameAction(clsName, true, ctxLoader));
+                   cl = AccessController.doPrivileged(
+                        J2DoPrivHelper.getClassLoaderAction(clsClazz));
+                }
+                catch (PrivilegedActionException pae) {
+                  // we basically do nothing
+                    cl = null;
+                }
+            }
             if (cl == null) {  // System classloader is returned as null
                 cl = AccessController.doPrivileged(
                     J2DoPrivHelper.getSystemClassLoaderAction()); 



--- On Tue, 1/5/10, Mark Struberg <st...@yahoo.de> wrote:

> From: Mark Struberg <st...@yahoo.de>
> Subject: reincarnation of OPENJPA-256?
> To: dev@openjpa.apache.org
> Date: Tuesday, January 5, 2010, 9:42 PM
> Hi!
> 
> I fear I got hit by OPENJPA-256 [1].
> 
> I'm still not sure why, but in ObjectValue#newInstance for
> clsName=org.apache.openjpa.util.CacheMap and type=interface
> java.util.Map the SystemClassLoader is being used and I get
> a java.lang.reflect.InvocationTargetException so the
> workaround mentioned in the old Jira simply does not work.
> 
> I'm using OpenJPA compiled myself from Revision 896212
> under jdk-1.6.0_17-b04 x86_64 and running under jetty-6.1.22
> 
> 
> ...
> Caused by: java.lang.NoClassDefFoundError:
> org/apache/openjpa/lib/util/SizedMap
>     at
> java.lang.Class.getDeclaredConstructors0(Native Method)
>     at
> java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
>     at
> java.lang.Class.getConstructor0(Class.java:2699)
>     at
> java.lang.Class.newInstance0(Class.java:326)
>     at
> java.lang.Class.newInstance(Class.java:308)
>     at
> org.apache.openjpa.lib.util.J2DoPrivHelper$11.run(J2DoPrivHelper.java:368)
>     at
> java.security.AccessController.doPrivileged(Native Method)
>     at
> org.apache.openjpa.lib.conf.Configurations.newInstance(Configurations.java:223)
>     at
> org.apache.openjpa.lib.conf.ObjectValue.newInstance(ObjectValue.java:124)
>     at
> org.apache.openjpa.conf.QueryCompilationCacheValue.newInstance(QueryCompilationCacheValue.java:60)
>     at
> org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:103)
>     at
> org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83)
>     at
> org.apache.openjpa.conf.OpenJPAConfigurationImpl.getQueryCompilationCacheInstance(OpenJPAConfigurationImpl.java:1522)
>     at
> org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:634)
>     at
> org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:617)
>     at
> org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:679)
>     at
> org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:586)
>     at
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:971)
>     at
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:957)
>     at
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:953)
>     ... 90 more
> Caused by: java.lang.ClassNotFoundException:
> org.apache.openjpa.lib.util.SizedMap
>     at
> java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>     at
> java.security.AccessController.doPrivileged(Native Method)
>     at
> java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>     at
> java.lang.ClassLoader.loadClass(ClassLoader.java:303)
>     at
> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
>     at
> java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>     at
> java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
> 
> 
> txs and LieGrue,
> strub
> 
> 
> [1] http://issues.apache.org/jira/browse/OPENJPA-256
> 
> 
>       
>