我定义的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.war
和ejb-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]
你知道我是什么做错了?
我删除映射的名字,我试图从当Bean部署出现在服务器日志列表的名称。它仍然不起作用。我想JNDI配置文件有问题 – Cos64
是的,这两个模块都部署到同一个应用服务器。我终于设法注入我的ebj,把所有东西放在耳边(没有任何jndi.properties),并使用@EJB注释而不是context.lookup()。我也会在耳边试试。 – Cos64
当你的模块不在EAR中时,你会得到什么异常,并且你正尝试用你的bean的java:全局命名空间名称来查找,例如Java的:全球/ EJB-IMPL /叫exampleBean? – Csaba