Leider sind die Fehlermeldungen im Java Enterprise Umfeld nicht immer sehr aussagekräftig. Ich werde in diesem Blog immer mal wieder seltsame Meldungen und deren Ursachen beschreiben. Die Anwendung, bei deren Entwicklung die Exception aufgetreten ist, basiert auf
- Java 8
- Wildfly 9.x
- Eclipselink
- Postgres 9.x
Folgende Exception wurde bei der Speicherung eines Objekts mit einer kaskadierten Liste von abgeleiteten Objekten geworfen
javax.ejb.EJBException: java.lang.NullPointerException at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187) at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277) at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:344) at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:241) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:66) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356) at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:634) ... Caused by: java.lang.NullPointerException at org.eclipse.persistence.internal.sessions.MergeManager.registerObjectForMergeCloneIntoWorkingCopy(MergeManager.java:1047) at org.eclipse.persistence.internal.sessions.MergeManager.mergeChangesOfCloneIntoWorkingCopy(MergeManager.java:557) at org.eclipse.persistence.internal.sessions.MergeManager.mergeChanges(MergeManager.java:313) at org.eclipse.persistence.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:1645) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:4133) ... 11:27:17,282 ERROR [org.jboss.as.ejb3.invocation] (default task-2) WFLYEJB0034: EJB Invocation failed on component TelematicsDeviceGeoTourFacade for method public de.schoeso.telematicsServer.ejb.entity.telematicsDevice.geo.TelematicsDeviceGeoTour de.schoeso.telematicsServer.ejb. facade.telematicDevice.geo.TelematicsDeviceGeoTourFacade.merge( de.schoeso.telematicsServer.ejb.entity.telematicsDevice.geo.projectxxx.ejb31.entity.system.log.UserLogon) throws de.schoeso.exception.logic.ValidException,de.schoeso.exception.jpa.JPAException: javax.ejb.EJBException: java.lang.NullPointerException at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187) at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277) at org.jboss.as.ejb3.tx.CMTTxInterceptor.requiresNew(CMTTxInterceptor.java:344) at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:241
Ursache
Nach einiger Suche stellte sich heraus, dass vergessen wurde einige der abgeleiteten Entitäten, die in der Liste der gespeicherten Entität enthalten waren, in die persistence.xml einzutragen (Eclipselink erkennt diese leider derzeit nicht automatisch).