Spooky Exceptions (1) – javax.ejb.EJBException: java.lang.NullPointerException


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).

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de

,