We're migrating an application from JEE7 to JEE8. This application relies on Hibernate-ORM and Hibernate-Envers. On JEE7 it was version 5.2.17, on JEE8 it is 5.4.3 now for both liberaries. We have a custom revision entity which extends the DefaultRevisionEntity by adding userinformations through an implementation of RevisionListener. On JEE7 it works great on OpenLiberty 19.0.0.5, for JEE8 and Hibernate 5.4.3 we're getting errors. On JEE8 and Hibernate 5.4.3 it is now possible to use CDI functionality at revisionlisteners. (Setting the revision date manually with Hibernate Envers). On OpenLiberty the revisionlistener initialization is somehow done, when no bean manager is ready to use, like this stack trace is showing it:
Caused by: java.lang.IllegalStateException: org.hibernate.resource.beans.container.internal.NotYetReadyException: CDI BeanManager not (yet) ready to use
[INFO] at org.hibernate.resource.beans.container.internal.JpaCompliantLifecycleStrategy$BeanImpl.initialize(JpaCompliantLifecycleStrategy.java:112)
[INFO] at org.hibernate.resource.beans.container.internal.CdiBeanContainerExtendedAccessImpl$BeanImpl.initialize(CdiBeanContainerExtendedAccessImpl.java:113)
[INFO] at org.hibernate.resource.beans.container.internal.CdiBeanContainerExtendedAccessImpl$BeanImpl.getBeanInstance(CdiBeanContainerExtendedAccessImpl.java:119)
[INFO] at org.hibernate.resource.beans.internal.ManagedBeanRegistryImpl$ContainedBeanManagedBeanAdapter.getBeanInstance(ManagedBeanRegistryImpl.java:139)
[INFO] at org.hibernate.envers.internal.revisioninfo.DefaultRevisionInfoGenerator.generate(DefaultRevisionInfoGenerator.java:77)
[INFO] at org.hibernate.envers.internal.synchronization.AuditProcess.getCurrentRevisionData(AuditProcess.java:133)
[INFO] at org.hibernate.envers.internal.synchronization.AuditProcess.executeInSession(AuditProcess.java:115)
[INFO] at org.hibernate.envers.internal.synchronization.AuditProcess.doBeforeTransactionCompletion(AuditProcess.java:174)
[INFO] at org.hibernate.envers.internal.synchronization.AuditProcessManager$1.doBeforeTransactionCompletion(AuditProcessManager.java:47)
[INFO] at org.hibernate.engine.spi.ActionQueue$BeforeTransactionCompletionProcessQueue.beforeTransactionCompletion(ActionQueue.java:954)
[INFO] ... 20 more
[INFO] Caused by: org.hibernate.resource.beans.container.internal.NotYetReadyException: CDI BeanManager not (yet) ready to use
[INFO] ... 31 more
[INFO] Caused by: java.lang.NullPointerException
[INFO] at org.hibernate.resource.beans.container.internal.JpaCompliantLifecycleStrategy$BeanImpl.initialize(JpaCompliantLifecycleStrategy.java:109)
[INFO] ... 29 more
I found this https://discourse.hibernate.org/t/beanmanager-createinstance-being-called-before-afterbeandiscovery-event-fired/2239 conversation which might point in the same direction.
Actually this are our features set in server.xml.
<featureManager>
<feature>jaxrs-2.1</feature>
<feature>jsonp-1.1</feature>
<feature>cdi-2.0</feature>
<feature>jpaContainer-2.2</feature>
<feature>ejbLite-3.2</feature>
<feature>mpMetrics-1.1</feature>
<feature>mpHealth-1.0</feature>
<feature>mpConfig-1.3</feature>
<feature>servlet-4.0</feature>
</featureManager>
If you need some more information, i will provide them. Is this a known problem ? I would appreciate if you could provide a hint or solution for this problem.
Thank you, very much.