Jakarta ee CDI事务管理:@Transactional是如何工作的?
在会话作用域中插入实体管理器的简单CDI bean:Jakarta ee CDI事务管理:@Transactional是如何工作的?,jakarta-ee,jpa,transactions,ejb,cdi,Jakarta Ee,Jpa,Transactions,Ejb,Cdi,在会话作用域中插入实体管理器的简单CDI bean: @Named("myBean") @SessionScoped public class MyBean implements Serializable { private static final long serialVersionUID = 1L; @Inject EntityManager em; ... @Transactional private void testInsert()
@Named("myBean")
@SessionScoped
public class MyBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
EntityManager em;
...
@Transactional
private void testInsert() {
long t = System.currentTimeMillis();
for (int i=1; i<50000; i++) {
create(i);
}
System.out.println("Time: " + Long.toString(System.currentTimeMillis()-t));
}
private void create(int i) {
Project p = new Project("Project " + i);
em.persist(p);
}
}
@Named(“myBean”)
@会议范围
公共类MyBean实现了可序列化{
私有静态最终长serialVersionUID=1L;
@注入
实体管理器;
...
@交易的
私有无效测试集(){
long t=System.currentTimeMillis();
for(int i=1;i@javax.transaction.Transactional
是Java EE 7中引入的拦截器绑定。CDI为您的bean注入的代理将拦截带注释的方法调用,以将它们包装在事务中
拦截器不适用于私有方法-我想这是您的示例的主要问题。这里只是一个次要问题。是否有一种特殊的方法来拦截容器管理的所有事务?对于我的应用程序,我需要在每个事务的开始处注入自定义SQL查询。我找不到任何与此相关的文档这是我的问候。