3

Seam 2.2、Jboss 6.1、休眠 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 排队向上并在查询处停止,因此当 deliveryFile() 函数完成时,它会同时完成所有 6 个 checkJobbs()。

即使我直接从数据库中选择,它也会被锁定并在 DeliveryFile() 完成后完成它的查询。

有没有办法解决这个问题,所以我可以在 DeliveryFile 执行时执行我的 checkJobb() ?

4

2 回答 2

0

不知道你想用上面的代码实现什么。如果您想通过加载中间的作业状态来检查作业是否已启动..这可能是不可能的。由于数据尚未提交,并且您在其他功能中使用了不同的会话..您可能无法看到数据。

只有状态的最后一个值将提交到数据库。

于 2012-04-13T14:27:11.097 回答
0

READ_COMMITTED_SNAPSHOT 改为普通的 READ_COMMITTED 隔离。

ALTER DATABASE <dbname> SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
ALTER DATABASE <dbname> SET READ_COMMITTED_SNAPSHOT ON; 
ALTER DATABASE <dbname> SET MULTI_USER; 
于 2012-04-13T21:03:23.430 回答