2015-12-11 20 views
0

我有一個環境,其中一個EJB從服務器啓動時開始,代碼在內部調用另一個無狀態bean,它通過Executor Service在內部啓動一個線程。在這個線程啓動通過Executor服務,每當我做一個jndi查找(java:全球/測試/ NetworkConnectionChecker!com.testing.common.NetworkConnectionChecker)裏面的運行方法,我得到javax.naming.NameNotFoundException,但如果我把一個thread.sleep在這個線程的run方法中大約60秒,jndi查找會給我這個對象,並且不會引發異常。 另一個有趣的一點是,當我在開始的Thread的構造函數中執行查找時,我立即通過jndi查找來獲取對象,而不需要任何Thread.sleep 我試圖通過jndi獲取的EJB查找被標註爲@Singleton和@Startup。 任何人都可以建議我,我做錯了什麼,我也可以看到服務器啓動時生成的日誌提及jndi綁定。該日誌如下JNDI名稱解析在新線程中失敗tomee

(name=global/testing/NetworkConnectionChecker!com.testing.common.NetworkConnectionChecker) 

我看到下列異常時,JNDI查找失敗

javax.naming.NameNotFoundException: Name [global/testing/NetworkConnectionChecker!com.testing.common.NetworkConnectionChecker] is not bound in this Context. Unable to find [global]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:819) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:167) 
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:156) 
at javax.naming.InitialContext.lookup(InitialContext.java:417) 
at com.testing.main.AbstractServiceFactory.getNetworkConnectionChecker(AbstractServiceFactory.java:85) 

我使用的Java 8和tomee版本1.7

請讓我知道,如果你們中的任何要求更多的信息。我花了整整一天的時間試圖找出答案。

回答