代码之家  ›  专栏  ›  技术社区  ›  Michael Borgwardt

我可以在Java EE中制作任意类“可注入”吗?

  •  1
  • Michael Borgwardt  · 技术社区  · 14 年前

    我正在使用最近从EJB2迁移到EJB3的无状态会话bean开发一个大型的遗留应用程序,我想使用依赖注入。不幸的是,在(imo误导)试图实现分离的过程中,所有实际的业务逻辑都位于会话bean将其调用转发到的“manager”类中。这些管理器类通常使用其他EJB。

    我能让这些管理器类能够通过 @Resource 然后通过 @EJB ?

    应用程序必须在Glassfish 2.1上运行。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    (…)所有实际的业务逻辑都位于会话bean将其调用转发到的“manager”类中。

    这是EJB2.x的一个非常常见的模式,它允许在容器外部轻松地对“manager”类进行单元测试,而不需要遵循EJBAPI。

    我能让这些管理器类通过@resource注入EJB,然后通过@ejb注入其他EJB吗?

    不使用Java EE 5的盒子。注入仅限于JavaEE平台中定义的第一类构造,包括:

    • SessionContext 对象
    • DataSources 对象
    • UserTransaction
    • EntityManager 界面
    • TimerService 界面
    • 其他企业bean
    • Web服务
    • 消息队列和主题
    • 用于资源适应的连接工厂
    • 环境项仅限于字符串、字符、字节、短、整数、长、布尔、双精度和浮点。

    在Java EE 6中,使用CDI是可能的。 JSR-199 ) @Inject EJB中的注释可以注入管理器,也可以注入管理器中的EJB。

    也许吧 您可以尝试部署 Weld (JSR-199的RI)作为您在Glassfish V2.1上的应用程序的一部分。我自己没有做过这个实验,所以我无法证实任何事情。以防万一,也许看看 Chapter 18. Application servers and environments supported by Weld (Glassfish 2.1版尚未测试,但并不意味着它不起作用)。

        2
  •  0
  •   Alexis MP    14 年前

    Pascal关于升级到Glassfish 3的建议听起来可能是最优雅的方法;) 我很好奇,是什么阻止了我转向更新的版本(不是说没有理由,只是想知道问题出在这里)。

    推荐文章