Hi are you use javax javaee-api 6 somewhere in your deployment/tomee? This can lead to this error if you dont use org.apache.openejb:javaee-api.
If not a small project to reproduce the issue would help to go further. Romain Manni-Bucau @rmannibucau | Blog | Github | LinkedIn | Tomitriber 2015-11-17 8:39 GMT-08:00 ludo <[email protected]>: > Hello, > > I'm working with CMP ejbs and I have trouble with mappings. > When my java attribute and table column have the same name, all is allright. > But when the names are differents, an alter table is done to add a new > column with the java attribute name. (and, of course, I can't change > database model neither java attributes names) > (migrating our EJB applications from weblogic 8.1 to Tomee 1.7.2) > example: > java attribute: annualSalary <=> table column: annual_salary > > Here my openejb-jar.xml, for information: > > <?xml version="1.0" encoding="UTF-8"?> > <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1" > xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.1" > xmlns:pkgen="http//www.openejb.org/xml/ns/pkgen-2.0" > xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1" > xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1"> > > <cmp-connection-factory> > <resource-link>ejbPool_esd</resource-link> > </cmp-connection-factory> > <enterprise-beans> > <entity> > <ejb-name>CustomerEJB</ejb-name> > <table-name>CUSTOMER</table-name> > <cmp-field-mapping> > <cmp-field-name>annualSalary</cmp-field-name> > <table-column>annual_salary</table-column> > </cmp-field-mapping> > <query> > <query-method> > <method-name>findAll</method-name> > <method-params /> > </query-method> > <ejb-ql>SELECT OBJECT(c) FROM CUSTOMER as > c</ejb-ql> > </query> > </entity> > </enterprise-beans> > </openejb-jar> > > So, I'm trying to add annotations on java attributes: > > @Entity > @Table(name="CUSTOMER") > public class Customer implements ... > .... > @Column(name="annual_salary") > public Double annualSalary; > But, nothing changes. > So, I'm trying to add an orm.xml file like this: > <entity-mappings version="1.0" > xmlns="http://java.sun.com/xml/ns/persistence/orm" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm > http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"> > <entity class="........CustomerBean" name="CustomerEJB" > access="PROPERTY"> > > > <attributes> > <basic name="annualSalary"> > <column name="annual_salary" /> > </basic> > </attributes> > </entity> > </entity-mappings> > > , but I get an exception: > > org.apache.openejb.OpenEJBException: Creating application failed: > K:\apache-tomee-plus-1.7.2\apps\ejb.esd1.0.3: Error building bean > 'Customer1EJB'. Exception: > class java.lang.ClassFormatError: Code attribute in native or abstract > methods in class file .../server/CustomerBean: Code attribut > e in native or abstract methods in class file .../server/CustomerBean > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:970) > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:652) > at > org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:543) > at > org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:439) > at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150) > at org.apache.openejb.OpenEJB.init(OpenEJB.java:298) > at > org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:256) > at > org.apache.tomee.catalina.ServerListener.install(ServerListener.java:168) > at > org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:55) > at > org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) > at > org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) > at > org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110) > at org.apache.catalina.startup.Catalina.load(Catalina.java:638) > at org.apache.catalina.startup.Catalina.load(Catalina.java:663) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280) > at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454) > Caused by: org.apache.openejb.OpenEJBException: Error building bean > 'CustomerEJB'. Exception: class java.lang.ClassFormatError: Code attribute > in native or ab > stract methods in class file .../server/CustomerBean: Code attribute in > native or abstract methods in class file .../server/CustomerBean > at > org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:85) > at > org.apache.openejb.assembler.classic.Assembler.initEjbs(Assembler.java:1207) > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:837) > ... 20 more > Caused by: java.lang.ClassFormatError: Code attribute in native or abstract > methods in class file .../server/CustomerBean > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) > at java.lang.ClassLoader.defineClass(ClassLoader.java:615) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) > at java.net.URLClassLoader.access$000(URLClassLoader.java:58) > at java.net.URLClassLoader$1.run(URLClassLoader.java:197) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:190) > at > org.apache.openejb.util.classloader.URLClassLoaderFirst.loadInternal(URLClassLoaderFirst.java:168) > at > org.apache.openejb.util.classloader.URLClassLoaderFirst.loadClass(URLClassLoaderFirst.java:117) > at java.lang.ClassLoader.loadClass(ClassLoader.java:295) > at java.lang.ClassLoader.loadClass(ClassLoader.java:247) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:249) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.load(EnterpriseBeanBuilder.java:420) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.loadClass(EnterpriseBeanBuilder.java:400) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.build(EnterpriseBeanBuilder.java:81) > at > org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:68) > ... 22 more > Why this error ? and if I change access to use implict access, I get a > NullPointerException: > 1000 cmp WARN [main] openjpa.Enhance - An exception was thrown while > attempting to perform class file transformation on "....ser > ver.CustomerBean":<openjpa-2.4.0-r422266:1674604 nonfatal general error> > org.apache.openjpa.util.GeneralException: An error occurred while enhancing > ...server.CustomerBean. Exception message: null > at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:578) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform0(PCClassFileTransformer.java:157) > at > org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:127) > at > org.apache.openjpa.persistence.PersistenceProviderImpl$ClassTransformerImpl.transform(PersistenceProviderImpl.java:292) > at > org.apache.openejb.persistence.PersistenceUnitInfoImpl$PersistenceClassFileTransformer.transform(PersistenceUnitInfoImpl.java:362) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:169) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) > at java.lang.ClassLoader.defineClass(ClassLoader.java:615) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) > at java.net.URLClassLoader.access$000(URLClassLoader.java:58) > at java.net.URLClassLoader$1.run(URLClassLoader.java:197) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:190) > at > org.apache.openejb.util.classloader.URLClassLoaderFirst.loadInternal(URLClassLoaderFirst.java:168) > at > org.apache.openejb.util.classloader.URLClassLoaderFirst.loadClass(URLClassLoaderFirst.java:117) > at java.lang.ClassLoader.loadClass(ClassLoader.java:295) > at java.lang.ClassLoader.loadClass(ClassLoader.java:247) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Class.java:249) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.load(EnterpriseBeanBuilder.java:420) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.loadClass(EnterpriseBeanBuilder.java:400) > at > org.apache.openejb.assembler.classic.EnterpriseBeanBuilder.build(EnterpriseBeanBuilder.java:81) > at > org.apache.openejb.assembler.classic.EjbJarBuilder.build(EjbJarBuilder.java:68) > at > org.apache.openejb.assembler.classic.Assembler.initEjbs(Assembler.java:1207) > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:837) > at > org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:652) > at > org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:543) > at > org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:439) > at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:150) > at org.apache.openejb.OpenEJB.init(OpenEJB.java:298) > at > org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:256) > at > org.apache.tomee.catalina.ServerListener.install(ServerListener.java:168) > at > org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:55) > at > org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) > at > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) > at > org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) > at > org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110) > at org.apache.catalina.startup.Catalina.load(Catalina.java:638) > at org.apache.catalina.startup.Catalina.load(Catalina.java:663) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280) > at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454) > Caused by: java.lang.NullPointerException > at > org.apache.openjpa.enhance.PCEnhancer.createGetMethod(PCEnhancer.java:4655) > at > org.apache.openjpa.enhance.PCEnhancer.addGetMethod(PCEnhancer.java:3807) > at > org.apache.openjpa.enhance.PCEnhancer.addAccessors(PCEnhancer.java:3704) > at org.apache.openjpa.enhance.PCEnhancer.run(PCEnhancer.java:567) > ... 47 more > > I don't understand why, and nothing in exception points the defect. > Tanks for any help, > Ludo > > > > > -- > View this message in context: > http://tomee-openejb.979440.n4.nabble.com/EJB-2-1-CMP-field-mapping-ejb-attribute-with-different-table-column-name-tp4676819.html > Sent from the TomEE Users mailing list archive at Nabble.com.
