2012-04-13 3 views
3

심 2.2, 제이 보스 6.1, 3.5.6 최대 절전 모드 및은 mSQL 서버 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(); 


    } 

난 checkJobb에 deliveryFile() 함수가 실행되고, 그래서 만약 10 초마다 폴링있다.

checkJobb는 upp를 uup 대기하고 쿼리에서 중지하므로 deliveryFile() 함수가 완료되면 6 개의 checkJobbs()가 모두 동시에 완료됩니다.

데이터베이스에서 직접 선택하더라도 잠김되어 deliveryFile()이 완료되면 쿼리가 완료됩니다.

deliveryFile이 실행되는 동안 checkJobb()를 수행 할 수 있도록 이것을 해결할 수 있습니까?

답변

0

정상적인 READ_COMMITTED 격리 대신 READ_COMMITTED_SNAPSHOT

0

위의 코드를 사용하여 달성하고자하는 것이 확실하지 않습니다. 작업 상태를 중간에로드하여 작업이 시작되었는지 여부를 확인하려면 가능하지 않을 수 있습니다. 데이터가 아직 커밋되지 않았으므로 다른 함수에서 다른 세션을 사용하고 있으므로 데이터를 볼 수 없을 수도 있습니다.

상태의 마지막 값만 데이터베이스에 커밋됩니다.

+0

deliverFile() 함수가 실행되는 동안 데이터베이스를 선택할 수 있기를 원하지만 모든 쿼리를 수행 할 수 없도록 데이터베이스를 잠그고 있습니다. deliver 파일이 끝날 때까지 일시 중단됩니다. – Trind