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 >>>
