2014-10-15 1:06 GMT+02:00 Mansour Al Akeel <[email protected]>: > upgrading to 4.7.1 resolved the problem, but now back again to a > problem I saw earlier. > > Oct 14, 2014 6:59:22 PM org.apache.openejb.OpenEJB$Instance <init> > SEVERE: OpenEJB has encountered a fatal error and cannot be started: > The Assembler encountered an unexpected error while attempting to > build the container system. > java.lang.NoClassDefFoundError: > org/perfectjpattern/jee/integration/dao/AbstractJpaManagedBaseDao > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:760) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:455) > at java.net.URLClassLoader.access$100(URLClassLoader.java:73) > at java.net.URLClassLoader$1.run(URLClassLoader.java:367) > at java.net.URLClassLoader$1.run(URLClassLoader.java:361) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:360) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at java.lang.ClassLoader.loadClass(ClassLoader.java:411) > at > org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:205) > at > org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:79) > at > org.apache.xbean.finder.archive.JarArchive.loadClass(JarArchive.java:84) > at > org.apache.xbean.finder.archive.CompositeArchive.loadClass(CompositeArchive.java:58) > at > org.apache.openejb.config.FinderFactory$DebugArchive.loadClass(FinderFactory.java:282) > at > org.apache.xbean.finder.AnnotationFinder$ClassInfo.get(AnnotationFinder.java:1453) > at > org.apache.xbean.finder.AnnotationFinder.findMetaAnnotatedClasses(AnnotationFinder.java:563) > at > org.apache.xbean.finder.AnnotationFinder.findMetaAnnotatedClasses(AnnotationFinder.java:512) > at > org.apache.openejb.config.AnnotationDeployer$DiscoverAnnotatedBeans.deploy(AnnotationDeployer.java:1406) > at > org.apache.openejb.config.AnnotationDeployer$DiscoverAnnotatedBeans.deploy(AnnotationDeployer.java:442) > at > org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:356) > > > The class IS in the class path, and available to the current project > as maven dependency. I am not sure why I am getting this error, and > has been stuck with it. > A work around could be is to disable scanning for EJBs and allow only > one EJB to be discovered. > Is there a way to do this ? >
scan.xml would do it but weird the issue pops up like it, is it possible openejb is in a lower classloader or ParentClassLoaderFinder.Helper.get() is wrong? > > On Tue, Oct 14, 2014 at 11:13 AM, Romain Manni-Bucau > <[email protected]> wrote: >> Maybe try a more recent version cause we changed several things and >> some of them were impacting in maven environment. >> >> >> Romain Manni-Bucau >> @rmannibucau >> http://www.tomitribe.com >> http://rmannibucau.wordpress.com >> https://github.com/rmannibucau >> >> >> 2014-10-14 17:06 GMT+02:00 Mansour Al Akeel <[email protected]>: >>> No. I am using openejb embedded 4.6.0 >>> >>> >>> On Tue, Oct 14, 2014 at 10:43 AM, Romain Manni-Bucau >>> <[email protected]> wrote: >>>> asm4? you are not on tomee 1.7? >>>> >>>> >>>> Romain Manni-Bucau >>>> @rmannibucau >>>> http://www.tomitribe.com >>>> http://rmannibucau.wordpress.com >>>> https://github.com/rmannibucau >>>> >>>> >>>> 2014-10-14 16:40 GMT+02:00 Mansour Al Akeel <[email protected]>: >>>>> Thank you Romain. >>>>> The target/classes was in the class path, but the size of the url array >>>>> was 0. >>>>> >>>>> This was helpful. I am getting another error, that I was not able to >>>>> understand. >>>>> >>>>> SEVERE: FATAL ERROR: Unknown error in Assembler. Please send the >>>>> following stack trace and this message to [email protected] : >>>>> java.lang.IllegalArgumentException >>>>> at org.apache.xbean.asm4.ClassReader.<init>(Unknown Source) >>>>> at org.apache.xbean.asm4.ClassReader.<init>(Unknown Source) >>>>> at org.apache.xbean.asm4.ClassReader.<init>(Unknown Source) >>>>> at >>>>> org.apache.openejb.util.AnnotationFinder.readClassDef(AnnotationFinder.java:297) >>>>> at >>>>> org.apache.openejb.util.AnnotationFinder.find(AnnotationFinder.java:163) >>>>> at >>>>> org.apache.openejb.config.DeploymentLoader.checkAnnotations(DeploymentLoader.java:1871) >>>>> at >>>>> org.apache.openejb.config.DeploymentLoader.discoverModuleType(DeploymentLoader.java:1782) >>>>> at >>>>> org.apache.openejb.config.DeploymentsResolver.processUrls(DeploymentsResolver.java:388) >>>>> at >>>>> org.apache.openejb.config.DeploymentsResolver.loadFromClasspath(DeploymentsResolver.java:301) >>>>> at >>>>> org.apache.openejb.config.ConfigurationFactory.getModulesFromClassPath(ConfigurationFactory.java:647) >>>>> at >>>>> org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:524) >>>>> at >>>>> org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:575) >>>>> at >>>>> org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:429) >>>>> at >>>>> org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:408) >>>>> at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148) >>>>> at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65) >>>>> at org.apache.openejb.OpenEJB.init(OpenEJB.java:296) >>>>> at org.apache.openejb.OpenEJB.init(OpenEJB.java:276) >>>>> >>>>> >>>>> I will continue digging. >>>>> >>>>> Thank you a lot. >>>>> >>>>> >>>>> On Tue, Oct 14, 2014 at 2:20 AM, Romain Manni-Bucau >>>>> <[email protected]> wrote: >>>>>> Hi >>>>>> >>>>>> we have a mojo like it >>>>>> http://svn.apache.org/repos/asf/tomee/tomee/trunk/maven/openejb-embedded-maven-plugin/ >>>>>> >>>>>> I think you miss target/classes in your loader >>>>>> >>>>>> >>>>>> Romain Manni-Bucau >>>>>> @rmannibucau >>>>>> http://www.tomitribe.com >>>>>> http://rmannibucau.wordpress.com >>>>>> https://github.com/rmannibucau >>>>>> >>>>>> >>>>>> 2014-10-14 6:37 GMT+02:00 Mansour Al Akeel <[email protected]>: >>>>>>> Romain, >>>>>>> It was my fault. I was loading the persistence context using openjpa. >>>>>>> However, switched to OpenEJB to allow scanning for the persistence.xml >>>>>>> in other jars. The problem is the current jar has some EJBs. I am >>>>>>> loading them from maven mojo. In a way, it's similar to unit testing. >>>>>>> >>>>>>> protected void setupClassPath() throws MalformedURLException, >>>>>>> DependencyResolutionRequiredException >>>>>>> { >>>>>>> >>>>>>> synchronized (this) >>>>>>> { >>>>>>> if (classLoader != null) >>>>>>> return; >>>>>>> } >>>>>>> synchronized (this) >>>>>>> { >>>>>>> List<URL> urls = new ArrayList<URL>(); >>>>>>> >>>>>>> List<String> paths = new LinkedList<String>(); >>>>>>> >>>>>>> List<String> compilePath = >>>>>>> mavenProject.getCompileClasspathElements(); >>>>>>> >>>>>>> List<String> testPath = mavenProject.getTestClasspathElements(); >>>>>>> >>>>>>> List<String> runtimePath = >>>>>>> mavenProject.getRuntimeClasspathElements(); >>>>>>> >>>>>>> List<String> systemPath = >>>>>>> mavenProject.getSystemClasspathElements(); >>>>>>> >>>>>>> List<Dependency> dependencies = >>>>>>> mavenProject.getCompileDependencies(); >>>>>>> >>>>>>> this.merge(paths, compilePath); >>>>>>> this.merge(paths, testPath); >>>>>>> this.merge(paths, runtimePath); >>>>>>> this.merge(paths, systemPath); >>>>>>> >>>>>>> getLog().info("Scanning ... "); >>>>>>> >>>>>>> for (Object object : paths) >>>>>>> { >>>>>>> String path = (String) object; >>>>>>> >>>>>>> getLog().info("Adding " + path + " to classpath"); >>>>>>> >>>>>>> urls.add(new File(path).toURL()); >>>>>>> } >>>>>>> >>>>>>> ClassLoader parent = >>>>>>> Thread.currentThread().getContextClassLoader(); >>>>>>> >>>>>>> parent = this.getClass().getClassLoader(); >>>>>>> >>>>>>> ClassLoader contextClassLoader = >>>>>>> URLClassLoader.newInstance(urls.toArray(new URL[0]), parent); >>>>>>> >>>>>>> >>>>>>> Thread.currentThread().setContextClassLoader(contextClassLoader); >>>>>>> >>>>>>> return; >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> ..... >>>>>>> >>>>>>> properties.put(Context.INITIAL_CONTEXT_FACTORY, >>>>>>> "org.apache.openejb.client.LocalInitialContextFactory"); >>>>>>> >>>>>>> // properties.put(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, >>>>>>> "true"); >>>>>>> properties.put("openejb.validation.output.level", "VERBOSE"); >>>>>>> >>>>>>> properties.put("jdbc/dataSource", "new://Resource?type=DataSource"); >>>>>>> properties.put("jdbc/dataSource.JdbcDriver", this.driver); >>>>>>> properties.put("jdbc/dataSource.JdbcUrl", this.url); >>>>>>> properties.put("jdbc/dataSource.UserName", this.username); >>>>>>> properties.put("jdbc/dataSource.Password", this.password); >>>>>>> >>>>>>> properties.setProperty("javax.persistence.transactionType", >>>>>>> "RESOURCE_LOCAL"); >>>>>>> >>>>>>> Context ctx; >>>>>>> try >>>>>>> { >>>>>>> >>>>>>> ctx = new InitialContext(properties); >>>>>>> >>>>>>> >>>>>>> The problem I am facing now, is that not all the dependencies are >>>>>>> available for OpenEJB: >>>>>>> >>>>>>> Oct 13, 2014 10:15:36 PM org.apache.openejb.OpenEJB$Instance <init> >>>>>>> SEVERE: OpenEJB has encountered a fatal error and cannot be started: >>>>>>> The Assembler encountered an unexpected error while attempting to >>>>>>> build the container system. >>>>>>> java.lang.NoClassDefFoundError: >>>>>>> org/perfectjpattern/jee/integration/dao/AbstractJpaManagedBaseDao >>>>>>> at java.lang.ClassLoader.defineClass1(Native Method) >>>>>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:800) >>>>>>> at >>>>>>> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) >>>>>>> at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) >>>>>>> at java.net.URLClassLoader.access$100(URLClassLoader.java:71) >>>>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:361) >>>>>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:355) >>>>>>> at java.security.AccessController.doPrivileged(Native Method) >>>>>>> at java.net.URLClassLoader.findClass(URLClassLoader.java:354) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:425) >>>>>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:412) >>>>>>> at >>>>>>> org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:180) >>>>>>> at >>>>>>> org.apache.openejb.core.TempClassLoader.loadClass(TempClassLoader.java:74) >>>>>>> at >>>>>>> org.apache.xbean.finder.archive.JarArchive.loadClass(JarArchive.java:84) >>>>>>> at >>>>>>> org.apache.xbean.finder.archive.CompositeArchive.loadClass(CompositeArchive.java:58) >>>>>>> at >>>>>>> org.apache.openejb.config.FinderFactory$DebugArchive.loadClass(FinderFactory.java:139) >>>>>>> at >>>>>>> org.apache.xbean.finder.AnnotationFinder$ClassInfo.get(AnnotationFinder.java:1425) >>>>>>> at >>>>>>> org.apache.xbean.finder.AnnotationFinder.findMetaAnnotatedClasses(AnnotationFinder.java:540) >>>>>>> at >>>>>>> org.apache.xbean.finder.AnnotationFinder.findMetaAnnotatedClasses(AnnotationFinder.java:489) >>>>>>> at >>>>>>> org.apache.openejb.config.FinderFactory$ModuleLimitedFinder.findMetaAnnotatedClasses(FinderFactory.java:291) >>>>>>> at >>>>>>> org.apache.openejb.config.AnnotationDeployer$DiscoverAnnotatedBeans.deploy(AnnotationDeployer.java:1391) >>>>>>> at >>>>>>> org.apache.openejb.config.AnnotationDeployer$DiscoverAnnotatedBeans.deploy(AnnotationDeployer.java:436) >>>>>>> at >>>>>>> org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:351) >>>>>>> at >>>>>>> org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:396) >>>>>>> at >>>>>>> org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:938) >>>>>>> at >>>>>>> org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:799) >>>>>>> at >>>>>>> org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:531) >>>>>>> at >>>>>>> org.apache.openejb.config.ConfigurationFactory.getOpenEjbConfiguration(ConfigurationFactory.java:575) >>>>>>> at >>>>>>> org.apache.openejb.assembler.classic.Assembler.getOpenEjbConfiguration(Assembler.java:429) >>>>>>> at >>>>>>> org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:408) >>>>>>> at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:148) >>>>>>> at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:65) >>>>>>> at org.apache.openejb.OpenEJB.init(OpenEJB.java:296) >>>>>>> at org.apache.openejb.OpenEJB.init(OpenEJB.java:276) >>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>> at >>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >>>>>>> at >>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>>>>> at java.lang.reflect.Method.invoke(Method.java:606) >>>>>>> at >>>>>>> org.apache.openejb.loader.OpenEJBInstance.init(OpenEJBInstance.java:36) >>>>>>> at >>>>>>> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:96) >>>>>>> at >>>>>>> org.apache.openejb.core.LocalInitialContextFactory.init(LocalInitialContextFactory.java:60) >>>>>>> at >>>>>>> org.apache.openejb.core.LocalInitialContextFactory.getInitialContext(LocalInitialContextFactory.java:44) >>>>>>> >>>>>>> >>>>>>> I am not sure if adding dependencies to OpenEJB class works using >>>>>>> >>>>>>> Thread.currentThread().setContextClassLoader(contextClassLoader); >>>>>>> >>>>>>> Thank you. >>>>>>> >>>>>>> >>>>>>> On Mon, Oct 13, 2014 at 7:10 AM, Romain Manni-Bucau >>>>>>> <[email protected]> wrote: >>>>>>>> not for war and classpath apps (only for ears) >>>>>>>> >>>>>>>> >>>>>>>> Romain Manni-Bucau >>>>>>>> @rmannibucau >>>>>>>> http://www.tomitribe.com >>>>>>>> http://rmannibucau.wordpress.com >>>>>>>> https://github.com/rmannibucau >>>>>>>> >>>>>>>> >>>>>>>> 2014-10-13 13:07 GMT+02:00 Andy Gumbrecht <[email protected]>: >>>>>>>>> Could this be related the '*openejb.finder.module-scoped=true*' >>>>>>>>> property? >>>>>>>>> >>>>>>>>> Andy. >>>>>>>>> >>>>>>>>> >>>>>>>>> On 13/10/2014 08:39, Romain Manni-Bucau wrote: >>>>>>>>>> >>>>>>>>>> Hi >>>>>>>>>> >>>>>>>>>> it should do out of the box,can you share more details/code? >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Romain Manni-Bucau >>>>>>>>>> @rmannibucau >>>>>>>>>> http://www.tomitribe.com >>>>>>>>>> http://rmannibucau.wordpress.com >>>>>>>>>> https://github.com/rmannibucau >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> 2014-10-13 7:40 GMT+02:00 Mansour Al Akeel >>>>>>>>>> <[email protected]>: >>>>>>>>>>> >>>>>>>>>>> I am writing unit tests. The unit test include multiple jars, each >>>>>>>>>>> of >>>>>>>>>>> them has JPA entities and persistence.xml file. Each file has it's >>>>>>>>>>> own >>>>>>>>>>> Persistence Context. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> The JPA entities in jar B references some entities in jar file A. I >>>>>>>>>>> need to load both persistence.xml. >>>>>>>>>>> >>>>>>>>>>> Is there a way to instruct openejb container to scan for other >>>>>>>>>>> persistence.xml in different jars ?? >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Andy Gumbrecht >>>>>>>>> https://twitter.com/AndyGeeDe >>>>>>>>> http://www.tomitribe.com >>>>>>>>>
