Hi, I spent the entire day to figure out what's going on and I'm stuck now and desparately need help. I was debugging Geronimo to see what's in classloaders, but didn't find much that would help me sorting it out.
I'm trying to deploy jboss seam 2.0.0.ga's jee5 sample - booking - onto geronimo 2.1-snapshot (built from tomorrow's trunk) and it only succeeds if persistence.xml's damaged and openjpa enhancer doesn't load any classes, and if it succeeded would result in 11:31:22,546 WARN [BasicLifecycleMonitor] Exception occured while notifying listener java.lang.LinkageError: duplicate class definition: org/jboss/seam/bpm/package-info at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at org.apache.geronimo.kernel.classloader.JarFileClassLoader.access$200(JarFileClassLoader.java:52) at org.apache.geronimo.kernel.classloader.JarFileClassLoader$6.run(JarFileClassLoader.java:308) at java.security.AccessController.doPrivileged(Native Method) at org.apache.geronimo.kernel.classloader.JarFileClassLoader.findClass(JarFileClassLoader.java:260) at org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClassInternal(MultiParentClassLoader.java:470) at org.apache.geronimo.kernel.config.MultiParentClassLoader.checkParents(MultiParentClassLoader.java:498) at org.apache.geronimo.kernel.config.MultiParentClassLoader.loadOptimizedClass(MultiParentClassLoader.java:407) at org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:278) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.jboss.seam.deployment.NamespaceScanner.getPackage(NamespaceScanner.java:75) at org.jboss.seam.deployment.NamespaceScanner.handleItem(NamespaceScanner.java:56) So, here's what I could figure out. The application consists of 2 modules: an ejb jar (with jpa entities) and a war. This is the plan I'm using to deploy the app. <?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"> <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2"> <moduleId> <groupId>org.jboss.seam.examples.jee5</groupId> <artifactId>jboss-seam-jee5</artifactId> <version>2.0.0.GA</version> <type>ear</type> </moduleId> <dependencies> <dependency> <groupId>org.apache.geronimo.hibernate.transaction</groupId> <artifactId>geronimo-hibernate-transaction-manager-lookup</artifactId> <type>jar</type> </dependency> </dependencies> <non-overridable-classes> <filter>org.jboss.seam</filter> </non-overridable-classes> </environment> <module> <web>jboss-seam-jee5.war</web> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1"> <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2"> <moduleId> <groupId>org.jboss.seam.examples.jee5</groupId> <artifactId>jboss-seam-jee5</artifactId> <version>2.0.0.GA</version> <type>war</type> </moduleId> </environment> <context-root>/seam-jee5</context-root> </web-app> </module> <module> <web>jboss-seam-jee5.jar</web> <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"> <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2"> <moduleId> <groupId>org.jboss.seam.examples.jee5</groupId> <artifactId>jboss-seam-jee5</artifactId> <version>2.0.0.GA</version> <type>jar</type> </moduleId> </environment> </openejb-jar> </module> <ext-module> <connector>seam-jee5-dbpool</connector> <external-path xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2"> <dep:groupId>org.tranql</dep:groupId> <dep:artifactId>tranql-connector-derby-embed-xa</dep:artifactId> <dep:type>rar</dep:type> </external-path> <connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"> <environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2"> <moduleId> <groupId>org.jboss.seam.examples.jee5</groupId> <artifactId>booking-dbpool</artifactId> <version>2.0.0.GA</version> <type>rar</type> </moduleId> <dependencies> <dependency> <groupId>org.apache.geronimo.configs</groupId> <artifactId>system-database</artifactId> <type>car</type> </dependency> </dependencies> </environment> <resourceadapter> <outbound-resourceadapter> <connection-definition> <connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface> <connectiondefinition-instance> <name>jdbc/__default</name> <config-property-setting name="DatabaseName">SystemDatabase</config-property-setting> <connectionmanager> <xa-transaction> <transaction-caching /> </xa-transaction> <single-pool> <max-size>100</max-size> <blocking-timeout-milliseconds>5000</blocking-timeout-milliseconds> <select-one-assume-match /> </single-pool> </connectionmanager> </connectiondefinition-instance> </connection-definition> </outbound-resourceadapter> </resourceadapter> </connector> </ext-module> </application> No matter what's set as a provider, openjpa is executed to enhance entities (as the default and only working jpa provider in JTA mode). The mentioned error message is when openjpa enhances classes on the fly (at runtime) and it appears that loads some classes that are being looked up afterwards from webapp classloader and results in the error. I added <class> elements to persistence.xml just to avoid it, but it seems that openejb (yeah, it seems that it's openejb with openjpa embedded) loads ear and loads classes (persistence.xml is in the ejb-jar) at runtime. This is the damaged persistence.xml that when used lets me to see the welcome page of the app, but since PU doesn't exist it blows up at registration page (the error is with </.jta-data-source>). <?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="bookingDatabase"> <jta-data-source>jdbc/__default</.jta-data-source> <class>org.jboss.seam.example.booking.Booking</class> <class>org.jboss.seam.example.booking.Hotel</class> <class>org.jboss.seam.example.booking.User</class> <properties> <!-- The following two properties are for Glassfish --> <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup" /> <!-- The following three properties are for Geronimo 2 --> <property name="hibernate.transaction.manager_lookup_class" value="org.apache.geronimo.hibernate.transaction.GeronimoTransactionManagerLookup" /> <!-- The following three properties are OC4J --> <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> <property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.OrionTransactionManagerLookup"/> --> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.transaction.flush_before_completion" value="true" /> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" /> </properties> </persistence-unit> </persistence> So, even though PU's not created the webapp's deployed (almost) fine - I can open /seam-jee5, but when I register a new user it blows up with NPE (due to PU not being available). [EMAIL PROTECTED] /cygdrive/c/geronimo $ ./bin/deploy.sh -u system -p manager deploy jboss-seam-jee5.ear jboss-seam-jee5-geronimo-plan.xml Using GERONIMO_BASE: c:\geronimo Using GERONIMO_HOME: c:\geronimo Using GERONIMO_TMPDIR: c:\geronimo\var\temp Using JRE_HOME: c:\apps\java5\jre Deployed org.jboss.seam.examples.jee5/jboss-seam-jee5/2.0.0.GA/ear `-> jboss-seam-jee5.war @ /seam-jee5 `-> jboss-seam.jar `-> jboss-seam-jee5.jar `-> seam-jee5-dbpool I think I could work it around if I could turn off openjpa to not perform the runtime enhancement on all classes, but the entities (via <class> element in persistence.xml). I tried non-overridable-classes and hidden-classes on ear, jar and war level, but unless I did it wrong it didn't help. How can I fix it? Any hints greatly appreciated. Jacek -- Jacek Laskowski http://www.JacekLaskowski.pl