제3장 JEUS v7.0 Fix#2

내용 목차

3.1. 신규 기능
3.1.1. WebAdmin
3.1.2. Session Server
3.1.3. Server
3.1.4. Deployment
3.1.5. Transaction
3.1.6. Security
3.1.7. WebEngine
3.1.8. Tool
3.1.9. Logging
3.1.10. Installer
3.1.11. JDBC
3.1.12. JMS
3.2. 변경 기능
3.2.1. Server
3.2.2. Deployment
3.2.3. Logging
3.2.4. WebEngine
3.2.5. JNDI
3.2.6. Transaction
3.2.7. JDBC
3.2.8. WebAdmin
3.2.9. Security
3.2.10. JMS
3.2.11. EJB
3.2.12. Tool
3.2.13. Session Server
3.3. 버그 수정
3.3.1. Deployment
3.3.2. WebEngine
3.3.3. WebAdmin
3.3.4. Server
3.3.5. EJB
3.3.6. WebService
3.3.7. JNDI
3.3.8. JMS
3.3.9. Logging

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

3.1. 신규 기능

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

3.1.1. WebAdmin

  • JEUS 모니터링 개선

    • 각 서버가 제공하는 개별 모니터링 항목들을 그룹(Preset)으로 묶을 수 있는 기능을 제공한다. (Preset은 DAS에서 관리 / 저장)

      • Webadmin에서 사용할 수 있도록 모니터링 항목들에 대한 정보 및 값을 가져오고 Preset를 설정, 편집할 수 있는 콘솔 명령어를 제공한다.

      • MBean Statistic 정보를 주기적으로 모니터링해서 Chart로 표현하는 기능이 추가되었다.

    • WebAdmin에서 Statement Cache, Server Log 모니터링 기능이 추가되었다.

    • WebAdmin의 Page Search 기능이 추가되었다.

  • Server에 적용된 patch file list를 확인할 수 있는 기능 추가

    • Patch Info를 조회하고 patch file별로 적용된 node를 간략한 표로 표시하는 기능이 추가되었다. (Monitoring > Patch Info)

  • 다수의 서버 복제 기능 추가

    • Number Of Server(복사할 서버의 수)와 Step(Listen Port가 중복되는 경우 Port의 수 증가분)을 옵션으로 주어 다수의 서버를 복제하는 기능이 추가되었다.

    • address, port 중복 검사 및 결과를 메시지로 출력한다.

  • Sortable Table 기능 추가

    • Table header를 클릭하면 Table의 Row를 sort하는 기능을 제공한다.

    • Unsorted, Ascend, descend의 3가지 모드가 있다.

3.1.2. Session Server

  • Session Clustering Scope 재설계

    • Session Cluster와 JEUS의 Cluster를 분리하였다.

    • Servlet에서 사용하는 Session manager를 InfiniCache로 대체할 수 있는 기능을 지원한다.

  • Session Providor 분리

    • Session Provider 분리하여 Session Server SPI를 제공한다.

    • Domain 레벨로 관리되는 GMS와 Cluster별로 관리되는 GMS를 통합하여 Domain 레벨에서 하나의 GMS만을 두도록 변경하였다.

  • 중복 로그인 방지 기능 추가

    • 애플리케이션에서 수행해야 하는 부분을 JEUS에서 지원하는 개념의 기능이 추가되었다.

    • 애플리케이션에서 약속된 Key로 setAttribute를 수행할 때 로그인으로 판단하며, 중복된 로그인이 있을 경우 기존 세션을 제거한다.

3.1.3. Server

  • GMS Reliable Multicast 구현

    • 신뢰성이 부족한 UDP 통신 protocol 위에 TCP와 유사한 동작을 구현하여 '성능'이라는 UDP의 장점과 '신뢰성'이라는 TCP의 장점을 동시에 취하기 위해 새로운 방식의 Multicast를 구현하였다.

    • use-virtual-multicast 설정이 false인 경우 Reliable Multicast로 동작한다.

  • 엔진별 on/off를 통한 경량화 Server 지원

    • 엔진별 On/Off 기능을 통하여 원하는 특정 엔진만을 기동시킬 수 있는 기능 지원한다.

  • Engine Lazy Initialization 기능 추가

    • Deploy할 때 Application Type에 따라 필요한 엔진을 확인한 후 엔진이 초기화되어 있지 않으면 초기화한 후 deploy하도록 변경되었다.

  • NodeManager를 Stop할 때 Local Machine의 Server를 Stop할 수 있는 옵션 추가

    • NodeManager를 Windows Service 등의 OS Service로 등록했을 경우에 사용하기 위하여 추가된 기능이다.

    • NodeManager가 내려가기 전에 Server를 내릴수 있도록 NodeManager stop command에 -stopServer 옵션을 추가하여 실행한다.

    • –stopServer 옵션으로 다운된 Server는 NodeManager를 부팅할 때 Server가 Start된다.

  • NodeManager를 기동할 때 DAS를 기동시키는 옵션 추가

    • Deploy할 때 Application Type에 따라 필요한 엔진을 확인한 후 엔진이 초기화되어 있지 않으면 초기화한 후 deploy하도록 변경되었다.

  • NodeManager의 Type 변경 기능 추가

    • Fix#1에서는 NodeManager의 Type을 변경하는 경우 삭제를 한 후 생성해야 했지만, Fix#2에서는 SSH, JAVA NodeManager 간의 Type을 변경할 수 있는 command가 추가되었다.

  • DAS Backup 기능 추가

    • DAS를 부팅할 때 자동으로 Domain 설정을 backup하는 기능이 추가되었다. (backup되는 Directory를 지정할 수 있다)

    • backup된 파일을 다른 Node에서 압축을 풀 때 IP, Port, Node 정보를 변경할 수 있다.

  • NodeManager를 Stop할 때 완전히 종료시키는 기능 추가

    • NodeManager를 Stop할 때 jeusnm.properties 파일에 설정된 정보를 읽어서 NodeManager를 완전히 종료시키는 기능이 추가되었다.

