Java 在WebSphereLiberty概要中的J2EE应用程序中使用托管bean和注入

Java 在WebSphereLiberty概要中的J2EE应用程序中使用托管bean和注入,java,jakarta-ee,cdi,managed-bean,websphere-liberty,Java,Jakarta Ee,Cdi,Managed Bean,Websphere Liberty,我有一个J2EE应用程序,正在转换为在Websphere Liberty Profile(WLP)上运行。我特别尝试注入EJB引用 我已经用EJBLite、托管bean和cdi特性配置了WLP服务器。我在WEB-INF目录中放置了一个beans.xml文件,并将一个操作类注释为@ManagedBean,并添加了一个带有日志的@PostConstruct和@PreRemove方法,以查看是否正常工作。我从来没有看到我的@PostConstruct和@PreRemove方法被调用 我尝试了一些方法来

我有一个J2EE应用程序,正在转换为在Websphere Liberty Profile(WLP)上运行。我特别尝试注入EJB引用

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

我尝试了一些方法来让注入工作,包括@Inject和带有不同参数的各种@EJB。似乎什么都不管用。我没有收到任何错误,但没有迹象表明正在进行任何注释处理。当我直接查找JNDI以获取ejb时,它工作得很好


我读到的所有内容都表明这应该有效,但我不明白为什么不行。

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

@covener是正确的……bean的创建没有按照我的想法通过容器进行,因此没有发生依赖项注入。如果我在@Inject或@EJB标记的注释中出错,我有时会从容器中得到错误,这一事实误导了我。这告诉我这些类正在被扫描和处理,这只是WebSphereLiberty概要文件中openwebbeans容器预处理步骤的一部分。我可以在网上找到的所有文档对需求都非常模糊,但我认为关键是您的类必须直接由容器创建,而不是由容器创建的类创建


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

不,这是J2EE 6的事情:。令人困惑的是,它也是一个JSF注释,但我正在尝试使用WebSphere8.5Liberty概要文件的ManagedBeans功能。正如这里所说的,这个注释是无用的,它不应该阻止CDI工作。如果您需要更多帮助,您必须共享代码。我的猜测是,您的JSF托管bean实际上没有被视为JSF托管bean,或者您没有以容器提供的方式访问它——因此它没有获得注入服务。我将重点关注这一方面,我不是在使用JSF,而是在尝试使用J2EE6的托管beans/CDI功能。然而,经过大量的实验,我认为你是对的。