Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EJB3.1@EJB注入POJO_Java_Ejb_Java Ee 6_Ejb 3.1 - Fatal编程技术网

Java EJB3.1@EJB注入POJO

Java EJB3.1@EJB注入POJO,java,ejb,java-ee-6,ejb-3.1,Java,Ejb,Java Ee 6,Ejb 3.1,有了新的EJB3.1规范,可以将EJB注入pojo吗?我知道在EJB3.0中,@EJB注释可以用于注入EJB,但这在简单的POJO上不起作用 如果不是,我必须在JNDI中查找bean,因为我知道您不能简单地使用new关键字。是的,使用JNDI查找 因为您的POJO是由您创建的(我假设),所以容器不负责注入依赖项。新的EJB规范(3.1)添加了为EJB指定全局JNDI名称的功能。这意味着您可以在任何地方的任何bean中使用它们 但是,您必须执行显式JNDI查找,因为EJB3.1容器不知道您的POJ

有了新的EJB3.1规范,可以将EJB注入pojo吗?我知道在EJB3.0中,@EJB注释可以用于注入EJB,但这在简单的POJO上不起作用

如果不是,我必须在JNDI中查找bean,因为我知道您不能简单地使用new关键字。

是的,使用JNDI查找

因为您的POJO是由您创建的(我假设),所以容器不负责注入依赖项。

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

但是,您必须执行显式JNDI查找,因为EJB3.1容器不知道您的POJO

唯一的例外,我猜不适用于您,是如果您的POJO实际上是一个应用程序客户机,在这种情况下,如果包含EJB的字段是静态的,您可以对其应用@EJB注释。如果这是您的情况,那么您应该查看整个JavaEE5规范中的应用程序客户机规则

最后,包含JSR-299的JavaEE6可能允许您描述的事情以某种方式发生;我不知道规格,所以不能评论它

我希望这些都能有所帮助。

我也不知道我是否能。有关更多详细信息,请参阅(JSR299参考实现)文档

但您可以在存储库或工厂内手动执行依赖项注入,如下所示:

@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;
  }

}
如果您有许多应该执行注入的方法,那么可以使用拦截器

有了新的EJB3.1规范,可以将EJB注入pojo吗?我知道在EJB3.0中,@EJB注释可以用于注入EJB,但这在简单的POJO上不起作用

如果您使用JSR-299(Java上下文和依赖项注入),也就是说,如果您的POJO是CDI管理的bean,则可以将EJB注入到POJO中。在这种情况下,您可以执行以下操作:

@Inject MyEJB service

但这不是EJB3.1的特性,它来自CDI。如果您没有使用CDI,则必须进行查找。

您使用CDI吗?在早期版本的JavaEE(甚至J2EE)中,从任何地方执行查找都是可能的。EJB3.1并没有改变这一点。JavaEE6中的新功能是,您可以使用CDI使任何东西成为托管bean,并且还可以从CDIBeans中的注入中获益。他们也没有要求不是应用程序客户端的远程客户端能够在JNDI中查找任何内容。并非所有Java EE 5的实现都允许在JNDI树中发布@Local bean。据我所知,这是规范中的一个可选特性。WebLogic 11g没有这种功能,因此在这种情况下,我们将注入的资源作为构造函数参数传递给POJO。