0

我有一个要在 Websphere Liberty Profile (WLP) 上运行的 J2EE 应用程序。我特别想注入我的 EJB 引用。

我的 WLP 服务器配置了 ejb-lite、托管 bean 和 cdi 功能。我在我的 WEB-INF 目录中放置了 beans.xml 文件,并将操作类注释为 @ManagedBean,并添加了带有日志记录的 @PostConstruct 和 @PreRemove 方法以查看事情是否正常。我从来没有看到我的 @PostConstruct 和 @PreRemove 方法被调用

我已经尝试了一些方法来使注入工作,包括@Inject 和具有不同参数的各种风格的@EJB。似乎没有任何效果。我没有收到任何错误,但没有迹象表明正在进行任何注释处理。当我直接进行 JNDI 查找以获取 ejb 时,它工作正常。

我读过的所有内容都表明这应该可行,但我不知道为什么它不可行。

4

2 回答 2

1

@covener 是正确的...... bean 创建并没有像我想象的那样通过容器发生,所以没有发生依赖注入。我被以下事实误导了:如果我在 @Inject 或 @EJB 标记的注释中犯了错误,我有时会从容器中得到错误。这告诉我正在扫描和处理这些类,它只是作为 WebSphere Liberty Profile 中的 openwebbeans 容器的预处理步骤的一部分发生。我可以在网上找到的所有文档都对要求非常模糊,但我认为关键是您的类必须由容器直接创建,而不是由容器创建的类创建。

因此,即使我的类已正确注释,并且实际上正在由容器处理注释,但我的应用程序的情况是,这些类不是由容器以托管方式创建的(实际上不能) ,所以他们永远不会被 CDI 处理。

于 2014-02-28T13:12:37.797 回答
0

@ManagedBean是您不应该在 CDI 上下文中使用的 JSF 注释。您的 bean 类应该是具体的,没有构造函数或没有参数的默认构造函数。 @PostConstructand @PreDestroy(not @PreRemove) 应该放在不带参数的方法上。如果您的问题仍然存在,请尝试使用更多信息(类、服务器日志等)更新您的问题

于 2014-02-25T17:41:04.567 回答