1. Overview

WebLogic과 Tomcat 등 이기종 Middleware의 Http Session 공유 방법에 대해 테스트된 자료


2. Descriptions

Coherence / WebLogic 12cR2 and Tomcat 8.5.XX

외부 게시물 을 통해 많은 도움이 되었고, 공식 메뉴얼에서도 자세하게 알려주고 있으니 기본 가이드는 앞에서 확인.


WebLogic에 배포되는 Application과 Tomcat에 배포되는 Application은 다음과 같이 동일하다.

1
2
3
4
5
6
7
8
$ tree /sw/app/coherenceApp
/sw/app/coherenceApp
├── session.jsp
└── WEB-INF
    ├── weblogic.xml
    └── web.xml

1 directory, 3 files


Tomcat web.xml 은 다음의 요소가 중요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  <context-param>
    <param-name>coherence-servletcontext-clustered</param-name>
    <param-value>true</param-value>
  </context-param>

  <context-param>
    <param-name>coherence-enable-sessioncontext</param-name>
    <param-value>true</param-value>
  </context-param>

  <context-param>
    <param-name>coherence-session-cookie-path</param-name>
    <param-value>/</param-value>
  </context-param>

  <context-param>
    <param-name>coherence-scopecontroller-class</param-name>
    <!--<param-value>com.tangosol.coherence.servlet.AbstractHttpSessionCollection$ApplicationScopeController</param-value>-->
    <param-value>com.tangosol.coherence.servlet.AbstractHttpSessionCollection$GlobalScopeController</param-value>
  </context-param>

  <context-param>
    <param-name>coherence-session-affinity-token</param-name>
    <param-value>!</param-value>
  </context-param>

  <context-param>
    <param-name>coherence-application-name</param-name>
    <param-value>coherenceApp</param-value>
  </context-param>
  <distributable/>


coherence-servletcontext-clustered, coherence-enable-sessioncontext : 서로 다른 App의 Context에서 생성된 Session 공유를 위하여 활성화 하는 것이나 구체적으로 살펴본것은 아니므로 추가 조사는 필요하다.


coherence-session-cookie-path : Tomcat의 경우 Cookie 저장 장소가 App의 Context-Root 아래 이므로, 기본값 /(root)인 Weblogic과 동일하게 맞추기 위함.


coherence-scopecontroller-class :GlobalScopeController설정 시 여러 Application이 Session을 공유하는데, ApplicationScopeController 를 쓰려는 경우 아래의 coherence-application-name 를 모든 곳에서 맞추어야 한다. 다만 WebLogic에서 동일하게 맞추었지만 Session 공유가 되지 않아 GlobalScope를 가져가게 되었다. 예상 되는 원인으로는, Weblogic App 측에서 sharing-enabled 와 같은 옵션의 테스트가 필요해보인다.


coherence-session-affinity-token : WebLogic은 Session 뒤에 !<JVMID> 를 추가하는데, 이는 Coherence에 실제 저장이 되지는 않는다. 다만 Browser cookie를 Tomcat이 이를 그대로 parse하여 올바른 Session 유지가 되지 않는다. Tomcat에서는 이 옵션을 통해 !<JVMID> 를 빼고 읽도록 한다.


WebLogic web.xml 의 경우, coherence-session-affinity-token 을 제외한 모든 설정이 동일하다.


이렇게 테스트 한 결과로, 이기종 MW간의 세션 공유가 확인되었다.



3. References

https://docs.oracle.com/en/middleware/fusion-middleware/coherence/12.2.1.4/administer-http-sessions/coherenceweb-context-parameters.html

https://docs.oracle.com/en/middleware/fusion-middleware/coherence/12.2.1.4/administer-http-sessions/using-coherenceweb-other-application-servers.html#GUID-B9C84803-E998-4988-8267-E84A6A916D6F

https://docs.oracle.com/en/middleware/fusion-middleware/coherence/12.2.1.4/administer-http-sessions/introduction-coherenceweb.html#GUID-4202FA59-819E-445C-8BCA-2648510914A3