3.1.4. Deployment

  • Shared Class Loading mode deploy할 때 ClassNotFoundException을 무시하는 옵션 추가

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

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

3.1.5. Transaction

  • EJB를 사용하지 않는 TCP Remote Call에서 Transaction Propagation 지원 기능 추가

    • InfiniLink를 지원하기 위하여 추가되었다.

3.1.6. Security

  • ReadOnlyRole 추가

    • 모든 항목을 볼 수 있지만(Navigation 가능) 편집이 불가능(Action 불가능)한 ReadOnlyRole이 추가되었다.

3.1.7. WebEngine

  • WJP Version 2 추가 (WebtoB JEUS connection Protocol Version 2)

    • 클라이언트에서 HTTP 요청 Body를 Chunked로 보낼 경우 WebtoB에서는 모든 Chunk를 모아서 보내지 않고 Chunk를 받는대로 JEUS로 전달한다.

    • 클라이언트에서 보내는 HTTP 요청 Body가 매우 큰 경우 중간에 클라이언트 연결이 끊어져도 JEUS는 이를 모르므로 Servlet은 timeout이 발생할 때까지 기다리게 된다. 이러한 현상을 막기 위하여 WebtoB에 NotifyClientClose 옵션이 있으나, WJPv2는 옵션이 없어도 JEUS 쪽으로 클라이언트 연결이 끊겼음을 알려줄 수 있고, 이에 따라 JEUS는 Servlet 쪽으로 IOException을 던져준다.

    • WebtoB에서의 JEUS Dynamic Content Cache를 좀 더 효율적으로 처리할 수 있도록 도와준다.

    • WebtoB에서 세션 라우팅을 할 때 JEUS로부터 현재 JEUS 서버에 생성된 전체 세션 개수를 전달받아서 JEUS 서버의 세션 대수를 참고해서 라우팅할 수 있다. (WebtoB에 PING 설정 필요 : WebtoB SvrChkTime)

  • JEUS WebtoB SSL 통신 지원

    • WebtoB-JEUS가 외부/내부로 분리되어 통신하는 경우에 보안강화를 위하여 둘 사이의 연결이 SSL 지원기능이 추가되었다.

    • WebtoB 4.1 SP6 Fix#0 이후 버전부터 WebtoB-JEUS SSL 연결을 지원한다.

  • Multi Line Header를 처리하지 않도록 하는 System Property 추가

    • HTTP 헤더 앞부분에 공백이 들어갈 경우에도 Multi Line Header로 인식되지 않도록 하는 옵션이 추가되었다.

    • property 이름은 "jeus.servlet.http.ignoreMultiLineHeader"이고 기본값은 False이다.

  • Servlet 3.0 Multipart ProgressListener 제공

    • Servlet 3.0부터는 Servlet별로 multipart-config 설정을 등록해서 POST 요청의 multipart/form-data 처리를 웹 컨테이너에 맡길 수 있다. 이때 처리 진행 상황에 대한 이벤트를 받고 싶은 경우 ProgressListener를 등록한다.

  • Spring default Servlet search 지원기능 추가

    • Spring에서 <mvc:default-servlet-handler />라고 설정한 경우에도 default Servlet을 호출하도록 기능이 추가되었다.

  • Server별 webcommon.xml 및 web.xml 설정기능 추가

    • Server별로 webcommon.xml 및 web.xml 설정이 가능하도록 기능이 추가되었다.

    • DOMAIN_HOME/config/servlet/SERVER_NAME/에 파일을 추가한다.

  • JSP를 호출할 때 컴파일만 하는 옵션의 동작을 막는 기능 추가

    • Spec에 "http://[IP:Port]/index.jsp?precompile=true"와 같이 호출을 하면 JSP를 호출하지 않고 컴파일만 하도록 하는 기능이 있지만, 실제 거의 사용되지 않는다. JSP를 호출할 때 마다 발생하는 precompile 파싱 오버헤드를 줄이기 위하여 기능의 동작을 막는 옵션이 추가되었다. (jeus.servlet.jsp.precompile)

  • WJP(WebtoB-JEUS) Connection 상태를 확인하는 명령 추가

    • list-webtob-connections 명령이 추가되었다. (alias : lswjp)

    • 서버 이름과 webtob-connector를 필수 옵션으로 동작한다.

  • HTTP 요청 버전에 따라 응답 버전을 설정하는 기능 추가

    • 기존에 HTTP 1.0 요청에 대하여 1.1이 아닌 1.0으로 응답하기 위하여 jeus.servlet.response.force-response-10 옵션을 사용하였으나, 항후 HTTP 2.0에 대비하여 요청에 따라 HTTP 버전을 자동으로 선택하는 기능을 추가하였다.

  • 특정 Error Status에 대해서 Connection: keep-alive 응답을 주는 설정 추가

    • jeus-web-dd.xml에 keep-alive-error-response-codes 설정을 추가(default:404)하여 설정된 에러코드에 대하여 헤더에 Connection: keep-alive를 붙여주는 기능이 추가되었다.

  • request-encoding 설정에 <client-override> 추가

    • Encoding을 설정할 때 Servlet API보다 우선 순위가 낮고, HTTP Request의 Content-Type 헤더에 세팅된 charset다는 우선순위가 높게 설정되는 옵션(<client-override>)이 추가되었다.

    • <client-override> 설정은 JEUS 7 Fix#1 이하 버전의 <forced> 설정과 같은 의미를 갖는다.

  • WebtoB backup 기능 추가

    • Main으로 동작하는 WebtoB에 장애가 발생한경우 Backup에 설정된 WebtoB가 서비스하도록 하는 기능이 추가되었다.

  • HTTP Listener에 keep-alive-timeout 기능 추가

    • HTTP Listener에 keep-alive 모드로 연결되었으나, 일정 시간 동안 요청이 없는 클라이언트들을 정리하기 위하여 추가되었다.

    • Server Listener의 <keep-alive-timeout> 동작을 따르며, <use-nio>가 false일 경우에는 동작하지 않는다.

