Java 无法将JBoss作为7.1实例化EJB

Java 无法将JBoss作为7.1实例化EJB,java,ejb,jboss7.x,Java,Ejb,Jboss7.x,我定义了一个EJB,并试图从另一场战争中使用它: 在ejb-api.jar中: 在ejb-impl.war中,使用ejb-api.jar: 在ejb-user.war中,使用ejb-api.jar: 我将ejb-impl.war和ejb-user.war部署到JBoss 7.1的一个实例中。 如果我将所有类放在同一个war文件中,那么就可以找到EJB。但这样的话,我就不会有什么例外了 此外,如果我添加一个包含这些内容的jndi.properties文件 java.naming.factory.i

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

在ejb-api.jar中:

在ejb-impl.war中,使用ejb-api.jar:

在ejb-user.war中,使用ejb-api.jar:

我将ejb-impl.war和ejb-user.war部署到JBoss 7.1的一个实例中。 如果我将所有类放在同一个war文件中,那么就可以找到EJB。但这样的话,我就不会有什么例外了

此外,如果我添加一个包含这些内容的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]
你知道我做错了什么吗?

根据,应用服务器不需要支持任何特定形式或类型的映射名称,也不需要能够使用映射名称。因此,使用它来更改bean的映射名称IMHO不是一个好主意

让我们试试看

正在从@Stateless删除mappedName 已编辑:在java:global命名空间中使用ExampleBean的名称: java:global[/application name]/模块名/企业bean名[/interface name] 编辑: 您正在将两个模块部署到同一个应用程序服务器,是吗?然后,您不需要jndi.properties文件,让我们尝试不使用它。

根据,应用程序服务器不需要支持任何特定形式或类型的映射名称,也不需要能够使用映射名称。因此,使用它来更改bean的映射名称IMHO不是一个好主意

让我们试试看

正在从@Stateless删除mappedName 已编辑:在java:global命名空间中使用ExampleBean的名称: java:global[/application name]/模块名/企业bean名[/interface name] 编辑:
您正在将两个模块部署到同一个应用程序服务器,是吗?然后,您不需要jndi.properties文件,让我们尝试不使用它。

将依赖项添加到.WAR文件的META-INF/manifest.mf中:org.jboss.remote-naming。这将加载org.jboss.remote-naming模块并消除实例化InitialContextFactory失败的异常。细节


关于同一问题的答案,您可以添加依赖项:org.jboss.remote-naming到.WAR文件的META-INF/manifest.mf。这将加载org.jboss.remote-naming模块并消除实例化InitialContextFactory失败的异常。细节


您可以回答的同一个问题的答案

我删除了映射名称,并尝试了部署bean时服务器日志中显示的列表中的名称。它仍然不起作用。我想JNDI配置文件有问题是的,两个模块都部署到同一个应用服务器上。我最终成功地注入了我的ebj,将所有内容都放在一个ear中,没有任何jndi.properties,并使用@EJB注释而不是context.lookup。我还将在ear之外重试。当您的模块不在ear中,并且您试图使用bean的java:global名称空间名称(例如java:global/ejb-impl/ExampleBean)进行查找时,会出现什么异常?使用java:global/ejb-impl/ExampleBean时,我会得到javax.naming.NameNotFoundException:ejb-impl/ExampleBean-servicejboss.naming.context.java.global.ejb-impl.ExampleBean。但是我尝试了服务器日志中的一个名称,java:global/example-impl-0.0.1-SNAPSHOT/ExampleBean!这一次没有jndi.properties的示例——它成功了。非常感谢你的帮助,Csaba!我删除了映射的名称,并尝试在部署bean时从服务器日志中显示的列表中删除名称。它仍然不起作用。我想JNDI配置文件有问题是的,两个模块都部署到同一个应用服务器上。我最终成功地注入了我的ebj,将所有内容都放在一个ear中,没有任何jndi.properties,并使用@EJB注释而不是context.lookup。我还将在ear之外重试。当您的模块不在ear中,并且您试图使用bean的java:global名称空间名称(例如java:global/ejb-impl/ExampleBean)进行查找时,会出现什么异常?使用java:global/ejb-impl/ExampleBean时,我会得到javax.naming.NameNotFoundException:ejb-impl/ExampleBean-servicejboss.naming.context.java.global.ejb-impl.ExampleBean。但是我尝试了服务器日志中的一个名称,java:global/example-impl-0.0.1-SNAPSHOT/ExampleBean!这一次没有jndi.properties的示例——它成功了。非常感谢你的帮助,Csaba!
@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();
        }
    }
}
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]