2013-07-19 127 views
1

是否有可能中斷掛起的InitialContext.lookup調用?中斷EJB查找

原因:我在Glassfish服務器上部署了一個EJB jar。當我嘗試從客戶端執行遠程EJB查找(通過java web start啓動)時,如果服務器無法訪問(例如,服務器關閉或客戶端未連接到Internet),查找會永久掛起。因此,我需要中斷執行查找的Thread,否則Thread將永遠運行。

我試過設置ORBTCPConnectTimeouts,但它似乎被InitialContext忽略。

編輯

InitialContext ctx = new InitialContext(); 
ctx.lookup("EJBName"); // Here it hangs when server not reachable 

回答

1

根據我的經驗,當JNDI服務不可用,則客戶端立即得到一個例外,我的意思是,你不需要設置超時值來處理這種情況。當服務器處於脫機狀態時,你確定沒有發生異常嗎?可能是你沒有正確處理它。


如果您沒有指定任何JNDI屬性,它將假定客戶端運行在與服務器相同的機器上。

當客戶端處於遠程時,您需要指示一些屬性以允許客戶端連接到JNDI服務器。您需要指出的最直觀的屬性是IP和PORT。否則,它如何才能知道服務器的位置?

這些屬性是主要以兩種不同方式定義的鍵/值對列表:使用jndi.properties文件或直接在客戶端代碼中使用其他簽名:InitialContext(Hashtable環境)。

這些JNDI屬性取決於供應商,這個link提供了一個示例。

您還需要向客戶端的類路徑添加文件gf-client.jar。

您會注意到,當客戶端正確實施時,沒有必要設置超時時間。

+0

我更新了我的問題。沒有異常拋出,只是在查找時掛起。也許這只是Glassfish的查找實現,它會掛起直到JNDI服務可達? – dominicp

+0

使用的JNDI屬性是什麼? –

+0

我沒有指定任何JNDI屬性。我試圖爲'ORBTCPConnectTimeout'指定一個值,但它不起作用 – dominicp