애플리케이션 프로파일링 태스크
태스크는 이름이 지정된 작업 단위입니다. 런타임 환경에서 엔티티 Bean의 데이터를 백엔드 시스템에서 로드할 때 적용할 액세스 목적 정책을 결정하는 메커니즘입니다.
애플리케이션 프로파일을 사용하면 개발자가 여러 액세스 목적 정책을 가진 엔티티 Bean을 구성할 수 있습니다. 주어진 애플리케이션에 프로파일의 n개의 인스턴스가 있을 경우, 각 Bean은 n개 만큼의 액세스 목적 정책으로 구성이 가능합니다.
태스크는 작업 단위가 시작될 때 트랜잭션 또는 ActivytySession과 연관됩니다. 태스크는 작업 단위의 수명을 변경할 수 없지만 작업 단위의 범위 내에서는 항상 사용 가능하여 이 특정 작업 단위에 대해 구성된 액세스 목적 정책에 적용됩니다.
임의의 애플리케이션 파트에서 애플리케이션 프로파일링을 사용하도록 엔터프라이즈 애플리케이션이 구성된 경우, 애플리케이션 프로파일링은 활성 상태이며 작업 단위가 애플리케이션에 알려진 태스크와 연관되면 메소드 레벨 액세스 목적 구성은 무시됩니다.
태스크에 연관되어 있지 않은 작업 단위 또는 애플리케이션 프로파일에 연관되지 않는 태스크에 연관된 작업 단위에 엔티티 Bean이 로드되면, 기본 Bean 레벨 액세스 목적 또는 메소드 레벨 액세스 목적 구성이 적용됩니다. 작업 단위가 애플리케이션 프로파일에 연관된 태스크에 연관되어 있으면, 해당 애플리케이션 프로파일 안의 Bean 레벨 액세스 목적 구성이 적용됩니다.
예를 들어 애플리케이션은 두 개의 EJB 모듈(EJBModule1 및 EJBModule2)을 갖습니다.
EJBModule1에는 AppProfile1이라는 애플리케이션 프로파일이 있습니다. 이 AppProfile1은 task1 태스크에 의해 등록됩니다. 이 task1은 애플리케이션에 알려진 태스크가 되며 이 애플리케이션 내에서 작업 단위와 연관될 때 수행됩니다. 애플리케이션에 알려진 태스크가 있으면, 메소드 레벨 액세스 목적 구성은 무시되며 Bean 레벨 액세스 목적 구성만이 적용됩니다.
EJBModule2에는 애플리케이션 프로파일 구성 데이터가 없습니다. 모든 엔티티 Bean은 명시적으로 Bean 레벨 액세스 목적으로 구성되지 않지만, 일부 메소드는 메소드 레벨 액세스 목적 구성을 갖습니다. EJBModule2의 엔티티 Bean이 task1과 연관된 작업 단위로 로드된 경우, bean 레벨 액세스 목적 구성이 적용되며 메소드 레벨 액세스 목적 구성이 무시됩니다. Bean 레벨 액세스 목적이 명시적으로 설정되지 않았으므로, wsPessimisticUpdate-WeakestLockAtLoad인 기본 Bean 레벨 액세스 목적이 적용됩니다.
활성 태스크는 현재 작업 단위 메커니즘에 따라 결정됩니다. 현재 작업 단위가 글로벌 트랜잭션일 경우 태스크는 이 트랜잭션과 연관된 이름입니다. 글로벌 트랜잭션이 시작될 때 이름이 지정되지 않았으면 이 트랜잭션의 범위에는 활성 태스크가 존재하지 않습니다.
현재 작업 단위가 ActivitySession과 연관된 로컬 트랜잭션일 경우 태스크는 이 ActivitySession과 연관된 이름입니다. ActivitySession이 시작될 때 이름이 지정되지 않았으면 이 ActivitySession에 바인드된 로컬 트랜잭션에 대해서는 활성 태스크가 존재하지 않습니다. 현재 작업 단위가 ActivitySession과 연관되지 않은 로컬 트랜잭션일 경우 태스크는 이 로컬 트랜잭션과 연관된 이름입니다. 로컬 트랜잭션이 시작될 때 태스크와 연관되지 않은 경우, 이 로컬 트랜잭션의 지속 기간 동안에는 활성 태스크가 존재하지 않습니다. 다시 말해, 활성 태스크는 데이터베이스 자원을 조정하는 스레드에 있는 작업 단위와 연관된 태스크입니다. 작업 단위가 초기화될 때 태스크와 연관된 작업 단위의 제어가 없는 경우, 해당 작업 단위의 범위에 활성 태스크가 없습니다.
예를 들면, 학생 레코드와 상호 작용하기 위해 세션 Bean을 통해 호출하는 학교 구역 애플리케이션을 생각해 보십시오. 세션 Bean의 하나의 메소드를 사용하여 관리자가 학생의 레코드를 수정할 수 있습니다. 다른 메소드는 학생들이 자신의 레코드를 보려는 요청을 지원합니다. 애플리케이션의 프로파일링 없이 두 태스크는 익명으로 운영되며, 런타임 환경은 한 가지 태스크 대신 작동하는 작업과 다른 태스크 대신 작동하는 작업을 구별할 수 없습니다. 애플리케이션을 최적화하기 위해 개발자가 "updateRecords"라는 태스크가 있는 세션 Bean에서 메소드 중 하나를 구성하고, "readRecords"라는 태스크가 있는 세션 Bean에서 다른 메소드를 구성할 수 있습니다. 적절한 잠금 액세스 목적으로 구성된 학생 Bean을 가진 애플리케이션 프로파일로 등록되면, "updateRecords" 태스크는 레코드를 읽기 위한 트랜잭션을 차단하는 것이 필요하다는 것을 확인합니다. 태스크와 작업 단위 간 관계에 대한 자세한 정보는 태스크 및 작업 단위 고려사항의 내용을 참조하십시오.
태스크는 컨테이너로 관리되거나 애플리케이션에 의해 프로그램 방식으로 설정되도록 구성할 수 있습니다. 컨테이너 관리 태스크는 서블릿, JSP(JavaServer Page) 파일, 애플리케이션 클라이언트 및 EJB(Enterprise JavaBeans)의 메소드에 구성될 수 있습니다. 구성된 컨테이너 관리 태스크는 태스크 이름이 설정된 후 컨테이너가 시작한 작업 단위에만 연관됩니다. 애플리케이션 관리 태스크는 모든 J2EE 컴포넌트에서 구성할 수 있습니다. 엔터프라이즈 Bean의 경우 Bean 관리 트랜잭션이어야 합니다.

버전 6.x 클라이언트가 Application Profiling 5.x 호환성 모드에서 실행되는 애플리케이션과 상호 작용하려면, 클라이언트 프로세스에서 appprofileCompatibility 시스템 특성을 true로 설정해야 합니다. launchClient 명령을 호출할 때 -CCDappprofileCompatibility=true 옵션을 지정하여 이를 수행할 수 있습니다.
best-practices