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

时间:2015-01-19 07:46:53

标签: java java-ee ejb-3.0

我有玻璃鱼v4和2只耳朵:

  1. Service.ear包含EJB。
  2. WebApplications.ear包含Web 应用
  3. 我尝试使用:

    @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的异常名称= java:global / Service / allServices / ServiceEJBs!Service1Remote,Remote 3.x interface = Service1Remote,ejb-link = null,lookup =,mappedName = global / Service / allServices / ServiceEJBs!Service1Remote,jndi-name =,refType = session in 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; 
       }
    
    }
    

2 个答案:

答案 0 :(得分:1)

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

也就是说,如果你替换了正确的映射名称,它甚至都无法工作(因为这些是在两个不同的耳朵部署中)。

实际获得参考,请使用

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

而不是

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

答案 1 :(得分:0)

我重新安装了最新版本的glassfish 4.1和JDK1.8.0_25,并且 Maress 表示已更改:

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

而不是

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

现在它工作正常。

感谢 Maress :)