当前位置: 首页 > 知识库问答 >
问题:

在Websphere Liberty Profile的J2EE应用程序中使用受管beans和注入

东方宜
2023-03-14

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

我已经用ejb-lite、managed-beans和cdi特性配置了我的WLP服务器。我已经在WEB-INF目录中放置了一个beans.xml文件,并将一个action类注释为@ManagedBean,并添加了一个带有日志记录的@PostConstruct和@PreRemove方法来查看事情是否正常。我从未见过我的@PostConstruct和@PreRemove方法被调用

我尝试了一些事情来让注射发挥作用,包括@Inject和带有不同论点的各种口味的@EJB。似乎什么都不管用。我没有得到任何错误,但是没有迹象表明正在进行任何注释处理。当我执行直接的JNDI查找来获取ejb时,它工作得很好。

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

共有2个答案

康烨伟
2023-03-14

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

顾光明
2023-03-14

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

因此,即使我的类已正确批注,并且实际上正在由容器进行批注处理,但我的应用的情况是,容器不会以托管方式创建类(实际上不能),因此它们永远不会为 CDI 进行处理。

 类似资料:
  • 我一直在找这样的东西。 拥有此micronaut应用程序代码 如何将Spring的ApplicationContext与Micronaut的ApplicationContext合并。 问候

  • 我必须在j2ee中开发一个多租户SaaS应用程序,从Iaas和PaaS开始实现三种云模型,我选择了openstack和openshift origin。SaaS应用程序的第一个标准是多租户,我知道有三种方法来实现它——单独的数据库——共享数据库,单独的模式——共享数据库,共享模式。我在这里迷失了方向,因为许多框架,比如ATHENA,ORM,比如hibernate,还有TOPLINK。我需要帮助了解

  • 我试图将自定义对象值传递给Jasper报表,我使用编译后的Jasper即文件。 在jrxml中传递参数 如何访问学生对象?

  • 针对 J2EE 体系,Hibernate 有如下几个集成的方面: 容器管理的数据源(Container-managed datasources): Hibernate 能使用通过容器管理,并由 JNDI 提供的 JDBC 连接。通常,特别是当处理多个数据源的分布式事务的时候,由一个 JTA 兼容的 TransactionManager 和一个 ResourceManager 来处理事务管理(CMT

  • 下载应用程序、共享文件、查找字体和库存图片等 — 全部通过 Creative Cloud 桌面应用程序完成。 注意:  Typekit 现已更名为 Adobe Fonts,包含在 Creative Cloud 和其他订阅中。了解详情。 注意:在您安装 Creative Cloud 桌面应用程序的过程中,本文中介绍的某些选项卡可能不可用。 Adobe Creative Cloud 桌面应用程序可供您

  • 我有以下情况。在我的微服务[MA]中,我希望在应用程序启动后或基于某个事件初始化/销毁一些bean。想象一下,还有另一个微服务[MB],它保存关于ContentStores的信息。在MA启动之后,我想向MB请求contentStore条目,基于此,我想根据需要创建这么多bean。可能会有一个事件触发storrecreated/storredeleted,在这种情况下,我需要销毁bean。 我目前不