[ https://issues.apache.org/jira/browse/OPENJPA-1454?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12797350#action_12797350 ]
Mark Struberg commented on OPENJPA-1454: ---------------------------------------- @Rick here is an example stacktrace: Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.lib.util.Closeable 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) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 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) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 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 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1302) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.setBrokerFactory(EntityManagerFactoryImpl.java:95) at org.apache.openjpa.persistence.EntityManagerFactoryValue.newFactory(EntityManagerFactoryValue.java:53) at org.apache.openjpa.persistence.JPAFacadeHelper.toEntityManagerFactory(JPAFacadeHelper.java:75) at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:109) at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:151) at org.apache.openjpa.persistence.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:59) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:70) at org.apache.webbeans.resource.spi.se.ResourceServiceImpl.getPersistenceUnit(ResourceServiceImpl.java:111) at org.apache.webbeans.resource.spi.se.ResourceServiceImpl.getPersistenceContext(ResourceServiceImpl.java:125) at org.apache.webbeans.resource.spi.se.ResourceServiceImpl.getResource(ResourceServiceImpl.java:59) at org.apache.webbeans.resource.OpenWebBeansResourcePlugin.injectResources(OpenWebBeansResourcePlugin.java:61) at org.apache.webbeans.component.AbstractInjectionTargetBean.postConstructDefault(AbstractInjectionTargetBean.java:230) at org.apache.webbeans.component.AbstractInjectionTargetBean.postConstruct(AbstractInjectionTargetBean.java:213) at org.apache.webbeans.component.AbstractInjectionTargetBean.afterConstructor(AbstractInjectionTargetBean.java:199) at org.apache.webbeans.component.AbstractInjectionTargetBean.createDefaultInstance(AbstractInjectionTargetBean.java:136) And this is the Instrumentation part. Please note that only openjpa-kernel gets injected into the root classpath as agent-jar, thus the lib.log.Log causes the clash. Exception in thread "Attach Listener" java.lang.NoClassDefFoundError: org/apache/openjpa/lib/log/Log at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.getMethod0(Class.java:2670) at java.lang.Class.getMethod(Class.java:1603) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:294) at sun.instrument.InstrumentationImpl.loadClassAndCallAgentmain(InstrumentationImpl.java:348) Caused by: java.lang.ClassNotFoundException: org.apache.openjpa.lib.log.Log 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) ... 6 more Agent failed to start! txs and LieGrue, strub > InstrumentationFactory crashes the tomcat WebappClassLoader by injecting > org.apache.openjpa classes into the SystemClassLoader > ------------------------------------------------------------------------------------------------------------------------------ > > Key: OPENJPA-1454 > URL: https://issues.apache.org/jira/browse/OPENJPA-1454 > Project: OpenJPA > Issue Type: Bug > Components: UnenhancedClasses > Affects Versions: 2.0.0-M3 > Reporter: Mark Struberg > > The InstrumentationFactory tries to find the jar containing the manifest with > the pre-main and attaches this jar to the VM. > This has the side effect that all classes which get loaded via the > Instrumentation are added to the 'classes' Vector of the SystemClassLoader. > And this causes a problem when running OpenJPA in a WebApplication - because > the SystemClassLoader only contains a few of those class definitions, and > e.g. executing > public void setBrokerFactory(BrokerFactory factory) { > _factory = new DelegatingBrokerFactory(factory, > PersistenceExceptions.TRANSLATOR); > } > crashes the WebApp because org.apache.openjpa.util.Exceptions is available in > the SystemClassLoader but the dependent J2DoPrivHelper is not. > This is even more problematic when using openjpa-lib, openjpa-kernel, etc as > single jars (instead of openjpa-all), because in this case only > openjpa-kernel gets injected into the VMs system classpath - causing the > agent to subsequently crash because all the classes from openjpa-lib > obviously cannot be found. > This might also be an explanation to a few other open JIRAs I've read through > the last few days. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.