您好我正在使用Tomee jaxrs(1.7.4)服务器中的openEJB,我有一个Web项目和一个在同一个TomEE服务器上运行的EJB项目。
我已将EJB项目部署在TomEE服务器的webapps文件夹中,并且可以看到EJB在服务器启动时正在启动。
INFO: Enterprise application "C:\Apache_Software\OPEN_EJB\Server\webapps\OpenEjbServer" loaded.
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.Assembler createApplication
INFO: Assembling app: C:\Apache_Software\OPEN_EJB\Server\webapps\OpenEjbServer
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=calcRemote) --> Ejb(deployment-id=calc)
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/OpenEjbServer/calc!org.superbiz.stateless.basic.CalculatorBeanRemote) --> Ejb(deployment-id=calc)
Sep 08, 2016 10:08:39 AM org.apache.openejb.assembler.classic.JndiBuilder bind
INFO: Jndi(name=global/OpenEjbServer/calc) --> Ejb(deployment-id=calc)
Sep 08, 2016 10:08:39 AM org.apache.openejb.cdi.CdiBuilder initSingleton
以下是EJB项目中的一个@Stateless bean
@Remote
public interface CalculatorBeanRemote {
public int add(int a, int b);
}
@Stateless
public class CalculatorBean implements CalculatorBeanRemote {
@Override
public int add(int a, int b) {
return a + b;
}
}
使用servlet从EJB项目中获取我可以使用以下代码执行JNDI Lookup。
Properties p = new Properties();
p.put("java.naming.factory.initial","org.apache.openejb.client.LocalInitialContextFactory");
p.put("java.naming.provider.url", "ejbd://localhost:4201");
Context remoteContext = new InitialContext(p);
try {
Object ojb = remoteContext.lookup("calcRemote");
}catch(Exception e){}
当EJB单独部署时尝试执行相同的调用时,我得到了
javax.naming.NameNotFoundException: Name "calcRemote" not found.
at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:197)
at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:151)
at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:115)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
如果在部署在同一个TomEE服务器或不同的TomEE服务器上时,如何从Web项目到EJB执行本地或远程JNDI查找?
导致此错误的原因是什么? 感谢任何帮助
答案 0 :(得分:0)
你使用本地作为远程 bean,所以它不起作用,而不是LocalInitialContextFactory切换到远程的那个,检查http://tomee.apache.org/clients.html的详细信息