title: java.lang.AbstractMethodError: at UserType.nullSafeSet()
body: <p>I have custom <code>enum</code> values to be persisted in DB. To do that I have implemented <a href="https://github.com/wwadge/ThrowayFinal/blob/master/model/src/main/java/com/go/demo/util/StringValuedEnum.java" rel="nofollow noreferrer">StringValuedEnum</a>, <a href="https://github.com/wwadge/ThrowayFinal/blob/master/model/src/main/java/com/go/demo/util/StringValuedEnumType.java" rel="nofollow noreferrer">StringValuedEnumType</a> and <a href="https://github.com/wwadge/ThrowayFinal/blob/master/model/src/main/java/com/go/demo/util/StringValuedEnumReflect.java" rel="nofollow noreferrer">StingValuedEnumReflect</a> and my <code>enum</code> implements <code>StringValuedEnum</code>.</p>
  
  <p>When I run my code with manually managed JPA everything works just fine and my enum values are persisted in DB. But as soon as I run the application with a container managed JPA (Wildfly 8.2), I get the following error upon flushing the entity manager:</p>
  
  <pre><code>Caused by: java.lang.AbstractMethodError: yyy.xxx.util.StringValuedEnumType.nullSafeSet(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V
  at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:158) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2843) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3121) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3581) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:104) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:463) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:349) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222) [hibernate-core-4.3.7.Final.jar:4.3.7.Final]
  at org.hibernate.jpa.spi.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:1335) [hibernate-entitymanager-4.3.7.Final.jar:4.3.7.Final]
  at org.jboss.as.jpa.container.AbstractEntityManager.flush(AbstractEntityManager.java:457) [wildfly-jpa-8.2.1.Final.jar:8.2.1.Final]
  at zzz.ejb.facades.EntityManagerFacade.createObject(EntityManagerFacade.java:2024) [zzz-ejb.jar:]
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_66]
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_66]
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_66]
  at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_66]
  at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
  at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
  at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) [wildfly-weld-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) [wildfly-weld-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
  at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [wildfly-jpa-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
  at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
  at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
  at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.as.ejb3.component.interceptors.NonPooledEJBComponentInstanceAssociatingInterceptor.processInvocation(NonPooledEJBComponentInstanceAssociatingInterceptor.java:59) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final]
  at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
  at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:251) [wildfly-ejb3-8.2.1.Final.jar:8.2.1.Final] 
  </code></pre>
  
  <p>It looks like the issue is in pooling (there is non-pooled EJB component as it is shown in the stack trace).</p>
  
  <p>The strange is that I cannot debug it to understand the issue: the debugger doesn't stop on any breakpoint put inside the method, nor the <code>System.out.println()</code> works.</p>
  
  <p><strong>Questions</strong>: </p>
  
  <ul>
  <li>What is the difference between manually and container managed JPAs that causes this difference in persisting custom types?</li>
  <li>How to solve it?</li>
  </ul>