2012-08-29 51 views
2

我定義的EJB,我試圖從另一場戰爭使用它:不能與JBoss實例的EJB 7.1

ejb-api.jar

@Remote 
public interface Example { 
    // ... 
} 

ejb-impl.war(使用ejb-api.jar):

@Stateless(mappedName = "ExampleEjb") 
public class ExampleBean implements Example { 
    // ... 
} 

ejb-user.war(使用ejb-api.jar):

@WebServlet("/ejbuser") 
public class UserServlet extends HttpServlet { 

    @Override 
    public void doGet(...) throws Exception { 
     Example example = null; 
     try { 
      InitialContext context = new InitialContext(); 
      example = (Example)context.lookup("ExampleEjb"); 
     } catch (NamingException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我部署ejb-impl.warejb-user.war到JBoss的實例AS 7.1。 如果我把所有的類放在同一個war文件中,那麼就找到了EJB。但這樣,它不是(我得到NamingException)。

而且,如果我添加了一個jndi.properties文件,這些內容...

java.naming.factory.initial = org.jboss.naming.remote.client.InitialContextFactory 
java.naming.provider.url = remote://localhost:4447 
jboss.naming.client.ejb.context = true 
java.naming.factory.url.pkgs = org.jboss.ejb.client.naming 

...然後我得到這樣的警告:

16:55:46,268 WARNING [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-7) javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jnp.interfaces.NamingContextFactory from classloader ModuleClassLoader for Module "deployment.example.war:main" from Service Module Loader: javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory org.jnp.interfaces.NamingContextFactory from classloader ModuleClassLoader for Module "deployment.example.war:main" from Service Module Loader 
    at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:64) 
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:681) [rt.jar:1.7.0_03] 
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) [rt.jar:1.7.0_03] 
    at javax.naming.InitialContext.init(InitialContext.java:242) [rt.jar:1.7.0_03] 
    at javax.naming.InitialContext.<init>(InitialContext.java:192) [rt.jar:1.7.0_03] 
    at com.sun.faces.config.WebConfiguration.processJndiEntries(WebConfiguration.java:687) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.config.WebConfiguration.<init>(WebConfiguration.java:134) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.config.WebConfiguration.getInstance(WebConfiguration.java:194) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:163) [jsf-impl-2.1.7-jbossorg-2.jar:] 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.13.Final.jar:] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.13.Final.jar:] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03] 
    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03] 

你知道我是什麼做錯了?

回答

4

根據@Stateless' documentation,「應用程序服務器不需要支持任何特定形式或類型的映射名稱,也不需要使用映射名稱的能力。」因此,用它來改變bean的映射名稱恕我直言,不是一個好主意。

讓我們嘗試

  1. 從@Stateless
  2. 去除mappedName
  3. 編輯:在Java中使用叫exampleBean的名字:全局命名空間: java:global[/application name]/module name/enterprise bean name[/interface name]

Further reading about portable JNDI syntax

編輯: 您正在將兩個模塊部署到同一個應用服務器,是嗎?然後,你不需要一個jndi.properties文件,我們儘量不要使用它。

+0

我刪除映射的名字,我試圖從當Bean部署出現在服務器日誌列表的名稱。它仍然不起作用。我想JNDI配置文件有問題 – Cos64

+0

是的,這兩個模塊都部署到同一個應用服務器。我終於設法注入我的ebj,把所有東西放在耳邊(沒有任何jndi.properties),並使用@EJB註釋而不是context.lookup()。我也會在耳邊試試。 – Cos64

+0

當你的模塊不在EAR中時,你會得到什麼異常,並且你正嘗試用你的bean的java:全局命名空間名稱來查找,例如Java的:全球/ EJB-IMPL /叫exampleBean? – Csaba

0

將「Dependencies:org.jboss.remote-naming」添加到.WAR文件的META-INF/manifest.mf中。這將加載org.jboss.remote命名模塊並消除「Failed instantiate InitialContextFactory」異常。詳細here

解決同一個問題的答案,你可以see here