Hay*_*nce 19 java jpa entitymanager
我目前在理解JPA的概念时遇到了问题.
我目前正在使用/开发最近的EclipseLink,Glassfish,Derby数据库来演示一个项目.
在我开发更大的图片之前,我需要绝对确定这个PersistingUnit如何在不同的范围内工作.
我有一堆servlet 3.0,目前在request.session对象中保存用户的相关实体类(同一个war文件中的所有内容).我目前正在使用EntityManagerFactory和UserTransaction注入的应用程序管理的EntityManager.它在我自己测试时运行顺畅.当2个人同时访问相同的实体时,会发生不同版本的实体.我希望使用托管bean跨越相同的WAR,如果可能的话,使用相同的持久性单元.
我已经阅读了http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html以及那些对我来说根本没有意义的范围的解释.
简而言之,应用程序和容器管理的EntityManagers的用途和区别是什么?
mpr*_*hat 20
当你说应用程序管理的事务时,它意味着它应该处理事务的代码.简而言之,它意味着:
你打电话:
entityManager.getTransaction().begin(); //to start a transaction
Run Code Online (Sandbox Code Playgroud)
如果成功,你将确保打电话
entityManager.getTranasaction().commit(); //to commit changes to database
Run Code Online (Sandbox Code Playgroud)
如果失败,您将确保致电:
entityManager.getTransaction().rollBack();
Run Code Online (Sandbox Code Playgroud)
现在假设你有一个容器,它知道何时调用begin(),commit()或者那是rollback()容器管理的事务.有人代表您处理交易.
你只需要指定它.
aqi*_*sao 12
容器管理事务(CMT)可以被视为一种声明性事务,在这种情况下,事务管理被委托给容器(通常是EJB容器),并且可以简化许多开发工作.
如果我们在具有EJB容器的Java EE环境中,我们可以直接使用CMT.
如果我们在Java SE环境或没有EJB容器的Java EE环境中,我们仍然可以利用CMT,一种方法是使用Spring,它使用AOP来实现声明式事务管理; 另一种方法是使用Guice,它使用PersistFilter来实现声明式事务.
在CMT中,容器(无论是EJB容器,Spring还是Guice)都将处理事务传播和提交/回滚内容;
应用程序管理事务(AMT)与CMT的不同之处在于我们需要在代码中以编程方式处理事务.
| 归档时间: |
|
| 查看次数: |
9341 次 |
| 最近记录: |