是否应该将一个例如用作cdi应用程序作用域的bean包含jpa读/写的东西,还是应该总是使用EJB for db stuff?我在互联网上的某个地方读过cdi不应该包含数据库的东西。真的吗?CDI Beans和JPA Transactions
2
A
回答
3
一如既往,答案取决于......这取决于您的具体使用情况。
在Java EE中,我们使用@EJB
beans作为我们注入EntityManager
的位置,以便稍后在JPA实体上执行读/写操作。 为什么我们这样做?因为我们需要Transactions
。默认情况下,当您使用@Stateless
注解一个bean时,其中的所有方法都是Transactional
,您可以免费获取它。事务使您能够以原子方式更新多个表,它们将全部成功或失败。
例子: 在你的方法updateABC()
要更新表A,B,C,你想他们都成功或者该交易将滚动支持:
@Stateless
public class MyClass{
@PersistenceContext
EntityManager em;
public void updateABC(){
A a= em.find(A.class, aId);
//here update some fields on the entity "a"
B b= em.find(B.class, bId);
//here update some fields on the entity "b"
C c= em.find(C.class, cId);
//here update some fields on the entity "c"
}
}
,这是它。 .. 你完成了。你所有的更新都会奇迹般地坚持到数据库或者什么都没有。
你需要这样的东西吗?去寻找EJB。 你不需要?你想手动完成这项工作吗?然后创建自己的豆...
1
是的,你可以使用@Transactional
管理数据库上的东西,如果你在Java EE 7服务器上。
看一看的Javadoc:http://docs.oracle.com/javaee/7/api/javax/transaction/Transactional.html
例如,你可以有一个CDI豆,其doStuff
方法注解@Transactional
:
public MyCDIBean{
@Inject
private EntityManager m_entityManager;
@Transactional
public doStuff(){
// Here you are in a Transaction
m_entityManager.persist(...)
}
}
使用生产商生产EntityManager
:
public class EntityManagerProducer {
@PersistenceContext
private EntityManager em;
@Produces
@RequestScoped
public EntityManager getEntityManager() {
return em;
}
}
相关问题
- 1. weblogic是否支持CDI Beans?
- 2. GAE CDI jpa primefaces
- 3. CDI + JPA存储库
- 4. Spring Transactions和hibernate.current_session_context_class
- 5. JSF,CDI,EJB + JPA和事务处理
- 6. JavaFX与CDI,JPA和javafx-maven-plugin
- 7. 关于如何结合CDI beans的疑问:SessionScoped和RequestScoped
- 8. 我不能使用aries jpa/v2.0.0和transactions/v2.0.0
- 9. Spring4 +和Hibernate 4 Transactions
- 10. H2,JPA2,JBoss AS 7和Transactions
- 11. Sql Server 2005和Linq Transactions
- 12. jsp和java beans
- 13. jsf beans和ejb beans之间的区别
- 14. CDI Beans模块部署失败 - 部署webapp时出现LifecycleException
- 15. 黄瓜CDI注入不能在src/main/java中使用beans
- 16. 在抽象父类中注入常用的CDI beans
- 17. JAVA EE - EJB/CDI/JPA:异常处理
- 18. 执行JPA查询的CDI Bean
- 19. 交易错误JTA DATASOURCE JPA CDI
- 20. JPA CDI将DAO注入到实体
- 21. Jetty 8 + EJB 3.1 + JTA + CDI + JPA 2堆栈?
- 22. Doctrine Transactions Boundary
- 23. IDocumentSession.SaveChanges()vs Transactions
- 24. EF Transactions MSDTC?
- 25. Spring Instantiation和'unused beans'
- 26. Spring beans DTD和XMLNS
- 27. Spring Beans Profiles和OSGI
- 28. 如何使用JPA,EJB和CDI元素创建JBoss EAR项目
- 29. MySQL Transactions&Double Spending
- 30. Spring.NET,Quartz&Transactions
通常,单个句子在互联网上并不是一个好问题。你可以在问题中添加一些上下文吗? – halfer
好吧,我添加了更多,请看看 – Joey