0

就像下面的例子:

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 规范中找不到任何部分,这似乎暗示了方向。如果有人能指出正确的地方,我将不胜感激。

这个问题也没有回答注入部分,可能已经过时并且有趣的链接已经死了: EJB bean 可以实现多个接口吗?

有任何想法吗?

4

1 回答 1

1

因此,首先,CDI 在这里并不是坏人——事实上,从 CDI 的角度来看,拥有一个具有两个接口的 bean,您可以毫无问题地基于这些接口注入两个 bean。

真正的交易似乎是 EJB。现在,我不确定您正在运行什么应用程序服务器以及 EJB 版本(您将问题标记为ejb-3.0但谈论的是 Java EE 7,即 EJB 3.2)。

从 EJB 3.1 规范,第 4.9.7 节会话 Bean 的业务接口:

如果 bean 不公开任何其他客户端视图(Local、Remote、No-Interface、2.x Remote Home、2.x Local Home、Web Service)并且 bean 类实现了单个接口,则假定该接口是bean 的业务接口。此业务接口将是本地接口,除非该接口通过使用 bean 类或接口上的 Remote 注释或通过部署描述符指定为远程业务接口。

长话短说 - EJB 3.1 不支持多个接口。 话虽如此,某些服务器可能支持它?

然而,转到 EJB 3.2,再次第 4.9.7 节会话 Bean 的业务接口:

如果 bean 类使用 Local 注释进行注释,或者如果 bean 类既没有使用 Local 也没有使用 Remote 注释,则所有实现的接口(不包括上面列出的接口)都被假定为 bean 的本地业务接口。

因此,在 EJB 3.2 中,它受到支持。请注意,在此文本下方有一个与您的情况完全相同的示例。

所以我想你的问题归结为:

  • 你用什么应用服务器?
  • 服务器有什么 EJB 版本?
于 2017-08-31T11:05:05.767 回答