Hibernate Lock table

Refresh

December 2018

Views

1.1k time

3

Seam 2.2 , Jboss 6.1, hibernate 3.5.6 and MSQL Server 2008

and have a function like this.

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();


    }

i have a poll on checkJobb every 10 seconds so if the deliveryFile() function is executed.

the checkJobb queues upp and stops at the query, so when deliveryFile() functions finishes it finish all 6 checkJobbs() at once.

Even if i select from the database directly it is locked and finishes it's query after deliveryFile() is done.

Is there anyway to solove this so i can do my checkJobb() while deliveryFile is executing?

2 answers

0

Не уверен, что вы хотите достичь, используя код выше. Если вы хотите, чтобы проверить, будет ли инициирована работа по загрузке статус задания в-between..it может оказаться невозможным. Поскольку данные еще не совершали, и вы используете другую сессию в другой function..you не может быть в состоянии видеть данные.

Только последнее значение статуса будет фиксироваться в базе данных.

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;