HTTP 세션에 ActivitySessions 사용을 위한 사용법 모델
이 주제에서는 WebSphere® 웹 컨테이너에서 실행되는 웹 애플리케이션이 ActivitySession 컨텍스트에 참여할 수 있는 방법에 대해 설명합니다.
여러 개의 서블릿 호출이 동일한 논리 애플리케이션의 일부로 발생하도록 웹 애플리케이션이 설계되면, 서블릿은 HttpSession을 사용하여 서블릿 호출의 상태를 보존할 수 있습니다. ActivitySession 컨텍스트는 HttpSession에서 일시중단되어 HttpSession에 액세스하는 서블릿을 나중에 호출할 때 재개될 수 있는 하나의 상태를 말합니다.
또한 ActivitySession은 HttpSession과 자동으로 연관되어, 여러 HTTP 호출 시 또는 서블릿의 전달과 포함 시 ActivitySession으로의 액세스를 확장하고 웹 HTTP 클라이언트의 라이프사이클에 의해 판별될 수 있는 EJB(Enterprise JavaBeans) 활성화 기간을 지원하는 데 사용될 수 있습니다. HttpSession에 저장된 ActivitySession 컨텍스트는 특정한 웹 HTTP 클라이언트에 ActivitySession 이전의 작업과 관련되어 사용될 수 있습니다.
- 웹 컨테이너는 ActivitySession을 시작하고 종료합니다.웹 애플리케이션은 ActivitySessions의 컨테이너 제어를 위해 구성된 서블릿을 호출합니다.
- HttpSession이 있을 경우, ActivitySession과 연관됩니다.
- HttpSession이 없을 경우, 서블릿은 ActivitySession을 자동 시작하여 HttpSession과 연관시키는 HttpSession을 시작할 수 있습니다.
서블릿은 기존의 HttpSession이 종료될 때까지 HttpSession을 시작할 수 없습니다. HttpSession 내에서 웹 애플리케이션은 연관된 ActivitySession 컨텍스트를 사용할 수 있는 다른 서블릿을 호출할 수 있습니다. 웹 애플리케이션이 서블릿을 호출하면 HttpSession을 종료하고, ActivitySession이 자동으로 종료됩니다. 이에 대해서는 다음 다이어그램에 표시되어 있습니다.
그림 1. ActivitySessions의 웹 컨테이너 제어. 이 그림은 주변 텍스트에 설명되어 있습니다. - 웹 애플리케이션은 ActivitySession을 시작 및 종료합니다.웹 애플리케이션은 ActivitySesions의 애플리케이션 제어를 위해 구성된 서블릿을 호출합니다.
- HttpSession이 존재하고 연관된 ActivitySession이 있을 경우, 서블릿은 ActivitySession 컨텍스트를 사용하거나 종료할 수 있습니다.
- HttpSession이 존재하지 않을 경우, 서블릿이 HttpSession을 시작할 수 있지만, ActivitySession을 자동으로 시작하지 않습니다.
- HttpSession이 존재하지만 연관된 ActivitySession이 없을 경우, 서블릿은 새로운 ActivitySession을 시작할 수 있습니다. 그러면 HttpSession이 ActivitySession과 자동으로 연관됩니다. ActivitySession은 ActivitySession이 특별히 종료되거나 HttpSession이 종료될 때까지 지속됩니다.
서블릿은 기존의 ActivitySession이 종료될 때까지 새로운 ActivitySession을 시작할 수 없습니다. 서블릿은 기존의 HttpSession이 종료될 때까지 새로운 HttpSession을 시작할 수 없습니다.
HttpSession 내에서 웹 애플리케이션은 기존의 ActivitySession 컨텍스트를 사용하거나 종료할 수 있는 다른 서블릿을 호출할 수 있습니다. 또는 ActivitySession이 존재하지 않을 경우 새로운 ActivitySession을 시작합니다. 웹 애플리케이션이 서블릿을 호출하면 HttpSession을 종료하고, ActivitySession이 자동으로 종료됩니다. 이에 대해서는 다음 다이어그램에 표시되어 있습니다.
그림 2. ActivitySessions의 웹 애플리케이션 제어 . 이 그림은 주변 텍스트에 설명되어 있습니다.
웹 애플리케이션은 사용 모델에 대해 구성된 서블릿을 호출할 수 있습니다.
다음과 같은 사항은 두 사용 모델 모두에 적용됩니다.
- HttpSession(및 모든 연관된 ActivitySession)을 종료하려면, 웹 애플리케이션은 해당 세션을 무효화해야 합니다. 이로 인해 ActivitySession의 체크포인트가 생성됩니다.
- 클라이언트가 효율적으로 웹 HTTP 클라이언트가 되기 때문에, ActivitySession의 컨텍스트 내에서 활성화된 모든 다운스트림 엔터프라이즈 Bean은 서블릿 호출 사이에서 비활성화되는 대신 메모리에 보유될 수 있습니다.
- 웹 애플리케이션은 많은 서블릿으로 구성될 수 있으며, 웹 애플리케이션의 각 서블릿은 ActivitySessionControl에 대한 값으로 구성될 수 있습니다. ActivitySessionControl은 서블릿 또는 해당 컨테이너가 ActivitySessions를 시작하는지 여부를 판별합니다.
- 트랜잭션이 데이터베이스 잠금을 보유할 수 있으며 지속 기간이 짧아지도록 설계되어야 하므로, 활성 트랜잭션 컨텍스트를 캡슐화하는 ActivitySession 컨텍스트는 HttpSession과 연관될 수 없습니다. 애플리케이션이 활성 트랜잭션을 HttpSession으로 이동하면 트랜잭션은 롤백되며 ActivitySession은 HTTPSession에서 일시중단됩니다. 일반적으로, 애플리케이션이 수명이 긴 엔티티로는 ActivitySessions이나 기타 구문을, 지속 시간이 짧은 엔티티로는 ACID 트랜잭션을 사용하도록 디자인해야 합니다.
- ActivitySession 지속 기간 중 언제든 하나의 ActivitySession과만 HttpSession을 연관시킬 수 있습니다. HttpSession과 연관된 ActivitySession은 ActivitySession의 지속 시간 중에는 연관된 상태로 남아 있으므로, 첫 번째 ActivitySession이 완료될 때까지는 다른 것으로 바꿀 수 없습니다. 서블릿이 HttpSession에 대한 액세스를 공유한 경우 해당되는 여러 개의 서블릿에서 ActivitySession에 액세스할 수 있습니다.
- ActivitySession은 지속적이지 않습니다. 지속적 HttpSession이 이를 호스팅하는 서버보다 오래 존재할 경우, 캐시된 ActivitySession은 호스팅 서버가 종료될 때 종료됩니다.
- 연관된 ActivitySession을 종료하기 전에 HttpSession이 제한시간 종료되면
ActivitySession이 재설정됩니다. 1 ActivitySession 자원을 일관성의 마지막 위치로 롤백합니다.
- 웹 애플리케이션이 ActivitySessions의 컨테이너 제어를 위해 구성된 서블릿을 호출한 경우, ActivitySession 자원이 완전히 롤백됩니다.
- 웹 애플리케이션이 ActivitySessions의 애플리케이션 제어를 위해 구성된 서블릿을 호출한 경우, ActivitySession 자원은 서블릿이 사용했던 마지막 체크포인트로 롤백되고 체크포인트를 사용하지 않은 경우에는 완전히 롤백됩니다.
- ActivitySession이 제한시간 종료되면 일관성의 마지막 위치(이전 항목 참조)로 재설정된 다음 HttpSession이 종료됩니다.