3.1.8. Tool

  • JEUS 6 to 7 Upgrade Tool 추가

    • JEUS 6 설치본에서 이전할 Node를 선택하여 JEUS 7 Domain을 새롭게 구성한다.

    • JEUS 6은 Domain 개념이 존재하지 않으므로, Domain과 DAS는 기본 설정으로 생성한다.

    • 이전할 때 각 JEUS 6 Node를 구성하는 JEUSMain.xml, WEBMain.xml, EJBMain.xml, JMSMain.xml을 이용하여 domain.xml 설정을 생성한다.

    • JEUS 6에서 각 Engine Container는 JEUS 7의 MA(Managed Server)로 이전한다. JEUS Manager에 대한 설정은 이전하지 않는다.

    • Engine Container에 Context Group이 2개 이상 설정되어 있는 경우 추가적으로 설정한 Context Group에 대해 이에 대응하는 MS를 생성한다.

    • 여러 개의 JEUS 6 Node를 이전하는 경우 export-name, data-source-id, application-id 등이 중복될 수 있으니 이는 직접 확인 및 수정해야 한다

  • 동시 수행이 가능한 명령에 concurrent 옵션 추가

    • 동시 수행이 가능한 deploy, distribute, start, stop, undeploy 명령에 concurrent 옵션이 추가되었다.

  • Server에 적용된 patch file list를 확인할 수 있는 명령 추가

    • system-info 명령에 -patch 옵션을 추가하여 각 Server에 적용된 patch file list를 확인할 수 있는 기능이 추가되었다.

  • appcompiler 명령에 class path 옵션 추가

    • appcompiler로 EJB를 컴파일할 때 컴파일할 EJB가 참조하는 class path를 지정할 수 있는 기능이 추가되었다.

    • –clp 옵션을 통해 지정할 수 있다.

  • jeus-web-dd.xml 파일 생성 Tool 추가 (webddgen)

    • Application 파일을 입력값으로 받았을 때 해당 Application의 jeus-web-dd.xml을 생성 또는 업데이트해주는 Tool이 추가되었다.

  • Apache Maven Plugin 지원

    • JEUS 7용 Maven Plugin을 제공한다.

    • start-das, start-ms, install-app, uninstall-app 명령을 지원한다.

  • jeusadmin 명령어 추가

    • ti 목록을 조회할 때 간략정보 옵션 제공한다.

      • jeusadmin에서 ti 명령을 수행할 때 WebEngine의 그룹 및 개수가 많을 경우 이를 한눈에 파악하기 쉽게 하기 위하여 간략하게 볼 수 있는 옵션을 추가하였다.

    • System Thread pool 상태를 모니터링하는 기능 추가

      • JEUS 내부 System Thread pool의 상태를 모니터링할 수 있는 명령어가 추가되었다.

      • 명령을 수행할 때 Pool에 존재하는 모든 Thread의 상태, Active 여부, name, tid 및 Pool 자체의 정보(pool name, min, max, current, work queue size, remaining work queue size)를 표시한다.

    • Server Log 원격전송 기능 추가

      • Jeusadmin에 특정 Server의 Log를 원하는 시간대부터 원하는 만큼 가져올 수 있는 명령이 추가되었다.

  • 서버 설정 복사 기능 추가

    • add-server에 -duptargetserver 옵션을 추가해서 Server를 추가할 때 기존 Server의 설정을 복사할 수 있도록 한다.

3.1.9. Logging

  • Server 단위의 Log Home 설정 기능 추가

    • Server에서 만드는 Log의 기본 경로를 지정한다.

    • Rotation된 Backup Log가 생성되는 경로에도 똑같이 적용이 된다.

  • NodeManager Log 설정 기능 추가

    • NodeManager Log 파일을 설정할 수 있는 기능이 추가되었다.

