我有一个J2EE应用程序,我正在转换为在Websphere Liberty Profile(WLP)上运行。我特意尝试注入EJB引用。
我的WLP服务器配置了ejb-lite,托管bean和cdi功能。我在我的WEB-INF目录中放置了一个beans.xml文件,并将一个动作类注释为@ManagedBean,并添加了@PostConstruct和@PreRemove方法,并记录了事情是否正常。我从未看到我的@PostConstruct和@PreRemove方法被称为
我已经尝试了一些方法来使注入工作,包括@Inject和各种风格的@EJB使用不同的参数。似乎没什么用。我没有收到任何错误,但没有迹象表明正在进行任何注释处理。当我进行直接JNDI查找以获取ejb时,它工作正常。
我读过的所有内容都表明 应该工作,但我无法弄清楚它为什么没有。
答案 0 :(得分:1)
@covener是正确的...... bean的创建并没有像我想象的那样通过容器发生,因此没有发生依赖注入。如果我在@Inject或@EJB标签的注释中犯了错误,我会被有时从容器中获取错误这一事实误导了我。这告诉我,这些类正在被扫描和处理,它只是由WebSphere Liberty Profile中的openwebbeans容器作为预处理步骤的一部分发生的。我在网上找到的所有文档都非常含糊,但我认为关键是你的类必须由容器直接创建,而不是由容器创建的类创建。
因此,即使我的类被正确注释,并且实际上正在处理容器的注释,我的应用程序的情况也是这样的,这些类不是由容器以托管的方式创建的(实际上可以'因为它们永远不会被CDI处理。
答案 1 :(得分:0)
@ManagedBean
是一个不应在CDI上下文中使用的JSF注释。你的bean类应该是具体的,没有构造函数或没有参数的默认构造函数。
@PostConstruct
和@PreDestroy
(不是@PreRemove
)应放在没有参数的方法上。
如果问题仍然存在,请尝试使用更多信息(类,服务器日志等)更新您的问题