2011-10-25 3 views
0

리스너 내에 Thread.sleep (50000)을 넣었습니다.이를 증명하기 위해 데이터는 문자 그대로 DB에 50 초 동안 저장되지 않았습니다.DB가 업데이트되기 전에 실행 된 PostInsertEventListener

엔티티 ID (여기 BTW)를 웹 서비스에 전달하여 동일한 데이터베이스에 액세스하기 때문에 이것은 이상하고 오히려 실망 스럽습니다. 새 스레드에서 호출하지 않으면 데이터가 없으므로 웹 서비스에서 예외가 발생합니다.

나는 해키 방법을 적용하고, 전 아마도 약간의 시간 지연으로 새 스레드 내에서 호출을 만들지 만, 그 추한

하십시오, 도움이 될 것입니다 수 있습니다.

+0

PostInsert! = 커밋. 거래를 제대로 사용했는지 확인하십시오. 귀하의 경우 그것은 단지 삽입 후 DB 쿼리를 시도했지만 그 시점에서 커밋되지 않은 것으로 보입니다. – SirVaulterScoff

답변

1

삽입이 수신기 이후에 수행된다는 것과 관련이 없습니다. 트랜잭션의 커밋은 이후에 수행된다는 사실과 관련됩니다. 웹 서비스는 데이터를 삽입하는 곳으로 다른 트랜잭션을 사용하므로 삽입 트랜잭션이 커밋 될 때까지 삽입 된 데이터를 볼 수 없습니다.

원하는 작업을 수행하려면 2 단계 커밋이 필요합니다. JMS 대기열을 통해 웹 서비스를 호출하고 고유 한 XA 트랜잭션 관리자가 JMS 엔진과 데이터베이스를 모두 처리하는지 확인하십시오.

관련 문제