Jakarta ee 检查JTA事务是否已成功提交
是否有一种方法可以检查当前事务是否在JPA实体侦听器中提交,如下所示Jakarta ee 检查JTA事务是否已成功提交,jakarta-ee,jpa,ejb,eclipselink,entitylisteners,Jakarta Ee,Jpa,Ejb,Eclipselink,Entitylisteners,是否有一种方法可以检查当前事务是否在JPA实体侦听器中提交,如下所示 @ApplicationScoped public class EntityListener { @Inject private Event<EntityEvent> event; @Inject private EntityManager entityManager; @Resource private UserTransaction userTransactio
@ApplicationScoped
public class EntityListener {
@Inject
private Event<EntityEvent> event;
@Inject
private EntityManager entityManager;
@Resource
private UserTransaction userTransaction;
@PostPersist
@PostUpdate
@PostRemove
public void onChange(Entity entity) {
// This is only a piece of pseudo code.
if (userTransaction.isComitted()) {
// Do something.
}
}
}
@ApplicationScoped
公共类EntityListener{
@注入
私人活动;
@注入
私人实体管理者实体管理者;
@资源
私有用户事务;
@后复印机
@假想
@移除后
变更后的公共作废(实体){
//这只是一段伪代码。
if(userTransaction.iscmelepted()){
//做点什么。
}
}
}
JPA2.1中的实体监听器被视为依赖于CDI注入的CDIBean,实体监听器中提供了事务上下文和CDI。因此,这些注入在实体侦听器中是可能的(有或没有注释@ApplicationScoped
)。JPA2.1规范规定:
持久性提供程序仅在支持CDI注入时才需要
进入JavaEE容器环境中的实体侦听器。如果CDI是
如果未启用,则持久性提供程序不得调用实体侦听器
这取决于CDI注射
从JavaEE环境中调用时,回调侦听器
对于实体,共享调用对象的企业命名上下文
组件中调用实体回调方法
调用组件的事务和安全上下文
调用回调方法的时间
例如,如果事务提交是由于正常的
使用事务终止会话bean业务方法
属性RequiresNew
,PostPersist
和PostRemove
回调
在命名上下文、事务上下文和
该组件的安全上下文
是否有一种方法可以知道事务是否在JPA实体侦听器中成功提交,从而可以相应地执行不同的操作或根本不执行任何操作
我希望事务不会在提交发生时完全完成,因此,应该有一种方法可以查看是否发生提交,我正在寻找一种模拟事务范围事件的方法,即在事务结束时触发的事件,给出事务的状态,无论事务是提交还是回滚
使用具有EclipseLink 2.6.0(JPA 2.1)的GlassFish服务器4.1/Java EE 7。请参阅
10.4.5. 事务观察方法
事务性观察者方法是一种观察者方法,它在运行期间接收事件通知
交易的完成前或完成后阶段,其中
事件被触发。如果事件发生时没有事务正在进行
一旦被解雇,他们将与其他观察员同时收到通知
- 在事务的完成前阶段调用完成前观察者方法
- 在事务的完成后阶段调用完成后观察者方法
- 仅当事务
成功完成 - 仅当事务失败时,才会在事务的完成后阶段调用失败后观察者方法
javax.enterprise.event.TransactionPhase
标识
事务性观察者方法的类型:
public enum TransactionPhase {
IN_PROGRESS,
BEFORE_COMPLETION,
AFTER_COMPLETION,
AFTER_FAILURE,
AFTER_SUCCESS
}
事务性观察者方法可以通过指定
正在进行中的以外的值
void onDocumentUpdate(@Observes(during=AFTER_SUCCESS) @Updated Document doc) { ... }
请参阅
10.4.5. 事务观察方法
事务性观察者方法是一种观察者方法,它在运行期间接收事件通知
交易的完成前或完成后阶段,其中
事件被触发。如果事件发生时没有事务正在进行
一旦被解雇,他们将与其他观察员同时收到通知
- 在事务的完成前阶段调用完成前观察者方法
- 在事务的完成后阶段调用完成后观察者方法
- 仅当事务
成功完成
- 仅当事务失败时,才会在事务的完成后阶段调用失败后观察者方法
枚举javax.enterprise.event.TransactionPhase
标识
事务性观察者方法的类型:
public enum TransactionPhase {
IN_PROGRESS,
BEFORE_COMPLETION,
AFTER_COMPLETION,
AFTER_FAILURE,
AFTER_SUCCESS
}
事务性观察者方法可以通过指定
正在进行中的以外的值
void onDocumentUpdate(@Observes(during=AFTER_SUCCESS) @Updated Document doc) { ... }