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)