有了新的EJB 3.1规格,是否可以将EJB注入POJO?我知道在EJB 3.0中,@EJB注释可用于注入EJB,但这对简单的Pojos不起作用。

如果不是这样,我必须在jndi中查看bean,因为我知道您不能简单地使用新关键字。

有帮助吗?

解决方案

是的,使用JNDI查找。

由于您的POJO是由您创建的(我假设),因此容器对注入依赖项不承担任何责任。

其他提示

有了新的EJB 3.1规格,是否可以将EJB注入POJO?我知道在EJB 3.0中,@EJB注释可用于注入EJB,但这对简单的Pojos不起作用。

将EJB注入POJO是可能的 如果 您使用JSR-299(Java ConTexts和 d埃及 noject)IE如果您的POJO是CDI托管豆。在这种情况下,您可以做:

@Inject MyEJB service

但这不是EJB 3.1功能,它来自CDI。而且,如果您不使用CDI,则必须进行查找。

新的EJB规格(3.1)添加了为EJBS指定全局JNDI名称的能力。这意味着您可以在任何地方的任何豆类中使用它们。

您必须进行明确的JNDI查找,但是,EJB 3.1容器不知道您的POJO。

我猜想不适用于您的唯一例外是,如果您的POJO确实是应用程序客户端,在这种情况下,将包含EJB的字段是静态的,则可以将@EJB注释应用于它。如果是您的情况,则应在总体Java EE 5规范中查看应用程序客户端规则。

最后,Java EE 6(其中包括JSR-299)可能会以某种方式发生您所描述的事情。我还不知道规格,因此无法对其发表评论。

我希望这一切会有所帮助。

我也想知道我是否可以 将EJB注入非托管对象. 。看到 焊接 (JSR 299参考实施)文档以获取更多详细信息。

但是您可以在存储库或工厂中手动执行依赖注入:

@Stateless
public PojoRespository {

  @Inject
  ResourceForPojos resource;
  @PersistenceContext
  private EntityManager em;

  public Pojo findById(Object id) {
    Pojo p = (Pojo) em.find(Pojo.class, id);
    p.setResource(resource); // injects resource
    return p;
  }

}

如果您有许多应进行注射的方法,则可以使用拦截器。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top