I will try to locate the file you mentioned "scan.xml" and have a look. There could be many possibilities. The one that comes to my mind is the two versions of OpenEJB jars. Since I am working with Maven plugin, the plugin references openejb 4.7.1 and the project I have has openejb as a dependency. When we execute the mojo, both jars are added to the classpath. I am not sure if this is the issue, but suspicious to me.
On Tue, Oct 14, 2014 at 7:09 PM, Romain Manni-Bucau <[email protected]> wrote: > 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 >>>>>>>>>>
