2016-03-30 24 views
1

內上下文JNDI查找失敗我有一個JPA EntityListener中,我做的是同樣的JNDI查找的「java:COMP/EJBContext的」兩個@PrePersist和​​回調方法。雖然在@PrePersist回撥方法中查找成功,但在​​回撥方法期間它仍保持失敗。我正在使用Hibernate 4.2.19.Final和一個Websphere AS 8.5.5.3構建cf031430.01(Java EE 6/EJB 3.1/JPA 2.0)。EJB EntityListener的@PreUpdate

的代碼非常簡單:

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:名稱 「COMP/EJBContext的」 未發現上下文 的 「java」。在 com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1229) 〜[com.ibm.ws.runtime.jar:na] at com.ibm.ws.naming.ipbase.NameSpace .lookup(NameSpace.java:1142) 〜[com.ibm.ws.runtime.jar:na] at 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] at com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) 〜[com.ibm.ws.runtime.jar:na] at com.ibm.ws.naming.java.javaURLContextRoot.lookup (javaURLContextRoot.java:370) 〜[ org.apache.aries.jndi.DelegateContext.lookup(DelegateContext.java:161) 〜[na:na] at javax.naming.InitialContext.lookup(InitialContext的.java:422) 〜[NA:1.7.0]在 javax.naming.InitialContext.doLookup(InitialContext.java:295) 〜[NA:1.7.0]在 my.AuditedEntityListener.lookupSessionContext(AuditedEntityListener.java :29) [類/:NA]在 my.AuditedEntityListener.getUserName(AuditedEntityListener.java:34) [類/:NA]在 my.AuditedEntityListener.preUpdate(AuditedEntityListener.java:74) [類/: na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Me的ThOD)〜[NA:1.7.0]在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:94) 〜[NA:1.7.0]在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55 ) 〜[na:1.7.0] at java.lang.reflect.Method.invoke(Method.java:619) 〜[na:2.6(04-09-2014)] at org.hibernate.ejb.event .ListenerCallback.invoke(ListenerCallback.java:48) [hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:110 ) [hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.ejb.event.EntityCallbackHandler.preUpdate(EntityCallbackHandler.java:95)[hibernate-entitymanager-4.2.19.Final.jar:4.2.19.Final] at 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) [冬眠核-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] at org.hibernate.event。 internal.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:165) [hibernate-core-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.event.internal.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java: 230) [hibernate-core-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:100) [hibernate-core-4.2。 19.Final.jar:4.2.19.Final] at org.hibernate.event.interna l.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55) [hibernate-core-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1195) [hibernate-core-4.2.19.Final.jar:4.2.19.Final] at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404) [hibernate-core-4.2.19.Final。 jar:4.2.19.Final] at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorNonTrackingImpl.beforeCompletion(SynchronizationCallbackCoordinatorNonTrackingImpl.java:109) [hibernate-core-4.2.19.Final.jar:4.2.19。最後]在 org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:53) [hibernate-core-4.2.19.Final.jar:4.2.19.Final] at 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] at com.ibm.ws. tx.jta.TransactionImpl.prePrepare(TransactionImpl.java:2382) [com.ibm.ws.runtime.jar:na] at 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]在 com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:262) [融爲一體。 ibm.ws.runtime.jar:na] at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java:567) [com.ibm.ws.runtime.jar:na] at com.ibm。 ejs.container.EJSContainer.postInvoke(EJSContainer.java:4491) [com.ibm.ws.runtime.jar:na]

+1

這是產品限制或錯誤。您將需要與IBM開放PMR。 –

+1

謝謝佈雷特,我們根據您的建議與IBM開了PMR,確實是一個錯誤。 –

+0

我記得在IBM工作時遇到了問題,因此我很高興能爲您解決令人滿意的問題:-)。 –

回答