gpt4 book ai didi

java - 无法使用 JBoss AS 7.1 实例化 EJB

转载 作者:行者123 更新时间:2023-11-30 07:23:09 25 4
gpt4 key购买 nike

我定义了一个 EJB 并试图从另一场 war 中使用它:

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' documentation , “应用程序服务器不需要支持任何特定形式或类型的映射名称,也不需要使用映射名称的能力。”因此,恕我直言,使用它来更改 bean 的映射名称并不是一个好主意。

让我们试试

  1. 从@Stateless 中删除 mappedName
  2. 编辑: 在 java:global 命名空间中使用 ExampleBean 的名称:java:global[/application name]/module name/enterprise bean name[/interface name]

Further reading about portable JNDI syntax

已编辑:您正在将两个模块部署到同一个应用程序服务器,不是吗?然后,您不需要 jndi.properties 文件,让我们尝试不使用它。

关于java - 无法使用 JBoss AS 7.1 实例化 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12180234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com