제2장 JEUS v7.0 Fix#3

내용 목차

2.1. 신규 기능
2.1.1. WebSocket
2.1.2. Network
2.1.3. WebAdmin
2.1.4. Server
2.2. 변경 기능
2.2.1. WebEngine
2.2.2. Session Server
2.3. 버그 수정
2.3.1. WebEngine
2.3.2. EJB
2.3.3. JMX
2.3.4. Deployment
2.3.5. WebAdmin
2.3.6. Session Server
2.3.7. IO

본 장에서는 JEUS v7.0 Fix#3 릴리즈에서 추가된 새로운 기능과 변경된 기능에 대해 간략히 설명한다.

2.1. 신규 기능

본 절에서는 JEUS의 신규 추가사항에 대하여 설명한다.

2.1.1. WebSocket

  • WebSocket Protocol 지원

    • JEUS 7.0 Fix#3부터 WebSocket Protocol(JSR356)을 지원한다.

      • Java EE 7 Servlet 3.1에서 정식 도입이 예상되나 아직 WebSocket Protocol이 정식으로 릴리즈되지 않았다.

      • Servlet 3.0에서는 지원하지 않아도 무방하나 외부 요구에 대응하기 위하여 WebSocket Protocol을 Beta 서버 형식으로 지원한다.

    • jeus-web-dd.xml 파일에 deploy할 때 필요한 WebSocket Container 관련 설정을 하고, jeusadmin에서 관련 콘솔 명령어를 지원한다.

    • WebtoB는 4.1 SP8 Fix#0부터 WebSocket을 지원한다.

2.1.2. Network

  • Java NIO SSLEngine 기반 SSL/TLS 통신 지원

    • javax.net.ssl.SSLEngine을 이용한 SSL/TLS 통신을 지원한다.

2.1.3. WebAdmin

  • WebAdmin의 SSL 사용 기능 추가

    • SSL_WEBADMIN Listener를 추가하여 WebAdmin을 SSL로 동작하도록 하는 기능이 추가되었다.

2.1.4. Server

  • IBM Power Linux에 SIGAR Library 제공

    • Shared Class Loading mode에서 deploy할 때 loadAllClasses 호출에 의한 Class Loading이 ClassNotFoundException 등으로 실패할 경우 이를 무시하고 deploy를 완료 처리하는 Property가 추가되었다.

    • System Property의 jeus.deploy.ignore-not-found-classes이며, 기본값은 False이다.

2.2. 변경 기능

본 절에서는 JEUS의 모듈별 변경 사항에 대하여 설명한다.

2.2.1. WebEngine

  • JASPER를 사용하는 경우 OOM이 발생하지 않도록 수정

    • JSP를 컴파일하는 경우 JASPER 컴파일러가 내부에서 가지고 있는 pageNodes 정보가 계속 증가하여 OOM 발생 가능성이 있었으나, JEUS에서 pageNodes를 null 로 수정하여 OOM 발생 가능성을 방지하도록 변경되었다.

2.2.2. Session Server

  • Session Manager에 shared-mode=true와 Session Cluster를 동시에 사용하지 못하도록 수정

    • Session Cluster는 특정 애플리케이션 간의 세션 공유를 지원하고 shared-mode=true는 모든 애플리케이션 간의 세션 공유를 지원하기 때문에 동작할 때 충돌이 발생한다.

    • 이 설정들을 동시에 사용할 경우 Exception을 발생시켜 애플리케이션의 deploy가 실패되도록 수정하였다.

2.3. 버그 수정

본 절에서는 JEUS의 모듈별 버그 수정 사항대하여 설명한다.

2.3.1. WebEngine

  • request.getRequestURL를 호출하는 경우 포트가 생략되지 않는 문제 수정

    • HTTP, HTTPS 요청이 각각의 기본 포트(예: 80, 443)를 사용하는 경우 request.getRequestURL() 함수에서 포트 번호를 제외하고 URL 정보만을 회신하도록 수정되었다.

  • WJPv2를 사용하는 경우 무한 루프에 빠지는 문제 수정

    • WJPv2는 "request + body, body, ... "와 같이 여러 개의 메시지로 나뉘어서 전송되는 데, 각 메시지별로 남는 데이터 관리의 문제로 무한루프에 빠지면서 CPU 점유율이 상승하던 문제가 수정되었다.

  • access logging할 때 HttpSession 객체를 사용하는 경우 ClassNotFoundExcetion 발생 문제 수정

    • access log에서 HttpSession을 사용(%u 또는 %s 옵션 사용)하면서 HttpSession에 User Class가 포함된 경우 ClassNotFoundExcetion으로 Session Deserialize Error가 발생할 수 있는 문제가 수정되었다.

  • Session Access할 때 ClassLoader에서 WEB-INF 하위 Class를 찾지 못하는 문제 수정

    • Session Access 수행 과정에서 ClassLoader에서 WEB-INF 하위 Class를 찾지 못해 User Class를 deserialize하지 못하는 문제를 수정하였다.

  • URL Pattern Blocking 기능을 사용할 때 대소문자를 구별하지 않도록 수정

    • URL Pattern을 판단할 때 대소문자를 구별하지 않도록 수정하였다.

      (예 : '%5c'와 '%5C'를 같은 값으로 판단)

  • jeus.servlet.servlets.JspServlet을 등록할 때 init-param이 적용되지 않는 문제

    • web.xml에 JspServlet을 등록할 때 설정하는 init-param이 적용되지 않던 문제가 수정되었다.

    • web.xml에 2개 이상의 JspServlet을 등록할 때 deploy 단계에서 StartingException이 발생하도록 수정되었다.

  • webtob-connector의 connection 동적 설정 변경이 정상적으로 되지 않던 문제 수정

    • webadmin 및 console 명령어로 webtob-connector의 connection 설정을 동적으로 변경할 경우 설정한 값과는 다르게 늘거나 줄던 문제가 수정되었다.