3.1.10. Installer

  • IBM Power Linux platform 지원

    • IBM Power Linux platform에 설치를 지원한다.

3.1.11. JDBC

  • java.sql.Connection#isValid를 사용한 Connection Validity Check 기능 추가

    • JDK 1.6, JDBC 4.0에서 추가된 java.sql.Connection#isValid를 이용하여 Connection Validity Check 기능을 추가하였다.

    • check-query에 "use isValid method"를 설정하여 check-query 대신 사용할 수 있으며 check-query-timeout을 timeout으로 사용한다.

    • check-query-period, non-validation-interval, check-query-destroy-policy 등은 check-query 방식과 동일하게 적용된다.

3.1.12. JMS

  • LPQ 지원

    • LPQ를 사용하여 JMS의 Client side의 Reliable Message 전송 기능을 추가하였다.

3.2. 변경 기능

본 절에서는 JEUS의 모듈별 변경 사항을 정리한다.

3.2.1. Server

  • Node, Domain 등으로 분리된 GMS를 하나로 통합

    • Domain 레벨로 관리되는 GMS와 Cluster별로 관리되는 GMS를 통합하여 Domain 레벨에서 하나의 GMS만을 두도록 변경하였다.

  • lifecycle invocation 기능 변경

    • InfiniLink 지원을 위하여 lifecycle invocation 을 Domain, Cluster에도 설정할 수 있도록 변경되었다.

  • 설정을 변경할 때 네트워크 사용량 감소

    • 설정을 변경한 후 적용할 때 한번의 Mbean Call로 Server에 Observer를 불러주는 Activate 작업, Server로 File을 전송하는 작업, Server에서 전송한 File을 Load하라는 LoadConfiguration 작업을 수행하도록 변경되었다.

  • FAILED 상태의 Server를 명령으로 Start할 수 있도록 변경

    • Server 상태가 FAILED인 경우에도 NodeManager에서 start-server 명령을 사용할 수 있도록 변경되었다.

  • DAS에서 MS Shutdown에 실패할 경우 NodeManager가 kill하도록 변경

    • DAS에서 MS Shutdown 명령을 전달하였으나 MS의 OOM이나 Network 문제로 MS가 응답하지 못하거나 Timeout까지 down이 되지 않는 등의 경우에 NodeManager에서 해당 MS를 kill하도록 변경되었다.

    • Windows는 지원하지 않는다.

  • 하나의 Domain에서 Java NodeManager와 SSH NodeManager를 동시에 지원

    • Fix#1에서는 한 가지 유형만을 지원하였으나, Fix#2부터는 2가지 유형을 동시에 지원하도록 변경되었다.

  • Domain 내의 Server를 booting할 때 순차적으로 boot시키는 옵션 추가

    • Fix#0에서는 무조건 순차적으로 기동하였고, Fix#1은 무조건 동시에 기동시키던 것을 Fix#2는 기동 방법을 옵션으로 선택할 수 있도록 하였다.

  • Application Resynch를 option으로 할 수 있도록 변경

    • Independent MS에 DAS가 Join되면 자동으로 App를 Resync하는데, 운영 중인 서버의 경우 문제가 될 수 있다.

    • enable-to-resynchronized-applications 옵션을 추가하여 기본값을 false로 하여 DAS Join할 때 자동으로 Resync되지 않도록 변경되었다.

  • External Resource, Custom Resource 기능 확장

    • 기존에 Server 단위로 설정하던 External Resource, Custom Resource를 Domain 단위로 설정하고 Server에 override하도록 변경되었다.

  • Java type의 NodeManager에서 사용하는 username, password cache 정보 암호화

    • 보안상의 문제를 피하기 위하여 Java type의 NodeManager에서 사용하는 cache 파일의 내용을 AES로 암호화하도록 변경되었다.

  • DAS에서 MS의 오류를 감지할 때 Restart 여부를 설정하도록 변경

    • 기존에는 DAS에서 MS의 오류를 감지할 경우 무조건 restart시키도록 하였으나, 옵션으로 restart 여부를 설정하도록 변경되었다.

  • ps 명령을 수행할 때 password가 보이지 않도록 변경

    • Server Process를 대상으로 ps 명령을 수행할 때 –p 옵션으로 붙였던 password가 노출되지 않도록 변경되었다.

  • Server down에 실패할 때 DOWN_FAILED 상태로 변경

    • Server Shutdown이 실패한 경우 Server의 이전 상태로 돌아가는지 않고 DOWN_FAILED 상태가 되도록 수정하였다.

    • DOWN_FAILED이 되면 server start, stop 명령이 가능하다.

