Dependency injection “我可以任意设置类吗?”;可注射;在JavaEE中?

Dependency injection “我可以任意设置类吗?”;可注射;在JavaEE中?,dependency-injection,jakarta-ee,glassfish,Dependency Injection,Jakarta Ee,Glassfish,我正在使用最近从EJB2迁移到EJB3的无状态会话bean开发一个大型遗留应用程序,我想使用依赖注入。不幸的是,在(IMO误导的)实现解耦的尝试中,所有实际的业务逻辑都存在于会话bean将其调用转发到的“管理器”类中。这些管理器类通常使用其他EJB 我是否可以使这些管理器类能够通过@Resource注入EJB,然后通过@EJB注入其他EJB 应用程序必须在glassfish 2.1上运行 (…)所有实际的业务逻辑都存在于会话bean将其调用转发到的“管理器”类中 这是EJB2.x中非常常见的模式

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

我是否可以使这些管理器类能够通过
@Resource
注入EJB,然后通过
@EJB
注入其他EJB

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

(…)所有实际的业务逻辑都存在于会话bean将其调用转发到的“管理器”类中

这是EJB2.x中非常常见的模式,允许在容器之外轻松地对“管理器”类进行单元测试,而无需遵守EJBAPI

我是否可以让这些管理器类能够通过@Resource注入EJB,然后让其他EJB通过@EJB注入它们

JavaEE5不是现成的。注入仅限于Java EE平台中定义的第一类构造,包括:

  • SessionContext
    object
  • 数据源
    对象
  • UserTransaction
  • EntityManager
    界面
  • TimerService
    接口
  • 其他企业bean
  • 网络服务
  • 消息队列和主题
  • 资源适配器的连接工厂
  • 环境项限制为字符串、字符、字节、短、整数、长、布尔、双精度和浮点
在JavaEE6中,可以在EJB中使用CDI()和
@Inject
注释来注入管理者,也可以在管理者中注入EJB

也许您可以尝试将(JSR-199的RI)作为应用程序的一部分部署到GlassFish v2.1上。我自己没有做过实验,所以我无法证实任何事情。以防万一,不妨看看(GlassFish v2.1还没有经过测试,但这并不意味着它不工作)

(…)所有实际的业务逻辑都存在于会话bean将其调用转发到的“管理器”类中

这是EJB2.x中非常常见的模式,允许在容器之外轻松地对“管理器”类进行单元测试,而无需遵守EJBAPI

我是否可以让这些管理器类能够通过@Resource注入EJB,然后让其他EJB通过@EJB注入它们

JavaEE5不是现成的。注入仅限于Java EE平台中定义的第一类构造,包括:

  • SessionContext
    object
  • 数据源
    对象
  • UserTransaction
  • EntityManager
    界面
  • TimerService
    接口
  • 其他企业bean
  • 网络服务
  • 消息队列和主题
  • 资源适配器的连接工厂
  • 环境项限制为字符串、字符、字节、短、整数、长、布尔、双精度和浮点
在JavaEE6中,可以在EJB中使用CDI()和
@Inject
注释来注入管理者,也可以在管理者中注入EJB


也许您可以尝试将(JSR-199的RI)作为应用程序的一部分部署到GlassFish v2.1上。我自己没有做过实验,所以我无法证实任何事情。以防万一,不妨看看(GlassFish v2.1尚未经过测试,但这并不意味着它不工作)。

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

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

呃,这就是我担心的。我将研究Weld,但这是一个公司环境(这也是Glassfish 2的原因),这可能是不允许的。至少你有Glassfish,所以升级至少是可能的:)Weld可以在servlet 2.5环境中运行。呃,这就是我担心的。将研究Weld,但这是一个公司环境(这也是Glassfish 2的原因),可能是不允许的。至少您有Glassfish,所以升级至少是可能的:)Weld可以在servlet 2.5环境中运行。大公司可能对软件更改(包括升级)非常保守。有一个允许你使用的“认可”软件的列表(如我的情况)并不少见,而且要想进入这个列表需要一系列的测试和试用,这些测试和试用很容易需要一两年的时间(90%的时间是纯粹的Beaurrocratic开销)。当然,只有当有人有足够的精力和预算来度过难关时,这种情况才会发生。谢谢迈克尔。我想知道当前3.x版本中缺少集群是否是一个问题?此外,我最近还看到许多公司采用双appserver策略,将GlassFish作为一种更灵活、约束更少的解决方案使用(因此验证其使用的官僚作风更少)。大公司可能对软件更改(包括升级)极为保守。有一个允许你使用的“认可”软件的列表(如我的情况)并不少见,而且要想进入这个列表需要一系列的测试和试用,这些测试和试用很容易需要一两年的时间(90%的时间是纯粹的Beaurrocratic开销)。当然,只有当有人有足够的精力和预算来度过难关时,这种情况才会发生。谢谢迈克尔。我赢了