액세스 인텐트 문제점 해결 팁

액세스 인텐트를 포함한 다음 자주 묻는 질문에 응답합니다.

적용된 액세스 정책이 없는 경우 Oracle 데이터베이스 실패

액세스 인텐트 정책이 적용되지 않고 애플리케이션이 DB2 데이터베이스로 실행되지만 다음 메시지로 Oracle 데이터베이스로 실패합니다. com.ibm.ws.ejbpersistence.utilpm.PersistenceManagerException: PMGR1001E: No such DataAccessSpec :FindAllCustomers. 백엔드 데이터 저장소는 다음 AccessIntent에서 필요한 SQLStatement를 지원하지 않습니다. (pessimistic update-weakestLockAtLoad)(collections: transaction/25) (resource manager prefetch: 0) (AccessIntentImpl@d23690a).

액세스 인텐트를 구성하지 않는 경우, 기본 액세스 인텐트 정책(wsPessimisticUpdate-WeakestLockAtLoad) 하에 사용자 데이터 모두에 액세스합니다. DB2에서 가장 약한 잠금은 공유입니다. 그러나 Oracle 데이터베이스에서 가장 약한 잠금은 업데이트입니다. SQL 조회가 FOR UPDATE 절을 포함해야 함을 의미합니다. 이 문제를 피하려면, 낙관적인 동시성을 지원하는 액세스 인텐트 정책을 적용하려고 시도하십시오.

파인더 메소드를 호출하면 런타임 시 InconsistentAccessIntentException 표시

메소드 레벨 액세스 인텐트 정책을 사용하여 Bean 인스턴스가 로드되는 방법에 대해 추가 제어를 적용하면 발생할 수 있습니다. 이 예외는 엔티티 Bean이 이전에 동일 트랜잭션에 로드되었음을 표시합니다. 액세스 인텐트 정책 X가 적용된 Bean 인스턴스를 리턴한 멀티파인더 메소드를 호출하면 발생할 수 있습니다. 이제 액세스 인텐트 Y가 적용된 findByPrimaryKey 메소드를 호출하여 두 번째 Bean을 다시 로드하려고 합니다. 두 메소드에는 적용한 동일한 액세스 인텐트 정책이 있어야 합니다.

마찬가지로 엔티티가 파인더에 구성된 액세스 인텐트 정책을 사용하여 트랜잭션에 다시 로드되면, 엔티티의 기본 액세스 인텐트를 사용하여 로드하도록 구성된 엔티티 Bean을 리턴하는 CMR(Container-Managed Relationship) 액세서 메소드가 호출되었을 수 있습니다.

이 문제를 피하려면, 사용자 코드는 다른 액세스 인텐트 정책이 적용된 동일 트랜잭션 내 동일한 Bean 인스턴스를 두 번 로드하지 않음을 확인합니다. 절대적으로 필요하지 않는 한 메소드 레벨 액세스 인텐트를 사용하지 마십시오.

InconsistentAccessIntentException은 두 Bean이 있는 CMR(Container-Managed Relationship)에 표시됩니다.

CMR에 두 Bean이 있습니다. findByPrimaryKey 메소드는 첫 번째 Bean에서 호출된 다음 getBean2 메소드가 호출되며 CMR 액세서 메소드가 호출되고, 리턴된 인스턴스에서 InconsistentAccessIntentException이 표시됩니다.

미리 읽기를 사용할 수 있습니다. 첫 번째 Bean을 로드하는 경우, 두 번째 Bean은 첫 번째 Bean에 대한 파인더 메소드에 적용된 액세스 인텐트 정책 하에 로드되게 할 수 있습니다. 그러나 다른 액세스 인텐트 정책을 사용하여 CMR 액세서 메소드를 첫 번째 Bean에서 두 번째로 구성했습니다. CMR 액세서 메소드는 변형된 파인더 메소드입니다. 런타임 환경은 지속적 저장소에서 이미 읽은 인스턴스에 대한 액세스 인텐트를 변경하려고 하는 것처럼 동작합니다.

이 문제를 피하려면, 미리 읽기 힌트에 구성된 Bean은 미리 읽기 힌트가 적용된 Bean과 동일한 액세스 인텐트 정책으로 로드되도록 모두 구동됩니다.

두 번째 Bean에 대한 일 대 다 관계의 Bean은 오류를 표시합니다.

두 번째 Bean의 인스턴스가 첫 번째 Bean의 콜렉션에 추가되면 두 번째 Bean에 대한 일 대 다 관계의 Bean은 UpdateCannotProceedWithIntegrityException 오류를 표시합니다.

두 번째 Bean의 인스턴스가 첫 번째 Bean의 콜렉션에 추가되면 두 번째 Bean에 대한 일 대 다 관계의 Bean은 UpdateCannotProceedWithIntegrityException 오류를 표시합니다. 첫 번째 Bean은 적용된 비관적 업데이트 목적 정책이 있습니다.

두 번째 Bean은 적용된 읽기 목적 정책이 있을 수 있습니다. 첫 번째 Bean의 콜렉션에 두 번째 Bean을 추가하면, 첫 번째 Bean의 상태를 업데이트하지 않으며 내재적으로 두 번째 Bean의 상태를 수정합니다. 두 번째 Bean은 첫 번째 Bean에 대한 외부 키를 포함하며, 이는 수정됩니다.

이 문제를 피하려면, 런타임 시 관계를 변경할 것으로 예상되는 경우 관계의 양쪽 종료점에 적용된 업데이트 목적 정책이 있어야 합니다.


주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rejb_axifaq
파일 이름:rejb_axifaq.html