2.3.2. EJB

  • EJB ClassLoader Leak 문제 수정

    • EJB를 공유할 수 있도록 ClassLoader를 Static Map에 저장하는데, EJB가 undeploy되어도 ClassLoader를 제거하지 않아 Leak이 발생할 수 있는 문제를 수정하였다.

  • jeus-ejb-dd에 설정된 disconnect-timeout 설정이 반영되지 않는 문제 수정

    • EJB 3.1 이후 부터 disconnect-timeout은 deprecated되고, @StatefulTimeout이나 ejb-jar.xml의 stateful-timout 설정을 사용하게 되었다.

    • 해당 설정은 하위 버전 호환을 위해 여전히 지원하고 있으나, 현재 해당 설정값을 가져오려고 하지만 그 값을 가져오려는 BeanInfo에는 disconnect-timeout 값이 나중에 설정되기 때문에 항상 diconnect-timeout 값이 항상 null이 되어 jeus-ejb-dd에 설정된 disconnect-timeout 값을 사용할 수 없던 문제를 수정하였다.

  • @StatefulTimeout이 적용되지 않는 오류 수정

    • Stateful Timeout에 @StatefulTimeout 값이 적용되지 않던 문제가 수정되었다.

2.3.3. JMX

  • Subject Delegation 기능을 사용한 MBeanServerConnection에서 OOM 발생 문제 수정

    • 서버를 재시작하지 않고 장시간 사용할 경우 Subject Delegation 기능을 사용한 MBeanServerConnection에서 Cache Entry 정리 문제로 Cache가 계속 증가하여 OOM이 발생할 수 있는 문제를 수정하였다.

2.3.4. Deployment

  • DAS에서 전송받은 domain.xml의 vhost 정보가 반영되지 않는 문제 수정

    • DAS와 MS가 다른 장비에 있고 MS에 domain.xml에 없는 경우 MS를 부팅할 때 DAS로부터 받아온 domain.xml에 설정된 vhost 정보를 MS를 기동할 때 반영되지 않는 문제가 해결되었다.

2.3.5. WebAdmin

  • auto-lock을 사용할 때 설정 작업 중 schema invalid 오류 발생 문제 수정

    • Lifecycle Invocation을 추가할 때 LifecycleInvocationType이 생성되어야 InvocationType을 생성할 수 있기 때문에 중간에 invalid xml 상태가 되는데, auto-lock을 사용할 경우 invalid 상태에서 벗어날 수 없는 문제가 발생한다.

    • WebAdmin의 className을 설정할 때 1개의 InvocationType을 같이 설정하도록 수정하여 문제를 해결하였다.

2.3.6. Session Server

  • Session Manager의 shared-mode=true인 경우 Dump Backup을 실패하는 문제 수정

    • Session Manager가 다른 서버의 Session Manager를 찾는 중 다른 서버의 Session Manager에서 자기 자신의 Session Manager Name을 찾을 경우 다른 서버가 alive하지 않다고 판단하여 Dump Backup을 수행하지 않던 문제를 수정하였다.

    • Session Manager가 Shared Mode인 경우 Manager의 이름이 서버 이름과 동일하게 1개만 생성되기 때문에 GMS Alive Check에서 이미 동작이 확인되어 별도의 Alive Check가 불필요하다. 따라서 확인 과정을 제거해서 문제가 발생하지 않도록 수정되었다.

2.3.7. IO

  • Reliable Multicast를 사용할 때 CPU를 과도하게 사용하는 문제 수정

    • MS가 independent 모드로 기동이 되고, DAS를 기동 후 종료한 경우 sender thread의 timeout 설정이 잘못되어 CPU 점유율이 높아지는 현상이 수정되었다.

  • MS를 정상 종료하였으나 지속적으로 reconnect하는 문제 수정

    • MS가 기동될 때 다른 MS로 클러스터링 정보를 보내게 되는데 다른 MS로 정보를 보내지 못하면 reconnect를 시도하게 된다.

    • 이 과정에서 MS가 종료되면 재시도를 중단해야 하는데 계속 반복하는 문제가 수정되었다.