如下例所示:
public interface CommandLineDieselEngineExhaustManipulatorService{
// command line services
}
public interface ClientDieselEngineExhaustManipulatorFacade{
// ui-client services
}
@Stateless
public class DieselEngineExhaustManipulatorImpl implements CommandLineDieselEngineExhaustManipulatorService, ClientDieselEngineExhausManipulatorFacade {
// Implementation of both interfaces
}
@Stateless
public class MyCdiManagedClass{
@Inject
private CommandLineDieselEngineExhaustManipulatorService cliService;
@Inject
private ClientDieselEngineExhausManipulatorFacade clientFacade;
// Whatever
}
对于我是否应该支持通过其实现接口可注入的无状态EJB注入普通无状态EJB(没有接口),我不感兴趣。
我尝试使用JEE7(CDI1)但没有成功。我得到的结论是EJB + CDI不支持它。
我想知道是否可以使用JEE8?
我找不到CDI 2.0规范中的任何部分,这似乎给了方向的暗示。如果有人能指出正确的地方,我将非常感激。
这个问题没有回答注射部分,可能已经过时且有趣的链接已经死亡:Can an EJB bean implement multiple interfaces?
有什么想法吗?
答案 0 :(得分:0)
所以,首先,CDI并不是坏人 - 实际上,从CDI的角度来看,拥有一个带有两个接口的bean,你可以基于这些接口注入两个没有问题的bean。
真正的交易似乎是EJB 。现在,我不确定您运行的是哪个应用程序服务器以及哪个EJB版本(您将问题标记为ejb-3.0
但是请讨论Java EE 7,它将是EJB 3.2)。
从EJB 3.1规范,4.9.7会话Bean的业务接口:
如果bean没有公开任何其他客户端视图(本地,远程,无接口,2.x远程主页,2.x本地主页,Web服务)并且bean类实现单个接口,则假定该接口成为bean的业务接口。除非通过在bean类或接口上使用Remote注释或通过部署描述符将接口指定为远程业务接口,否则此业务接口将是本地接口。
冗长的简短 - EJB 3.1不支持多个接口。 话虽这么说,有些服务器可能会支持它吗?
然而,转到EJB 3.2,再次参见章节4.9.7会话Bean的业务接口:
如果bean类使用Local注释 注释,或者如果bean类没有使用Local注释 也不是远程注释,所有实现的接口(不包括nterf 上面列出的a)被假定为bean的本地业务接口。
因此,在EJB 3.2中,支持它。请注意,在本文正下方有一个完全符合您个案的示例。
所以我想你的问题归结为: