java - 如何通过远程接口(interface)使用@EJB”

标签 java jakarta-ee ejb-3.0

我有 glassfish v4 和 2 只耳朵:

  1. Service.ear 包含 EJB。
  2. WebApplications.ear 包含 Web 应用程序。

我尝试使用:

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

但是我得到了错误:

Caused by: com.sun.faces.spi.InjectionProviderException: com.sun.enterprise.container.common.spi.util.InjectionException: Exception attempting to inject Remote 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=Session into class 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")

关于java - 如何通过远程接口(interface)使用@EJB”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019992/

相关文章:

java - java.util.regex.Matcher::useAnchoringBounds 如何工作?

java - 如何在 Pattern 类中使用变量而不是字符串?

java - Big-O在java中的简单解释和使用

java - 在 Apache Tomcat 服务器 7.0 中部署 PHP 和 Java EE 应用程序

java - 与其他 Java Web 框架相比,Grails 有哪些优势?

java - JPA 和 Hibernate 有什么区别?

java - EJB 模块初始化监听器

java - 防止在 @After 之后关闭浏览器

java - 为什么在远程 EJB3 session Bean 上使用 InitialContext

java - JPA 实体、Oracle 10g 和日历类型属性有问题吗?