簡體   English   中英

無法使用JBoss AS 7.1實例化EJB。

[英]Cannot instantiate EJBs with JBoss AS 7.1

我定義了一個EJB,並試圖從另一場戰爭中使用它:

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]

你知道我在做什么嗎?

根據@Stateless的文檔 ,“不需要應用程序服務器支持任何特定形式或類型的映射名稱,也不需要支持使用映射名稱的能力。” 因此,使用它來更改bean的映射名稱IMHO並不是一個好主意。

我們試試吧

  1. 從@Stateless中刪除mappingName
  2. 編輯:在java:global命名空間中使用ExampleBean的名稱: java:global[/application name]/module name/enterprise bean name[/interface name]

進一步閱讀有關可移植JNDI語法的信息

編輯:您正在將兩個模塊都部署到同一應用服務器上,不是嗎? 然后,您不需要jndi.properties文件,讓我們嘗試不使用它。

將“ Dependencies:org.jboss.remote-naming”添加到.WAR文件的META-INF / manifest.mf中。 這將加載org.jboss.remote-naming模塊並消除“實例化InitialContextFactory失敗”異常。 詳情在這里

您可以在這里看到的相同問題的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM