Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 检查JTA事务是否已成功提交_Jakarta Ee_Jpa_Ejb_Eclipselink_Entitylisteners - Fatal编程技术网

Jakarta ee 检查JTA事务是否已成功提交

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

是否有一种方法可以检查当前事务是否在JPA实体侦听器中提交,如下所示

@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) { ... }