3.2.2. Deployment

  • path를 주고 deploy할 때 application-id를 설정할 수 있도록 변경

    • 동일한 exploded module을 여러 서버에 deploy할 때 context path를 다르게 설정할 수 있도록 하기 위하여 변경되었다.

  • Application Type 설정 없이 deploy할 경우 WebModule을 기본값으로 설정하도록 변경

    • Application을 deploy할 때 Application Type을 확인할 수 없을 경우 WebModule을 기본값으로 설정하도록 변경되었다.

  • Exploded Mode Application의 Graceful Redeploy 지원

    • Exploded Mode Application에 대해서도 Graceful Redeploy를 지원하도록 변경되었다.

  • EAR에 속한 module들에 대하여 concurrent deploy 여부 설정

    • EAR에 속한 module들에 대하여 concurrent deploy 여부를 설정할 수 있도록 변경되었다.

  • Redeploy 정책이 변경

    • Application File의 위치가 APP_HOME인 경우, Application File 또는 Directory 위치가 Repository인 경우, deploy할 때 –path 또는 –dasPath 옵션으로 대상 File을 지정하여 deploy한 경우, deploy할 떄 –path 또는 –dasPath 옵션으로 Directory를 지정하여 deploy한 경우에 따라서 Redeploy에 대한 전반적인 정책이 정리되었다.

  • Deploy 속도 개선

    • 다수의 MS에 Application을 deploy할 경우 deploy 속도를 개선하였다.

3.2.3. Logging

  • Accesslog 성능문제 개선

    • 기본 로그에 %l(필요없은 옵션), %u(request.getRemoteUser()) 옵션을 제거하였다.

  • derby.log 생성 위치 변경

    • embedded derby를 사용할 때 derby.log 생성 위치를 서버별 로그 디렉터리로 변경하였다.

3.2.4. WebEngine

  • Servlet I/O Buffer Tuning

    • Application에서 output-buffer-size보다 큰 byte array를 write했을 경우의 성능을 최적화하였다.

  • WebtoB Buffer Tuning

    • JEUS로부터 받은 응답 데이터 버퍼링을 개선하였다. msg read buffer 재사용 및 읽은 만큼 바로 클라이언트에게 wirte하도록 수정하였다.

  • JEUS에서 WebtoB로 Suspend 명령을 보내지 못하도록 변경

    • 하나의 WebtoB에 다수의 JEUS가 접속된 경우 특정 JEUS만을 분리하여 suspend하지 못하기 때문에 기능을 제거하였다.

  • default-error-page를 상대 경로에서 찾을 수 있도록 변경

    • Web Engine의 default-error-page 설정을 절대 경로뿐 아니라 상대 경로도 설정할 수 있도록 변경되었다.

    • 상대 경로로 설정된 경우 $DOMAIN_HOME/config/servlet/<server-name> 아래에서 설정된 경로를 찾는다.

  • JSF RI를 classpath에서 제외

    • jeus-web-dd.xml에 명시적으로 작성하지 않으면 JEUS_HOME/lib/shared에 존재하는 JSF RI를 classpath에 추가하지 않도록 변경되었다.

  • http-listener의 Queue 가득 찬 경우 503을 응답하도록 변경

    • HTTP, AJP13의 경우 Queue가 다 차면 강제로 connection을 끊었으나 503을 응답하도록 변경하였다.

  • JEUS Reverse Proxy를 사용할 때 HTTP Request에서 proxy-specific-headers 전송 여부 설정 추가

    • JEUS Reverse Proxy(Tomcat 구현을 가져온 것)는 WebtoB와 달리 'via', 'x-forwarded-for', 'x-forwarded-host', 'x-forwarded-server', 'accept-encoding' 등을 무조건 Request Header에 추가하였는데, 기본적으로 보내지 않고 옵션을 추가하여 필요할 때 보낼 수 있도록 변경되었다.

  • 특정 패턴에 대한 접근제한 설정 위치 변경

    • 특정 패턴에 매치되는 URL을 막고 싶은 경우 기존에는 urlblocking.properties에 설정하였지만 domain.xml/web-engine에 설정 하도록 변경되었다.

  • Annotation 및 Registration API로 등록하는 Servlet의 URL Pattern은 URL decode을 수행하도록 변경

    • Annotation 및 Registration API로 등록하는 Servlet의 URL Pattern의 경우 Tomcat과 같이 URL decode를 수행해서 등록하도록 변경되었다.

  • output-buffer-size 기본값 변경

    • output-buffer-size의 기본값을 각 OS별 Socket Send Buffer Size로 변경되었다.

  • JEUS 설치할 때 Domain 레벨로 제공하는 web.xml 제거

    • JEUS 7부터 Servlet 3.0을 지원하면서 web.xml이 없어도 Web Application Deploy가 가능해짐에 따라 삭제되었다.

  • Windows에서 webtob-ipcbaseport 설정과 use-pipe 설정 우선순위 변경

    • disable-pipe=true(use-pipe=false)일 경우에는 무조건 Socket으로 연결하여 ipcbaseport로 연결을 하지 않도록 수정되었다.

    • disable-pipe=false(use-pipe=true)일 경우에 ipcbaseport로 연결한다.

  • ServletContext.getRealPath()에 존재하지 않는 파일 또는 디렉터리를 설정할 때 Context Based Path를 리턴하도록 변경

    • ServletContext.getRealPath()에 존재하지 않는 파일 또는 디렉터리를 설정하면 기존에는 null을 리턴하였지만 Fix#2부터 Context Based Path 값을 리턴하도록 변경되었다.

  • enable-jsp=false일 경우 동작 변경

    • 기존에는 enable-jsp 설정이 false일 때 jsp를 호출하면 503 에러를 리턴하였으나, Fix#2부터는 JSP를 서비스하지 않고 Resource로 취급하도록 변경되었다.

  • AJP13 Listener에 Body가 없는 Request가 들어오거나 Chunk 방식으로 Body 처리 방식 변경

    • AJP13 Listener에 Body가 없는 Request가 들어오거나 Chunk 방식으로 Body를 보낸 후 Body를 다시 Read할 때 -1을 리턴하도록 변경되었다. (기존에는 EOFException 발생)

