현재 일종의 작업을위한 JPA 엔티티가 있습니다. 일부 프로세스는 해당 테이블에 쓰고 예약 된 프로세스는 해당 작업을 수행하고 준비가되면 상태를 변경합니다. 작업 우선 순위를 정하고 실패 할 경우 빈도를 줄이려면 다시 시도해야합니다. 저의 환경은 Hibernate + MySQL + XA 트랜잭션을 통한 GlassFish 3 + JPA입니다. 중기 적으로 프로젝트는 GlassFish를 Spring 솔루션 (Jetty 정도 사용)으로 대체합니다.JPA를 사용하여 생산자 - 소비자를 작성하는 방법
어떻게 든이 작업이 이루어졌지만 실제로는 만족스럽지 않습니다. OptimisticLockExceptions을 얻었습니다. 일부 시점에서 제대로 트랜잭션을 처리하지 못했고, GlassFish의 JPA 타이머도 다소 엉망입니다. 당신은 가변 시간이 필요합니다.
나는 잘못된 도구를 사용하고 있으며, 성숙하고 안정적인 디자인을 사용해야한다고 말했습니다. JPA 엔티티를 사용하는 것이 무거운 것처럼 보이지만 원시 JDBC는 더 나쁜 선택처럼 보입니다. 물론 나는 무거운 라이브러리 의존성을 피하고 싶지만 어쩌면 내 특유의 문제에 대한 간단한 "통조림"솔루션을 간과 할 수있다.
[편집]
명확히하기 위해 : 나는 유스 케이스가 변경되지 않습니다 (심지어 더 이상 코드가없는), 난 그냥 "그것을하기 위해 몇 가지 일반적인 지침을 얻으려면 다음 번에 "오른쪽"(TM)을 누르십시오. ben75의 질문에 대답하려면 : 직원이 멀티 스레드 일 수도 있고, 작은 트랜잭션이 필요할 수도 있습니다.
작업자 프로세스가 단일 스레드입니까? 우선 순위를 정하는 사람 (작업자 또는 생산자 또는 ...)? 언제 당신이 그 OptimisticLocking (작업 실행의 끝에서 또는 ...)받을 수 있습니까? 한 작업의 전체 실행 중에 하나의 단일 트랜잭션이 있습니까? – ben75