EAP 7 이상에서 컨텍스트간 세션 공유
기본적으로 JavaEE Servlet
사양에 따르면 HttpSession
Object는 어플리케이션 범위에서만 사용가능합니다.
Session Scope
HttpSession objects must be scoped at the application (or servlet context) level.
하지만 컨텍스트간 세션을 공유해야하는 경우가 있습니다.
아래 그림을 참고합니다.
위와같이 한 컨테이너에 여러 어플리케이션(컨텍스트)를 배포하게 되면 JavaEE Spec에 따라 각 어플리케이션은 독자적인 격리된 세션 저장소를 가지게 됩니다.
따라서 각각의 어플리케이션은 별도의 세션데이터 영역을 가지기 때문에 하나의 세션으로 동작하지 않게 되며 각 어플리케이션을 오고갈때 새로운 세션이 생성되게 됩니다.
이것은 WAS의 세션클러스터링(Session Clustering
)기능 으로 해결이 불가능합니다.
왜냐하면 WAS의 세션 클러스터링 기술은 컨테이너간 세션 공유 기술이기 때문에 어플리케이션간의 세션 공유는 지원하지 않으며 이는 앞서 설명한것처럼 JavaEE Spec에도 위배되는 일입니다.
하지만 어쩔수 없이 어플리케이션간 세션을 공유해야하는 경우를 위해 JBoss EAP 7
이상 버전에서는 어플리케이션간 세션을 공유할 수 있는 방법이 있습니다.
적용 방법
세션 공유를 사용하도록 설정하려면 다음과 같이 EAR
의 jboss-all.xml
에 shared-session-config
요소를 구성합니다.
<jboss umlns="urn:jboss:1.0"> <shared-session-config xmlns="urn:jboss:shared-session-config:1.0"> <session-config> <cookie-config> <path>/</path> </cookie-config> </session-config> </shared-session-config> </jboss>
클러스터된 구성에서 세션복제를 사용하고자 하는 경우 <distributable/>
플래그와 함께 shared-session-config:2.0
스키마를 사용합니다:
<jboss umlns="urn:jboss:1.0"> <shared-session-config xmlns="urn:jboss:shared-session-config:2.0"> <session-config> <cookie-config> <path>/</path> </cookie-config> </session-config> <distributable/> </shared-session-config> </jboss>