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

时间:2010-06-17 10:35:33

标签: dependency-injection java-ee glassfish

我正在使用最近从EJB2迁移到EJB3的无状态会话bean来处理大型遗留应用程序,并且我想使用依赖注入。不幸的是,在(IMO误导)尝试实现解耦时,所有实际的业务逻辑都在于会话bean转发其调用的“管理器”类。那些经理类经常使用其他EJB。

我能以某种方式使这些管理器类能够通过@Resource注入到EJB中,然后通过@EJB将其他EJB注入到它们中吗?

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

2 个答案:

答案 0 :(得分:1)

  

(...)所有实际业务逻辑都位于会话bean转发其调用的“管理器”类中。

这是EJB 2.x的一种非常常见的模式,允许在容器外部轻松地对“管理器”类进行单元测试,而不需要遵守EJB API。

  

我能以某种方式使这些管理器类能够通过@Resource注入到EJB中,然后通过@EJB将其他EJB注入到它们中吗?

Java EE 5不具备开箱即用功能。注入仅限于Java EE平台中定义的第一类构造,包括:

  • SessionContext object
  • DataSources object
  • UserTransaction
  • EntityManager interface
  • TimerService interface
  • 其他企业bean
  • 网络服务
  • 消息队列和主题
  • 资源适应的连接工厂
  • 环境条目仅限于String,Character,Byte,Short,Integer,Long,Boolean,Double和Float。

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

也许您可以尝试在GlassFish v2.1上部署Weld(JSR-199的RI)作为应用程序的一部分。我自己没有试验过,所以我无法确认。为了以防万一,也许看一下Chapter 18. Application servers and environments supported by Weld(GlassFish v2.1尚未经过测试,但并不意味着它不起作用)。

答案 1 :(得分:0)

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