我在JBoss 6.0 AS的本地主機上部署了一個應用程序。這個應用程序有一個名爲ExampleEJB的遠程EJB bean。現在我試圖編寫一個消耗ExampleEJB的簡單客戶端應用程序。此客戶端應用程序不會部署在任何應用程序服務器上。這個想法是編寫一個簡單的Java SE客戶端程序。我已經寫了以下嘗試進行查找:關於JBoss AS 6.0的JNDI查詢
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL,"localhost:1099");
env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
InitialContext ic = new InitialContext(env);
在這一點上,我已經試過兩種方法第一種是執行像在Java EE 6教程examplified直接查找(http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html):
ExampleEJB exampleEJB = (ExampleEJB) ic.lookup("java:global/myApp/ExampleEJB");
的第二次嘗試,試圖獲得JNDI上下文環境,然後從這個環境獲得所需的豆:
Context envContext = (Context)ic.lookup("java:/comp/env");
envContext.lookup(...)
的問題是,我receivin g以下例外:分別爲「javax.naming.NameNotFoundException:全局未綁定」和「javax.naming.NameNotFoundException:未綁定」。我無法根據需要執行查找。
有人有線索嗎?
你好,鈹。非常感謝您的回答。我在jmx-console上檢查過JNDIView。當我寫這個問題時不知道這個。當我在位置執行查找時:「ExampleEar/ExampleEJBImpl/remote」一切正常。你能否確認JBoss將EJB綁定到沒有「java:global」前綴的位置?你知道爲什麼嗎?我認爲這是Java EE 6規範,因此每個應用程序服務器都將遵循默認的「java:global///」位置。 –
該名稱綁定到不同的名稱空間(具有不同的作用域)。這就是爲什麼我用「如果使用java:global ...」開始答案。所以是的,還有其他地點以及不同的計劃。你選擇的名字也適用。 JNDIView在java:namespace中顯示的是什麼?在我的情況下,java:global條目只是JNDI中的一個鏈接,與您使用的條目相關。所以兩者都應該工作。 – Beryllium
是的,你說得對。我也可以像你說的那樣在java:namespace上看到我的ExampleEJBImpl。它在Global和Java命名空間上。但是,我無法從我的客戶端應用程序訪問java命名空間。即使我使用JNDIView給我的正確路徑。當我嘗試從不同的JVM進程執行查找時,會出現問題。 Java名稱空間只能從同一個JVM訪問。在我的情況下,我必須使用全局名稱空間來執行查找。是對的嗎?再一次感謝你。 –