3.2.5. JNDI

  • JNDI Message Protocol 변경

    • JNDI Connection을 맺을 때 Version 정보 교환 인증 후 재사용할 때 불필요한 Security 정보를 교환하지 않도록 변경하여 성능을 개선하였다.

    • 하위 호환성을 위해 jeus.jndi.compat 옵션을 설정해야 한다.

  • InitialContext 공유하는 경우 성능저하 문제 수정

    • InitialContext를 공유해서 사용할 때 성능저하의 원인이 되는 synchronized를 삭제하여 부하 상황에서 병렬처리가 가능하도록 성능을 개선하였다.

3.2.6. Transaction

  • Transaction 전파 및 관리 과정에 필요한 불필요한 절차를 최적화하여 성능 개선

    • prepare의 내부 2단계인 beforeCompletion, prepare를 하나로 합쳐서 처리하도록 변경되었다.

    • 특별한 설정 없이 하위 호환성을 유지한다.

  • TM Log File이 깨졌다 하더라도 옵션에 따라 boot가 가능하도록 지원

    • JEUS TM Log 중 1번 로그가 삭제된 경우 booting에 실패하던 것을 jeus.tm.ignore.broken.log.file 옵션을 true로 설정한 경우 장애로 판단하고 일부가 삭제된 TM Log File 전체를 삭제한 뒤 정상적으로 booting되도록 수정되었다.

    • 2번 로그가 삭제된 경우는 장애로 판단하지는 않지만 나머지 파일을 삭제하고 정상적으로 booting된다.

    • 파일을 삭제하지 못하는 경우는 boot에 실패하지만 파일 삭제를 가이드한다.

3.2.7. JDBC

  • Server가 Cluster에 속한 경우 Server와 Cluster의 유효 Datasource를 일치시키는 기능 변경

    • Fix#1에 추가된 기능으로 Server가 Cluster에 포함되면 Server의 datasource를 사용하지 못하게 되고 Cluster의 datasource를 사용하도록 자동으로 변경되는 기능을 Fix#0과 같이 각 Server는 자신에게 설정된 Datasource와 Cluster에 설정된 Datasource를 모두 사용할 수 있도록 변경되었다.

  • ONS를 이용한 Cluster DataSource의 Failover / Failback 지원

    • DB가 Oracle인 경우 ONS를 통하여 DB failure 및 revival에 대한 notification을 받아서 Cluster DataSource의 Failover / Failback을 개선하였다.

  • DataSource 기본 Binding 방식 변경

    • DataSource를 Target Server에 default로 local bind하도록 변경하였다.

3.2.8. WebAdmin

  • WebAdmin 속도 개선

    • MS가 늘어날 수록 WebAdmin 반응 속도가 급격하게 느려지는 문제를 해결하였다.

  • Login할 때 브라우저에서 Password를 저장하지 못하도록 변경

    • Login 후 브라우저가 입력한 ID/PWD를 저장하지 못하도록 변경되었다. (HTML5를 지원하는 브라우저만 지원)

  • Lock을 다시 얻는 경우 경고 메시지를 출력하도록 변경

    • 외부에서 해제된 Lock을 다시 얻는 경우 기존의 편집정보가 사라지게 되므로 경고 메시지를 출력하도록 변경되었다.

  • Runtime Info 팝업 화면에서 링크 및 버튼을 disabled하도록 변경

    • Runtime Info 팝업 화면에서 링크 및 버튼을 클릭하는 기능은 불필요한 기능이므로 사용하지 못하도록 수정되었다.

3.2.9. Security

  • lockuser / unlockuser로 변한 subject의 상태를 확인하는 기능 추가

    • lockuser / unlockuser를 수행한 후 해당 subject가 lock된 상태인지 unlock된 상태인지를 쉽게 알 수 있도록 현재 subject의 lock 상태를 확인할 수 있는 기능이 추가되었다.

3.2.10. JMS

  • 하나의 JMS Session에서 multi-thread-context를 사용할 수 없도록 변경

    • Multi thread로 동시에 하나의 JMS Session에 접근 가능했지만, 이를 클라이언트에 적절한 Exception을 던져주도록 수정되었다.

3.2.11. EJB

  • JEUS에 의해 생성되는 EJB Class의 명명규칙 변경

    • JEUS에 의해 생성되는 HomeImpl, ObjectImpl Class 이름에 Bean Name 반영하여 생성하도록 변경되었다.

3.2.12. Tool

  • Windows Service 변경

    • JEUS 7 구조에 맞게 Windows Service 기능을 변하였다. (Service 자체의 동작은 이전 버전과 동일하다)

