Java EJB不能注入其他EJB
我确实有一个EJBJava EJB不能注入其他EJB,java,jakarta-ee,ejb,Java,Jakarta Ee,Ejb,我确实有一个EJBActionService,我可以将它注入到其他EJB中,这很好 现在我创建了另一个EJB: @Stateless public class ActionsPerDateDataSet extends ScriptedDataSetEventAdapter { @EJB ActionService actionService; @Override public void open(IDataSetInstance dataSet) {
ActionService
,我可以将它注入到其他EJB中,这很好
现在我创建了另一个EJB:
@Stateless
public class ActionsPerDateDataSet extends ScriptedDataSetEventAdapter {
@EJB
ActionService actionService;
@Override
public void open(IDataSetInstance dataSet) {
actionService.foo() // However actionService is null here!
}
}
其中ScriptedDataSetEventAdapter
来自另一个框架(BIRT)。
但是现在我的actionService
总是null
。我不明白为什么
类ScriptedDataSetEventAdapter 无法在EJB容器中初始化(循环的第一部分) 由于初始化不正确,因此没有进行依赖项注入(@EJB和@Inject) 您可以做的是更改EJB的设计,而是扩展“ScriptedDataSetEventAdapter” 把它改成作文
@Stateless
public class ActionsPerDateDataSet {
ScriptedDataSetEventAdapter scriptedDataSetEventAdapter;
@EJB
ActionService actionService;
@PostConstruct
public void init (){
try {
scriptedDataSetEventAdapter = new ScriptedDataSetEventAdapter();
} catch( AppException e){
}
}
@Override
public void open(IDataSetInstance dataSet) {
actionService.foo() // However actionService is null here!
}
}
您应该将lib作为ejbModule引入ear文件,以便容器搜索jar文件,并在需要时部署和注入它。ActionService有一个与@local注释的接口,或者如果这是一个类,它必须有@LocalBean注释 (这是为了能够在运行时访问它的实例) 如果它是一个接口,并且有多个实现,则必须使用@EJB(beanName=“nameOfImplementation”)引用所需的实现,如果它是一个类,其中@LocalBean用于使用@EJB(name=“nameEjb”) 与@Local接口 使用@LocalBean初始化 在聚合类中 与多个实现@EJB的接口(beanName=“nameOfImplementation”) Class@EJB(name=“nameEjb”) 注意:使用@Local和test实现ActionService接口
注意:添加跟踪控制台日志以了解类是否被初始化为ejb:ActionService您是如何注入
ActionsPerDateDataset
本身的?通过@EJB
对吗?或者你手动实例化了它(或者让BRIT手动实例化)?不管怎样,您试图访问actionService
的确切位置是什么?在构造函数中,应用服务器是Glassfish v3.1。Birt正在实例化它,所以您认为手动执行新建ActionsPerDateDataSet()
会神奇地设置所有字段,并在其上添加依赖项注入注释?那个手工构建的实例根本不是EJB。只有通过@EJB
获得它时,它才是真正的EJB。所以,基本上您是在尝试将EJB注入一个普通的旧Java对象中?在本例中,它只是EJB端的POJO。