미리 읽기 설계 힌트
미리 읽기 설계를 사용하면 애플리케이션은 하나의 조회에서 트랜잭션에 대해 CMP(Container-Managed Persistence) Bean의 작업 세트를 검색하여 데이터베이스 왕복 수를 최소화할 수 있습니다. 미리 읽기는 요청한 CMP Bean 활성화 및 관련된 Bean에 대한 데이터 캐시를 수행하며 이를 통해 애플리케이션이 다음에 가장 필요로 할 Bean에 대해 데이터를 표시할 수 있습니다. 미리 읽기 힌트는 읽으려는 관련 Bean의 표시입니다. 힌트는 요청된 Bean 유형에 대한 findByPrimaryKey 메소드와 연관되며 이는 EJB 2.x 준수 CMP 엔티티 Bean이어야 합니다.
미리 읽기 힌트는 문자열 양식을 사용합니다. 문자열을 제공할 필요는 없으며 마법사가 Bean에 대해 정의된 CMR(Container-managed Relationship)을 기반으로 이를 생성합니다. 이 절에서 제공되는 예는 정보 보충을 위한 것입니다. CMP Bean 유형 A에 Bean A의 인스턴스를 리턴하는 파인더 메소드가 있다고 가정해 보십시오. 이 메소드에 대한 미리 읽기 힌트가 다음 RelB.RelC; RelD 표기법을 사용하여 지정됩니다.
- Bean 유형 A는 Bean 유형 B와 D를 갖는 CMR입니다.
- Bean 유형 B는 Bean 유형 C를 갖는 CMR입니다.
데이터베이스에서 검색되는 유형 A인 각 Bean의 경우, 직접 관련되는 B와 D Bean 및 간접적으로 관련되는 C Bean도 검색됩니다. 결과 세트의 각 행에서 검색된 Bean 데이터 열 순서는 미리 읽기 힌트의 순서와 동일합니다. A Bean, B Bean(또는 널), C Bean(또는 널), D Bean(또는 널). 같은 관계가 두 번 이상 언급되는 힌트의 경우(예: RelB.RelC;RelB.RelE), Bean의 데이터 열은 결과 세트에서 한 번만 표시됩니다. 결과 세트 내 위치는 힌트에서 Bean이 맨 처음 나타나는 위치입니다.
RelB 같은 표기법에 표시된 토큰은 해당 Bean의 배치 디스크립터에 정의된 관계에 대한 CMR 필드 이름이어야 합니다. RelB.RelC와 같은 간접 관계에서, RelC는 Bean 유형의 배치 디스크립터에 정의된 CMR 필드 이름입니다.
하나의 미리 읽기 힌트는 둘 이상의 관계에서 동일한 Bean 유형을 참조할 수 없습니다. 예를 들어, Department Bean이 Employee Bean과 employees 관계를 가지고 Employee Bean과 manager 관계를 가지는 경우, 미리 읽기 힌트는 employees와 manager 모두를 지정할 수는 없습니다.
미리 읽기 힌트 설정 방법에 대한 자세한 정보는 Rational® Application Developer 제품 문서를 참조하십시오.
미리 읽기 힌트의 런타임 동작
- 긴 또는 복잡한 경로의 미리 읽기 힌트는 너무 복잡해서 유용하지 않은 조회를 작성할 수 있습니다. 루트 또는 리프 상속 맵핑의 미리 읽기 힌트는 특히 주의해야 합니다. 필요한 결합 연산의 복잡도를 측정하기 위해 미리 읽기 사전 로드를 잠재적으로 구성하는 테이블 수를 추가하십시오. 결과 명령문이 대상 데이터베이스에 대한 합리적인 조회를 생성하는지 여부를 고려하십시오.
- 미리 읽기 힌트는 다음과 같은 경우에는 작동하지 않습니다.
- M:N 관계에서 경로를 사전 로드한 경우
- 재귀 엔터프라이즈 Bean 관계 또는 재귀 fk 관계 사이에서 경로를 사전 로드한 경우
- 미리 읽기 힌트가 해당 두 가지 조작의
조합을 지원하는 않는 데이터베이스에서 테이블 결합을 필요로 하는
SELECT FOR UPDATE 문에 적용되는 경우
일반적으로 지속성 관리자는 Bean이 엄격한 잠금 정책을 강제 실행하는 액세스 목적을 가지고 있는 경우에만 해당 Bean에 대해 SELECT FOR UPDATE 문을 발행합니다. 엄격한 잠금 정책에서는 데이터베이스 선택 조회 시 SELECT FOR UPDATE 문이 필요합니다. 이러한 데이터베이스는 SELECT FOR UPDATE 문을 사용한 테이블 조합을 지원하지 않으므로 데이터베이스 테이블 디자인에서 명령문을 이행하기 위한 결합 조작이 필요한 경우 많은 데이터베이스에서 예외가 발행됩니다. 이런 경우 WebSphere® Application Server는 미리 읽기 힌트를 구현하지 않습니다. 데이터베이스가 해당 지원을 제공하지 않는 경우, Application Server는 구성한 미리 읽기 힌트를 구현합니다.
DB2 Universal Database™ V8.2는 테이블 결합에서 SELECT FOR UPDATE 문을 지원합니다.