2011-10-05 2 views
2

Grails 1.3.7쓰기 작업은 읽기 전용 모드 (FlushMode.MANUAL)로 허용되지 않습니다.

2 명의 사용자를 병합하는 서비스 방법이 있습니다. 데이터 양이 많아서 읽기, 업데이트 및 쓰는 데 꽤 많은 부분이 있습니다. 우리는 서비스에서 transactional = true를 갖는다. Grails의 기본 FlushMode가 AUTO라는 것을 알고 있습니다. 그리고 그 오류 메시지가 의미하는 것을 이해합니다.

그러나 로컬에서는 발생하지 않으며 준비 환경에서는 발생하지 않습니다. 모두 동일한 권한 (암호는 예외 임)으로 동일한 버전의 MySQL을 실행합니다.

기본 FlushMode 동작을 변경할 수 있음을 알고 있지만 프로덕션 환경 이외의 환경에서 동작을 복제 할 수 없으므로 주저합니다. 지금 당장 FlushMode와 관련이없는 문제가 발생할 수 있는지 궁금합니다.

완전 일치 오류 메시지는 다음과 같습니다

org.springframework.dao.InvalidDataAccessApiUsageException

: 쓰기 작업은 읽기 전용 모드 (FlushMode.MANUAL)에서 허용되지 않습니다 FlushMode.COMMIT에 세션을 켜고/자동 또는 트랜잭션 정의에서 'readOnly'마커 을 제거하십시오.

+0

일부 코드 및/또는 오류 메시지를 표시 할 수 있습니까? –

+0

민감한 클라이언트 정보로 인해 많은 정리 작업을하지 않고 코드를 표시 할 수 없습니다. 나는 그것에 대해 연구 할 것이지만, 질문과 기본적으로 같은 오류 메시지를 포함하도록 내 질문을 편집했습니다. – Gregg

+0

Gregg - 두 번째 수준의 캐시가 읽기 전용으로 구성되어 있습니까? 어떤 이유로 나는 내가 읽기 전용 캐시를 구성한 도메인 객체를 수정하려고 할 때 이와 비슷한 것을 보았다고 생각합니다. – proflux

답변

0

내 Grails 1.3.7 응용 프로그램에서도 이와 유사한 오류가 표시됩니다. 내 경우, 백 엔드 DB에 CannotAcquireLockException을 던지는 잠금 경합 문제가있었습니다. 이 중 하나를 치면 정확한 InvalidDataAccessApiUsageExceptions를 볼 수 있습니다 (우연히도 dev 환경이나 테스트 환경이 아닌 우리 환경에서만 발생했습니다)

prod DB 사용자가 가지고 있는지 확인하십시오 MySQL의 잠금 기능에 액세스하고 실제 근원이 될 수있는 다른 데이터베이스 관련 예외를 확인하십시오.

관련 문제