tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mansour Al Akeel <mansour.alak...@gmail.com>
Subject Re: Multiple persistence.xml in different jars
Date Tue, 14 Oct 2014 23:49:42 GMT
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
<rmannibucau@gmail.com> wrote:
> 2014-10-15 1:06 GMT+02:00 Mansour Al Akeel <mansour.alakeel@gmail.com>:
>> 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
>> <rmannibucau@gmail.com> 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 <mansour.alakeel@gmail.com>:
>>>> No. I am using openejb embedded 4.6.0
>>>>
>>>>
>>>> On Tue, Oct 14, 2014 at 10:43 AM, Romain Manni-Bucau
>>>> <rmannibucau@gmail.com> 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 <mansour.alakeel@gmail.com>:
>>>>>> 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 users@openejb.apache.org
:
>>>>>>  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
>>>>>> <rmannibucau@gmail.com> 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 <mansour.alakeel@gmail.com>:
>>>>>>>> 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
>>>>>>>> <rmannibucau@gmail.com> 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 <agumbrecht@tomitribe.com>:
>>>>>>>>>> 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 <mansour.alakeel@gmail.com>:
>>>>>>>>>>>>
>>>>>>>>>>>> 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
>>>>>>>>>>

Mime
View raw message