我有一个CDI谈话范围的操作类,我还制作了一个状态ful EJB来保存对象在整个谈话生命周期中的状态。
由于操作类是EJB,因此默认情况下所有方法都将具有事务性,但我故意不想这样做。我只想让操作类的一个单一方法具有事务性,在其中仅执行数据库持续性任务。因此,我使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)对该单一方法进行注释。并且操作类带有@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)注释。
当我从同一操作类的其他处理程序方法中调用事务方法时,没有启动任何事务。
以下是代码示例。
由于操作类是EJB,因此默认情况下所有方法都将具有事务性,但我故意不想这样做。我只想让操作类的一个单一方法具有事务性,在其中仅执行数据库持续性任务。因此,我使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)对该单一方法进行注释。并且操作类带有@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)注释。
当我从同一操作类的其他处理程序方法中调用事务方法时,没有启动任何事务。
以下是代码示例。
@Stateful
@Named
@ConversationScoped
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class MyAction implements Serializable {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
........
........
........
public String handlerMethod1() {
// do some staffs.
persist();
return "view";
}
public String handlerMethod2() {
// do some staffs.
persist();
}
.......
.......
.......
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void persist() {
// save objects.
em.flush();
}
}
我在使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)注释了persist()方法,但是调用该方法时并没有启动事务,为什么呢?
请帮助我解决这个问题。