3.2.13. Session Server

  • Session Server의 네트워크 사용량 감소

    • 내부 통신의 최적화로 네트워크 사용량을 감소시켰다.

  • 부하 상황에서 JEUS Session Manager의 동작 변경

    • Connection Fail이 지속적으로 발생할 경우나 Fail 이후 재기동될 때 deploy가 시작되지 않았을 경우 해당 Session Server로 연결을 하지 않도록 변경되었다.

    • Connection Fail이 발생한 경우, Selector Thread가 지속적으로 증가할 경우, Start된 Endpoint만 stop하지 않고 null이 아닌 경우 모두 Stop을 호출하도록 변경되었다.

    • 부하 상황에서 Session Backup이 발생할 경우 서비스를 우선 처리하여 응답속도를 높이는 옵션이 추가되었다.

3.3. 버그 수정

본 절에서는 JEUS의 모듈별 버그 수정사항을 정리한다.

3.3.1. Deployment

  • EAR deploy할 때 JAR가 많은 경우 deploy 시간이 오래 걸리는 문제 수정

    • JAR(EJB module) Deploy를 할 때 매번 자신의 archive의 모든 class list를 class loader에 register하던 것을 모든 EJB module의 Deploy가 끝났을 때 EAR에서 한번만 하도록 변경하여 Deploy 시간을 단축시켰다.

  • EAR이 application.xml을 가지고 있지 않은 경우 내부의 directory mode module을 detect하지 못하는 문제 수정

  • EJB DD에 ejb-local-ref가 설정된 경우 annotation의 정보를 DD의 정보로 override해 주지 않는 문제 수정

  • all target으로 deploy하는 경우 모든 Server에 deploy되는 문제 수정

  • Redeploy 수행 중 Redeploy에 실패할 경우 Old Application으로 올바르게 rollback되지 않는 문제 수정

3.3.2. WebEngine

  • web.xml 파일이 없으면 무조건 JSP 2.3으로 인식하는 문제 수정

  • jeus-web-dd.xml에 jsp-engine이 일부 기능이 설정된 경우 domain.xml의 jsp-engine에 설정된 값이 기본값으로 변경되는 버그 수정

  • 서로 다른 JSP 파일이 같은 tag 파일을 참조할 경우 한쪽 JSP 파일에서 tag 파일을 컴파일하는 동안 다른 쪽에서 클래스 파일을 찾는 문제 수정

  • in-memory-jsp를 컴파일할 때 WEB-INF/class 안에 Java 파일이 있는 경우 컴파일하는 문제 수정

  • jeus.servlet.out.ensureContentOrder 설정이 동작하지 않는 문제 수정

    • ServletOutputStream, response의 Writer, jsp에서 사용하는 out(JspWriter) 간의 순서를 보장해주는 옵션(jeus.servlet.out.ensureContentOrder)이 동작하지 않는 문제를 수정하였다.

  • response.setCharacterEncoding()을 호출할 때 encoding/response-encoding/forced 설정이 적용되지 않는 문제 수정

    • domain.xml과 jeus-web-dd.xml에 encoding/response-encoding/force 설정이 적용되어 있는 경우 setContentType(), setLocale(), response.setCharacterEncoding()에 적용되어 있는 encoding 설정이 무시되어야 하지만 response.setCharacterEncoding() 설정은 무시되지 않는 문제를 수정하였다.

  • content-type 응답 헤더에 charset 설정이 없는 경우 charset을 설정하면 안 되는데 chartset=ISO8859-1로 설정되는 문제 수정

  • jeus-web-dd.xml에 설정한 <response-encoding><default> 설정이 domain.xml의 <response-encoding><forced> 설정을 치환하지 않는 문제 수정

  • Servlet 3.0에서 ParentServlet와 ChildServlet이 존재하는 경우 ParentServlet의 설정을 사용하는 문제 수정

  • Web fragment에 정의된 <error-page>가 동작하지 않는 문제 수정

  • HttpServletRequest.login(), logout()에서 remoteUser, userPrincipal, authType이 정상적으로 설정되지 않는 문제 수정

  • Servlet 3.0에서 ServletSecurity Annotation이 없는 Servlet에서도 항상 Security 설정이 되어 ResourcePermission이 되는 문제 수정

  • @ServletSecurity가 없는 Servlet임에도 불구하고 무조건 Security 관련 작업을 하려고 하여 ResoucePermission에 “/”가 추가되는 문제 수정

  • web.xml에 같은 이름을 가진 두 개 이상의 context-param이 존재하고 서로 다른 값을 가지는 경우 오류가 발생하지 않았던 문제 수정

  • JSP에서 Extends Attribute를 사용할 때 Package를 명시하지 않으면 class를 import하는 문제 수정

  • content-type에서 charset 이후에 설정된 문자를 encoding으로 가정하여 Multiple parameter가 동작하지 않는 오류 수정

  • jeus.servlet.jsp.reload=false일 경우 Context Reload 또는 서버 부팅 이후 <check-included-jspfile> 처리가 안 되는 문제 수정

  • URI가 '/'로 끝나는 요청에 대한 welcomefile을 처리할 때 filter가 적용되지 않는 문제 수정

    • 이 오류를 수정하기 위하여 호환성 옵션(jeus.servlet.filter.applyOnWelcomeFileRequest)을 추가하였다.

    • 기본값은 true이고 false로 설정하면 welcomefile에 대한 filter가 적용되도록 한다.

  • Reverse Proxy를 사용할 때 Transfer-Encoding:Chunked와 Content-Length 헤더가 동시에 전달되는 문제 수정

  • HTTP Listener에서 HTTP 1.1 연결이면 항상 KeepAlive로 취급하는 문제 수정

  • Graceful Redeployment 이후 세션 ID가 여러 개인 경우(웹 브라우저의 탭 기능)를 고려하지 않아 old와 New Application의 호출순서가 보장되지 않는 문제 수정

  • jeus-web-dd.xml에 설정한 jeus.servlet.ensure.contentlength 옵션이 적용되지 않는 문제 수정

