Sokolov Alexandr created OPENJPA-2526:
-----------------------------------------

             Summary: Mapping of entity with Enum by code field 
                 Key: OPENJPA-2526
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2526
             Project: OpenJPA
          Issue Type: Bug
            Reporter: Sokolov Alexandr


The 
[http://openejb.apache.org/examples-trunk/injection-of-entitymanager/README.html]
 example is used to create test.
Entity is persisted. Everything works fine until the enum mapping is not added. 
Here is an example of what is going to be used: 
[http://stackoverflow.com/questions/2751733/map-enum-in-jpa-with-fixed-values#answer-2751896]

Here is example of code for JPA entity:
{code}
    @Id
    private long id;
    @Column(name = "enum_code")
    private int codeEnum;
        public TestEnum getTestEnumFromCode() {
        return TestEnum.fromCode(this.codeEnum);
    }

    public void setTestEnumByCode(TestEnum testEnum) {
        if( testEnum != null)
        {
            this.codeEnum = testEnum.getCode();
        }
    }
 {code}
Example of TestEnum 
{code}
    public enum TestEnum {
        ONE(1), TWO(5), THREE(10);

        private final int code;
        private static final Map<Integer, TestEnum> values = new HashMap<>();

        static { // Initialize map from constant name to enum constant
            for (TestEnum value : values())
                values.put(value.getCode(), value);
        }

        private TestEnum(int code) {
            this.code = code;
        }

        public static TestEnum fromCode(int code) {
            return values.get(code);
        }

        public int getCode() {
            return code;
        }
    }
{code}

The following method throws exception:
org.apache.openjpa.enhance.ClassRedefiner.redefineClasses, line 73

Exception is: java.lang.VerifyError. Full stacktrace:
{quot}
javax.ejb.EJBException: The bean encountered a non-application exception; 
nested exception is: 
        javax.ejb.EJBException: Cannot obtain a free instance.; nested 
exception is: 
        <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: null
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:408)
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:312)
        at com.sun.proxy.$Proxy49.call(Unknown Source)
        at 
com.savdev.dssl.repository.jpa.AllFieldsEntityRepositoryJpaTest.testWithTransaction(AllFieldsEntityRepositoryJpaTest.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        at 
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
        at 
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77)
        at 
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
        at 
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: javax.ejb.EJBException: Cannot obtain a free instance.; nested 
exception is: 
        <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: null
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:408)
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:312)
        at com.sun.proxy.$Proxy50.create(Unknown Source)
        at 
com.savdev.dssl.repository.jpa.AllFieldsEntityRepositoryJpaTest.doWork(AllFieldsEntityRepositoryJpaTest.java:106)
        at 
com.savdev.dssl.repository.jpa.AllFieldsEntityRepositoryJpaTest$1.call(AllFieldsEntityRepositoryJpaTest.java:65)
        at 
com.savdev.dssl.repository.jpa.AllFieldsEntityRepositoryJpaTest$TransactionBean.call(AllFieldsEntityRepositoryJpaTest.java:128)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
        at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
        at 
org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
        at 
org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
        at 
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
        at 
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
        at 
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
        at 
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308)
        ... 30 more
Caused by: <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 fatal general error> 
org.apache.openjpa.persistence.PersistenceException: null
        at 
org.apache.openjpa.enhance.ClassRedefiner.redefineClasses(ClassRedefiner.java:96)
        at 
org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:176)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:311)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:235)
        at 
org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:211)
        at 
org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:155)
        at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:226)
        at 
org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:59)
        at 
org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createEntityManager(ReloadableEntityManagerFactory.java:160)
        at 
org.apache.openejb.core.stateful.StatefulContainer.createEntityManagers(StatefulContainer.java:904)
        at 
org.apache.openejb.core.stateful.StatefulContainer.createEJBObject(StatefulContainer.java:399)
        at 
org.apache.openejb.core.stateful.StatefulContainer.invoke(StatefulContainer.java:372)
        at 
org.apache.openejb.core.ivm.EjbHomeProxyHandler.create(EjbHomeProxyHandler.java:384)
        at 
org.apache.openejb.core.ivm.EjbHomeProxyHandler._invoke(EjbHomeProxyHandler.java:199)
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308)
        at com.sun.proxy.$Proxy41.create(Unknown Source)
        at org.apache.openejb.cdi.CdiEjbBean.createEjb(CdiEjbBean.java:200)
        at 
org.apache.openejb.cdi.CdiPlugin.getSessionBeanProxy(CdiPlugin.java:211)
        at 
org.apache.webbeans.container.BeanManagerImpl.getEjbOrJmsProxyReference(BeanManagerImpl.java:805)
        at 
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:741)
        at 
org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:628)
        at 
org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:95)
        at 
org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
        at 
org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:208)
        at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:194)
        at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:184)
        at 
org.apache.openejb.cdi.CdiEjbBean$EjbInjectionTargetImpl.inject(CdiEjbBean.java:388)
        at org.apache.openejb.BeanContext.inject(BeanContext.java:1662)
        at org.apache.openejb.BeanContext.newInstance(BeanContext.java:1491)
        at 
org.apache.openejb.core.stateless.StatelessInstanceManager.createInstance(StatelessInstanceManager.java:207)
        at 
org.apache.openejb.core.stateless.StatelessInstanceManager.getInstance(StatelessInstanceManager.java:199)
        at 
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:186)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
        at 
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
        at 
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:308)
        ... 55 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.apache.openjpa.enhance.ClassRedefiner.redefineClasses(ClassRedefiner.java:85)
        ... 90 more
Caused by: java.lang.VerifyError
        at sun.instrument.InstrumentationImpl.retransformClasses0(Native Method)
        at 
sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144)
        ... 95 more

{quot}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to