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

bre*_*ish 3 java jboss intellij-idea java-ee-6 ejb-3.1

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

有谁能说出为什么?

Pas*_*ent 13

可以使用@EJB注释将EJB引用注入另一个EJB .以下是从OpenEJB文档中注入其他EJB示例的示例:

代码

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

DataStore会话bean

@Stateless
public class DataStoreImpl implements DataStoreLocal, DataStoreRemote{

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

}
Run Code Online (Sandbox Code Playgroud)

本地业务接口

@Local
public interface DataStoreLocal {

  public String getData();

}
Run Code Online (Sandbox Code Playgroud)

远程业务接口

@Remote
public interface DataStoreRemote {

  public String getData();

}
Run Code Online (Sandbox Code Playgroud)

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意@EJBDataStoreRemote和DataStoreLocal字段上注释的用法.这是EJB ref解析所需的最低要求.如果您有两个实现相同业务接口的bean,则需要beanName属性,如下所示:

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

@EJB(beanName = "DataStoreImpl") 
private DataStoreLocal dataStoreLocal;
Run Code Online (Sandbox Code Playgroud)

本地业务接口

@Local
public interface DataReaderLocal {

  public String readDataFromLocalStore();
  public String readDataFromRemoteStore();
}
Run Code Online (Sandbox Code Playgroud)

(为简洁起见,未显示远程业务接口).

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


Mat*_*ell 5

我相信这是一个IntelliJ IDEA错误.这个帖子为我解决了这个问题:

添加EJB Facet(在项目结构>模块中)有所帮助