У меня есть JPA EntityListener, в котором я делаю то же самое JNDI поиск для «Java: комп/EJBContext» в обоих @PrePersist
и @PreUpdate
методов обратного вызова. Хотя поиск выполняется во время метода обратного вызова @PrePersist
, он продолжает сбой во время метода обратного вызова @PreUpdate
.EJB контекст JNDI сбой поиска в @PreUpdate EntityListener в
Я использую Hibernate 4.2.19.Final и Websphere AS 8.5.5.3 build cf031430.01 (Java EE 6/EJB 3.1/JPA 2.0).
Код довольно прост:
public class AuditedEntityListener {
private static final Logger LOGGER = LoggerFactory.getLogger(AuditedEntityListener.class);
private static final String STANDARD_EJB_CONTEXT_NAME = "java:comp/EJBContext";
SessionContext lookupSessionContext() {
try {
return InitialContext.doLookup(STANDARD_EJB_CONTEXT_NAME);
} catch (NamingException ne) {
LOGGER.error("Lookup failure", ne);
return null;
}
}
@PrePersist
void prePersist(IAuditedEntity entity) {
lookupSessionContext();
}
@PreUpdate
void preUpdate(IAuditedEntity entity) {
lookupSessionContext();
}
}
Вот след:
javax.naming.NameNotFoundException: Имя "Комп/EJBContext" не найден в контексте "Java:". на com.ibm.ws.naming.ipbase.NameSpace.lookupInternal (NameSpace.java:1229) ~ [com.ibm.ws.runtime.jar: na] на com.ibm.ws.naming.ipbase.NameSpace .lookup (NameSpace.java:1142) ~ [com.ibm.ws.runtime.jar: na] в com.ibm.ws.naming.urlbase.UrlContextImpl.lookupExt (UrlContextImpl.java:1436) ~ [com .ibm.ws.runtime.jar: na] at com.ibm.ws.naming.java.javaURLContextImpl.lookupExt (javaURLContextImpl.java:477) ~ [com.ibm.ws.runtime.jar: na] на com.ibm.ws.naming.java.javaURLContextRoot.lookupExt (javaURLContextRoot.java:485) ~ [com.ibm.ws.runtime.jar: na] в com.ibm.ws.naming.java.javaURLContextRoot.lookup (javaURLContextRoot.java:370) ~ [ com.ibm.ws.runtime.jar: na] в org.apache.aries.jndi.DelegateContext.lookup (DelegateContext.java:161) ~ [na: na] в javax.naming.InitialContext.lookup (InitialContext .java: 422) ~ [па: 1.7.0] на javax.naming.InitialContext.doLookup (InitialContext.java:295) ~ [па: 1.7.0] на my.AuditedEntityListener.lookupSessionContext (AuditedEntityListener.java : 29) [/ классы: Na] на my.AuditedEntityListener.getUserName (AuditedEntityListener.java:34) [классы /: на] в my.AuditedEntityListener.preUpdate (AuditedEntityListener.java:74) [классы /: na] at sun.reflect.NativeMethodAccessorImpl.invoke0 (родной Me ThOD) ~ [па: 1.7.0] на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:94) ~ [па: 1.7.0] на sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:55) ~ [na: 1.7.0] на java.lang.reflect.Method.invoke (Method.java:619) ~ [na: 2.6 (04-09-2014)] на org.hibernate.ejb.event .ListenerCallback.invoke (ListenerCallback.java:48) [hibernate-entitymanager-4.2.19.Final.jar: 4.2.19.Final] в org.hibernate.ejb.event.EntityCallbackHandler.callback (EntityCallbackHandler.java:110) [hibernate-entitymanager-4.2.19.Final.jar: 4.2.19.Final] на org.hibernate.ejb.event.EntityCallbackHandler.preUpdate (EntityCallbackHandler.java:95) [hibernate-entitymanager-4.2.19.Final.jar: 4.2.19.Final] в org.hibernate.ejb.event.EJB3FlushEntityEventListener.invokeInterceptor (EJB3FlushEntityEventListener.java:65) [hibernate-entitymanager-4.2.19. Final.jar: 4.2.19.Final] на org.hibernate.event.internal.DefaultFlushEntityEventListener.handleInterception (DefaultFlushEntityEventListener.java:334) [hibernate-core-4.2.19.Final.jar: 4.2.19.Финал] в org.hibernate.event.internal.DefaultFlushEntityEventListener.scheduleUpdate (DefaultFlushEntityEventListener.java:285) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] на org.hibernate.event. internal.DefaultFlushEntityEventListener.onFlushEntity (DefaultFlushEntityEventListener.java:165) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] в org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities (AbstractFlushingEventListener.java: 230) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] в org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions (AbstractFlushingEventListener.java:100) [hibernate-core-4.2. 19.Final.jar: 4.2.19.Final] на org.hibernate.event.interna l.DefaultFlushEventListener.onFlush (DefaultFlushEventListener.java:55) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] на org.hibernate.internal.SessionImpl.flush (SessionImpl.java:1195) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] на org.hibernate.internal.SessionImpl.managedFlush (SessionImpl.java:404) [hibernate-core-4.2.19.Final. jar: 4.2.19.Final] на org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion (SynchronizationCallbackCoordinatorNonTrackingImpl.java:109) [hibernate-core-4.2.19.Final.jar: 4.2.19. Final] в org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion (RegisteredSynchronization.java:53) [hibernate-core-4.2.19.Final.jar: 4.2.19.Final] на com.ibm.tx.jta.impl.RegisteredSyncs.coreDistributeBefore (RegisteredSyncs.java:291) [com.ibm.tx. jta.jar: na] at com.ibm.ws.tx.jta.RegisteredSyncs.distributeBefore (RegisteredSyncs.java:153) [com.ibm.ws.runtime.jar: na] в com.ibm.ws. tx.jta.TransactionImpl.prePrepare (TransactionImpl.java:2382) [com.ibm.ws.runtime.jar: na] в com.ibm.ws.tx.jta.TransactionImpl.stage1CommitProcessing (TransactionImpl.java:586) [com.ibm.ws.runtime.jar: na] at com.ibm.tx.jta.impl.TransactionImpl.processCommit (TransactionImpl.java:1028) [com.ibm.tx.jta.jar: na] на com.ibm.tx.jta.impl.TransactionImpl.commit (Tr ansactionImpl.java:962) [com.ibm.tx.jta.jar: na] at com.ibm.ws.tx.jta.TranManagerImpl.commit (TranManagerImpl.java:439) [com.ibm.ws. runtime.jar: na] at com.ibm.tx.jta.impl.TranManagerSet.commit (TranManagerSet.java:191) [com.ibm.tx.jta.jar: na] at com.ibm.ejs. csi.TranStrategy.commit (TranStrategy.java:949) [com.ibm.ws.runtime.jar: na] at com.ibm.ejs.csi.TranStrategy.postInvoke (TranStrategy.java:262) [com. ibm.ws.runtime.jar: na] на com.ibm.ejs.csi.TransactionControlImpl.postInvoke (TransactionControlImpl.java:567) [com.ibm.ws.runtime.jar: na] на com.ibm. ejs.container.EJSContainer.postInvoke (EJSContainer.java:4491)[com.ibm.ws.runtime.jar: на]
Это ограничение товар или ошибка. Вам нужно будет открыть PMR с IBM. –
Спасибо, Бретт, мы открыли PMR с IBM в соответствии с вашими советами, и это действительно было ошибкой. –
Я помню, как работал над исправлением в IBM, поэтому я рад, что это может быть удовлетворительно разрешено для вас :-). –