3.3.3. WebAdmin

  • xml export 기능을 사용하는 경우 " 등의 문자가 escape해서 출력되는 문제 수정

  • TextArea에 “, & 등의 문자를 넣는 경우 escape해서 랜더링하는 문제 수정

    • JVM option과 같은 TextArea나 XML export 기능을 사용할 때 escape해서 랜더링되는 문제를 수정하였다.

  • error page에 대해서 인코딩 설정이 정상적으로 적용되지 않는 문제 수정

3.3.4. Server

  • HP-UX에서 file lock을 잡지 못하는 문제 수정

    • HP에서 하나의 Application을 2개 이상의 MS에 동시에 deploy하게 되는 경우 permission denied 발생되는 문제를 수정하였다.

  • serverName.state 파일에 잘못된 State가 기록될 경우 NodeManager가 부팅되지 않는 문제 수정

    • 사용자가 파일의 내용을 수정하였거나 Empty String일 경우 NodeManager를 부팅할 때 Exception이 발생하여 부팅이 실패했던 문제를 수정하였다.

  • NodeManager를 통해 Server를 기동할 때 licence check 문제 수정

    • NodeManager를 통하여 Server를 부팅할 때 license check해서 만료된 경우 NodeManager가 부팅되지 않도록 수정되었다.

  • IBM JDK 7으로 IIOP 설정된 EJB를 호출하는 경우 Exception이 발생하는 문제 수정

    • 해당 버그는 Glassfish Corba library를 최신 버전으로 변경하여 해결되었다.

  • add-server를 수행할 때 node 옵션을 주고 NodeManager를 설정하면 Server 상태가 UNKNOWN으로 나오는 문제 수정

  • Java NodeManager를 사용할 때 list-nodes 명령에서 정보가 잘못 보여지는 문제 수정

    • list-nodes 명령에서 Under Control, Jeus Version 값이 정상적으로 보이지 않는 문제를 수정하였다.

  • Configuration을 조회하는 콘솔 command에서 불필요한 lock을 잡는 문제 수정

    • Show command에 대해서는 lock을 얻지 않고 XML에서 정보를 보여주도록 수정되었다.

  • command line에서 argument로 준 시스템 property가 적용이 안되는 문제 수정

  • ServerInfo를 수행할 때 Runtime Listener 정보들을 보여주지 못하는 문제 수정

  • Cluster 추가, 삭제할 때 처리하는 query의 순서로 인하여 정상적으로 처리되지 않던 문제 수정

3.3.5. EJB

  • Cluster EJB를 lookup할 때 Home Stub을 가져오려다 javax.naming.ServiceUnavaliableException 발생하는 문제 수정

    • lookup하려는 Server가 alive하지 않을 때 ServiceUnavailableException이 발생하는데, 해당 Exception이 Failover되지 않아 JNDI Failover되도록 수정하였다.

3.3.6. WebService

  • 서로 다른 서버 머신 간에 WebService Transaction이 동작하지 않는 문제 수정

  • 서버에 WebtoB가 설정되어 있으면, WebService에서 사용하는 Http Port를 WebtoB Port로 사용하는 문제 수정

  • SSL 상호인증 설정 중 CN 정보 관련 오류 수정

    • SSL 상호인증 설정 중 CN 정보가 localhost가 아닐 경우, Web Service의 wsimport 및 클라이언트 Runtime에 java.security.cert.CertificateException: No name matching localhost found가 발생하는 문제를 수정하였다.

3.3.7. JNDI

  • Cluster를 동적으로 추가, 삭제할 때 JNDI에서 필요한 Cluster Listener가 등록, 해제되지 않는 문제 수정

  • Cluster Context를 만들어 lookup하고 close하는 작업에 부하를 주면 NPE가 발생하는 문제 수정

    • 각 Thread에서 생성된 Cluster Context에 대한 Context Map이 공유가 되는데 이미 Close된 Context를 사용하려고 시도할 때 NPE가 발생하는 문제를 수정하였다.

3.3.8. JMS

  • Custom Class를 사용할 때 ClassNotFoundException이 발생하는 문제 수정

    • Application에서 정의한 Custom Class가 loading된 ClassLoader와 MessageListener의 onMessage()를 수행하는 Thread의 ContextClassLoader가 달라서 ClassNotFoundException이 발생하는 문제를 수정하였다.

  • JMS Deadlock 문제 수정

    • JeusPooledConnection의 close 과정과 JeusPooledConnectionFactory의 PooledConnection 정리 과정에서 lock을 서로 반대로 잡아서 발생하던 Deadlock 문제를 수정하였다.

3.3.9. Logging

  • JEUS_HOME이 file separator와 다르게 설정된 경우 log rotation이 되지 않는 문제 수정