2011-07-25 99 views
1

我已經在war文件(不是ear文件)中部署了ejb。 我已經成功地使用了先前部署在ear文件中的ejb,但現在我得到了javax.naming.NameNotFoundException,因爲我的EJB託管在war文件中。如果我的web應用程序被稱爲SpeechServices,並且該bean在com.xyz.ejb包下,並且它的名稱是Service,那麼應該使用的JNDI查找字符串是什麼? 我現在正在使用以下內容。部署在JBOSS上的EJB的端點

ServiceRemote remote = (ServiceRemote) ct.lookup("SpeechServices/Service/remote-com.xyz.ejb.ServiceRemote"); 

請幫我糾正上述錯誤。

我完整的代碼如下,其工作方式連接到EJB的,如果他們在耳,

 Properties env = new Properties(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, 
       "org.jnp.interfaces.NamingContextFactory"); 
     env.put(Context.URL_PKG_PREFIXES, 
       "org.jboss.naming:org.jnp.interfaces"); 
     env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); 
     env.put(Context.SECURITY_PRINCIPAL, "admin"); 
     env.put(Context.SECURITY_CREDENTIALS, "admin"); 
     env.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
       "org.jboss.security.jndi.JndiLoginInitialContextFactory"); 
     InitialContext ct = new InitialContext(env); 
     ServiceRemote remote = (ServiceRemote) ct.lookup("SpeechServices/Service/remote-com.xyz.ejb.ServiceRemote"); 
     System.out.println(remote.parseNotes(null, null, null)); 

回答

0

檢查JNDI,以確保您使用的是正確的密鑰。要做到這一點:

  1. 訪問JBoss的:在JMX-Console服務=關於JNDIView
  2. 調用列表()方法
  3. 驗證您的EJB是否正確綁定,並確認鍵使用的是正確
+0

非常感謝,它被綁定爲全局JNDI命名空間,所以連接字符串是「Service/remote-com.ecw.ejb.ServiceRemote」沒有應用名稱追加到?這是好還是壞? – Sap

+0

我沒有看到任何問題。順便說一句,如果你不喜歡默認的名稱,你可以提供你自己的JNDI名稱。對於自定義名稱,您需要使用LocalBinding/RemoteBinding註釋或其等效XML。 – helios

+0

如果解決方案適用於您,您可能想接受答案:-) – helios

0

確認您已經更新了web.xml中使用

<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

我認爲規範說明,如果沒有在您的web.xml中完成,那麼EJB不會以Java EE 6方式處理。

+0

是的,這已經在那裏 – Sap