Seam 2.2、Jboss 6.1、hibernate 3.5.6、およびMSQL Server 2008
このような機能があります。
public void deliverFile() {
EntityManager jobbEntityManager = (EntityManager)Component.getInstance("jobbEntityManager");
JobbStatusInterface jobbStatus = new JobbStatus();
jobbStatus.setStatus(PluginStatus.INITIATED);
jobbEntityManager.persist(jobbStatus);
/**
Code here to save a file that takes a minutes
**/
jobbStatus.setStatus(PluginStatus.DONE);
jobbEntityManager.flush();
}
public void checkJobb(){
EntityManager jobbEntityManager = (EntityManager)Component.getInstance("jobbEntityManager");
jobbEntityManager.createQuery("from JobbStatus", JobbStatus.class).getResultList();
}
10秒ごとにcheckJobbをポーリングしているので、deliveryFile()関数が実行された場合。
checkJobbはuppをキューに入れてクエリで停止するため、deliveryFile()関数が終了すると、6つすべてのcheckJobbs()が一度に終了します。
データベースから直接選択しても、それはロックされ、deliveryFile()が実行された後にクエリを終了します。
deliveryFileの実行中にcheckJobb()を実行できるように、これを気に入ってもらう方法はありますか?