JNDI LOOKUP错误Tomee OpenEJB NameNotFoundException

时间:2016-09-08 05:14:55

标签: java ejb tomee openejb

您好我正在使用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查找?

导致此错误的原因是什么? 感谢任何帮助

1 个答案:

答案 0 :(得分:0)

你使用本地作为远程 bean,所以它不起作用,而不是LocalInitialContextFactory切换到远程的那个,检查http://tomee.apache.org/clients.html的详细信息