我正在使用最近从EJB2迁移到EJB3的无状态会话bean来处理大型遗留应用程序,并且我想使用依赖注入。不幸的是,在(IMO误导)尝试实现解耦时,所有实际的业务逻辑都在于会话bean转发其调用的“管理器”类。那些经理类经常使用其他EJB。
我能以某种方式使这些管理器类能够通过@Resource
注入到EJB中,然后通过@EJB
将其他EJB注入到它们中吗?
应用程序必须在glassfish 2.1上运行。
答案 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 在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的建议听起来可能是最优雅的方法;) 我很想知道什么阻止了移动到更新的版本(不是说没有理由,只是想知道问题在这里)。