2013-10-02 2 views
0

5 분마다 실행되는 크론 작업이 있습니다. cron 작업은 서비스에서 메시지를 가져 와서 데이터베이스에 저장합니다.자바 동기화 된 크론 작업 및 Ajax 요청

JSP 페이지에서 AJAX 요청이 1 분마다 실행 중입니다. 시간을 기준으로 데이터베이스에서 새 메시지를 확인합니다.

이제 내 문제는 언젠가는이 두 프로세스가 교차되어 일부 메시지가 AJAX 요청에 의해 반입되지 않기 때문입니다.

이 cron 작업을 동기화 된 것으로 만들었지 만 여전히 작동하지 않습니다.

내가 필요한 것은 ... cron 작업이 실행될 때 AJAX HTTP 요청을 유지해야합니다.

안내하십시오.

+0

아약스 푸시 엔진 APE 또는 혜성 당신을 도울 수 있습니다

자세한 내용은 이쪽을 봐주세요. –

+0

문제는 cron 작업이 실행되는 동안 ajax 요청을 일시 중지해야합니다. –

답변

0

데이터베이스에 읽기 및 쓰기를 동기화하려고합니다. cron 작업이 해당 테이블에 삽입되는 것과 동시에 AJAX 프로세스가 메시지 테이블에서 읽는 것을 원하지 않습니다.

팬텀 Reads 문제가있는 것 같습니다. 데이터베이스 트랜잭션을 사용하고 특히 적절한 수준의 트랜잭션 격리를 정의하면이 문제를 피할 수 있습니다. 팬텀 읽기는 격리 수준 TRANSACTION_SERIALIZABLE에서만 차단됩니다.

나는 AJAX 요청이 jdbc를 사용하여 데이터베이스의 메시지를 찾는 Java 구성 요소로 이동한다고 생각합니다. 데이터베이스 트랜잭션을 특별히 관리하지 않은 경우 JDBC의 기본 트랜잭션 격리 수준은 데이터베이스에 따라 다릅니다.

트랜잭션 격리 수준을 TRANSACTION_SERIALIZABLE로 설정하십시오.

Connection connection = DriverManager.getConnection(jdbcUrl, user, password); 
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); 

일부 jdbc 드라이버는 모든 수준의 트랜잭션 격리를 지원하지 않습니다. http://docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html