0

ジョブをトリガーし、インポート/エクスポート処理を行うタイマーがあります。しかし、コミットすると、タイトルにエラーが発生します。すでにいくつかのソリューションを試しました:

1.) 2 つのクラスを作成:

@Stateless
public class MyBean { 
    @Inject
    @JpaForJobs
    private EntityManager em;

    @Inject
    private MyService1 service1;

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void migrate(...) {
        service1.create(...);
    }
}
@Startup
@Singleton
public class MyService1 implements Job {
    @Resource
    TimerService timerService;

    @Inject
    private MyBean myBean;

    @Timeout
    public void trigger(Timer timer) {
        migrate();
    }

    private void migrate() {
        myBean.migrate();
    }
}

時々機能しますが、関係が複雑になると失敗します。例 顧客には生徒がいて、両親には猫がいます。

Bean 管理のトランザクションも試しましたが、同じ結末です:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MyBean { 
    @Inject
    @JpaForJobs
    private EntityManager em;

    @Inject
    private MyService1 service1;

    public void migrate(...) {
        utx.begin();
        service1.create(...);
        utx.commit();
    }
}
@Startup
@Singleton
public class MyService1 implements Job {
    @Resource
    TimerService timerService;

    @Inject
    private MyBean myBean;

    @Timeout
    public void trigger(Timer timer) {
        migrate();
    }

    private void migrate() {
        myBean.migrate();
    }
}

アイデアや提案はありますか?ありがとう。

4

1 に答える 1