如何将一个EJB 3.1注入另一个EJB

时间:2010-08-26 14:51:37

标签: java jboss intellij-idea java-ee-6 ejb-3.1

我正在开发一个简单的应用程序,其中一个EJB应该注入另一个。我在IDEA Jetbrains IDE中开发。但是在我在Ejb本地静态类中制作@EJB注释后,我的IDE突出显示错误: 未找到组件接口'ApplicationController'的EJB'。

谁能说出为什么?

2 个答案:

答案 0 :(得分:13)

可以使用@EJB注释将EJB引用注入另一个EJB。以下是来自OpenEJB文档的Injection of other EJBs Example的示例:

  

守则

     

在这个例子中我们开发了两个简单的   会话无状态bean(DataReader   和DataStore),并展示我们如何   在其中一个中使用@EJB注释   这些bean得到了引用   另一个会话bean

     

DataStore会话bean

     

<强>豆

@Stateless
public class DataStoreImpl implements DataStoreLocal, DataStoreRemote{

  public String getData() {
      return "42";
  }

}
     

本地商户界面

@Local
public interface DataStoreLocal {

  public String getData();

}
     

远程业务界面

@Remote
public interface DataStoreRemote {

  public String getData();

}
     

DataReader会话bean

     

<强>豆

@Stateless
public class DataReaderImpl implements DataReaderLocal, DataReaderRemote {

  @EJB private DataStoreRemote dataStoreRemote;
  @EJB private DataStoreLocal dataStoreLocal;

  public String readDataFromLocalStore() {
      return "LOCAL:"+dataStoreLocal.getData();
  }

  public String readDataFromRemoteStore() {
      return "REMOTE:"+dataStoreRemote.getData();
  }
}
     

请注意 @EJB 注释的用法   在DataStoreRemote和   DataStoreLocal字段。这是   EJB ref所需的最低要求   解析度。如果你有两个豆子   实施相同的业务   接口,你会想要的   beanName属性如下:

@EJB(beanName = "DataStoreImpl") 
private DataStoreRemote dataStoreRemote;

@EJB(beanName = "DataStoreImpl") 
private DataStoreLocal dataStoreLocal;
     

本地商户界面

@Local
public interface DataReaderLocal {

  public String readDataFromLocalStore();
  public String readDataFromRemoteStore();
}
     

(远程业务接口不是   为了简洁起见)。

如果它没有按预期工作,可能会显示一些代码。

答案 1 :(得分:5)

我相信这是一个IntelliJ IDEA错误。 This thread为我解决了这个问题:

  

添加EJB Facet(在项目结构&gt;模块中)帮助