Concurrency Glassfish-3.1.2-我可以将EntityManger注入无状态bean吗

Concurrency Glassfish-3.1.2-我可以将EntityManger注入无状态bean吗,concurrency,glassfish,stateless,Concurrency,Glassfish,Stateless,我在下面看到了这篇关于servlet和向其中注入EJB的博客。 作者是从标准的角度写作的 http://tamanmohamed.blogspot.ie/2012/03/jpa-thread-safety-when-injecting.html 将EJB 3有状态bean注入servlet实例字段不是线程安全的。同样,将带有@PersistenceContext的EntityManager注入servlet实例变量也不是线程安全的。EntityManager只是没有设计成线程安全的 不管怎样,

我在下面看到了这篇关于servlet和向其中注入EJB的博客。 作者是从标准的角度写作的

http://tamanmohamed.blogspot.ie/2012/03/jpa-thread-safety-when-injecting.html

将EJB 3有状态bean注入servlet实例字段不是线程安全的。同样,将带有@PersistenceContext的EntityManager注入servlet实例变量也不是线程安全的。EntityManager只是没有设计成线程安全的

不管怎样,我开始担心我和一位同事在办公室写的代码 Glassfish-3.1.2实施。见下文。 我认为它和我在杜克大学教程中看到的代码类似,所以应该没问题。 (其中FaceServlets使用@PersistenceContext EntityManager调用无状态请求bean。)

但是,我想我假设容器管理的EntityManager能够处理 通过许多servlet实例调用的无状态bean的大量并发调用

对于使用Oracle数据库的Glassfish-3.1.2,这是正确的假设吗?到目前为止,它似乎工作得很好,但在重载下可能不会

提前感谢您提供的任何见解。对不起,我是个新手。 菲奥娜


您的问题有些混乱,因为EntityManager实例的线程安全取决于您是使用
容器管理的实体管理器
还是
应用程序管理的实体管理器
。在第一种情况下

EntityManager实例的持久性上下文将自动 由容器传播到使用 单个Java事务API(JTA)中的EntityManager实例 交易

通过自动传播持久性上下文,应用程序组件不需要为了在单个事务中进行更改而相互传递对EntityManager实例的引用。JavaEE容器管理容器管理的实体管理器的生命周期

(参考)


尝试在persistence.xml文件中定义一个支持JTA的数据源,看看会发生什么。我并不热衷于将持久性上下文注入servlet,因为在开发JavaEE6Web应用程序时,有JSF,在大多数情况下,您不需要创建自己的servlet,而且我对这项技术也很陌生。然而,将持久性上下文注入到托管bean或企业bean(如无状态EJB)中,并使用JTA感知的数据源,是绝对好的,而且是线程安全的。

谢谢。因此,一旦数据源是“JTA感知”的,代码->Servlet调用无状态Bean,将引用注入EntityManager就可以了。是的,我签入了persistence.xml,它(事务类型为JTA)很棒。再次感谢。欢迎光临!如果你认为答案有用,你可以接受和/或投赞成票。我不能投反对票,因为它说我没有足够的声誉。很抱歉。不过我还是接受了!
Servlet
{
@EJB
private StatelessbeanBlah
:
}

@Stateless
StatelessBeanBlah
{
@PersistenceContext(unitname = "...")
private EntityManager em;