Java EJB3.1@EJB注入POJO
有了新的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参考实现)文档 但您可以在存储库或工厂内手动执行依赖项注入,如下所示: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
@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。