如何使用@EJB与远程接口“

我有glassfish v4和2个耳朵:

  • Service.ear包含EJB。
  • WebApplications.ear包含Web应用程序。
  • 我尝试使用:

    @EJB(mappedName="java:global/Service/allServices/ServiceEJBs!Service1Remote")
    Service1Remote service1Remot;
    

    但我得到错误:

    导致:com.sun.faces.spi.InjectionProviderException:com.sun.enterprise.container.common.spi.util.InjectionException:尝试注入远程ejb-ref name = java:global / Service / allServices / ServiceEJBs的异常!Service1Remote ,Remote 3.x interface = Service1Remote,ejb-link = null,lookup =,mappedName = global / Service / allServices / ServiceEJBs!Service1Remote,jndi-name =,refType =进入类的会话com.manage.application.WebApplication:null

    但是当我使用:

    Service1Remote remote= (Service1Remote) new InitialContext().lookup("java:global/Service/allServices/ServiceEJBs!Service1Remote"); 
    

    它工作正常。

    EJB:

    @Remote
    public interface Service1Remote{
       public long getCount(int itemId);
    }
    
    @Stateless(name = "ServiceEJBs" , mappedName ="ServiceEJBs")
    public Service1Bean implements Service1Remote{
       public long getCount(int itemId){
         ...............
         return 100000999; 
       }
    
    }
    

    显然你的@EJB(mappedname)定义与@Stateless(mappedNamed)定义中的映射名称不同。

    也就是说,如果您替换了正确的映射名称(因为它们在两个不同的耳部署中),它甚至不会工作。

    要真正获得参考,请使用

    @EJB(lookup="java:global/Service/allServices/ServiceEJBs!Service1Remote")
    

    代替

    @EJB(mappedName="java:global/Service/allServices/ServiceEJBs!Service1Remote")
    

    我重新安装了最新版本的glassfish 4.1和JDK1.8.0_25,正如Maress所说的那样:

    @EJB(lookup="java:global/Service/allServices/ServiceEJBs!Service1Remote")
    

    代替

    @EJB(mappedName="java:global/Service/allServices/ServiceEJBs!Service1Remote")
    

    现在它工作正常。

    谢谢女士 :)

    链接地址: http://www.djcxy.com/p/58783.html

    上一篇: how can use @EJB with remote interface"

    下一篇: Remote EJB Lookup Between two ears in glassfish 2.1