제2장 JEUS 7 Fix#5

내용 목차

2.1. 신규 기능
2.1.1. Deployment
2.1.2. JDBC
2.1.3. JMS
2.1.4. Server
2.1.5. Servlet
2.1.6. Session Server
2.1.7. Tool
2.1.8. WebAdmin
2.1.9. WebService
2.1.10. Installer
2.2. 변경 기능
2.2.1. Deployment
2.2.2. EJB
2.2.3. IO
2.2.4. JDBC
2.2.5. JMS
2.2.6. JNDI
2.2.7. NodeManager
2.2.8. Server
2.2.9. Servlet
2.2.10. Tool
2.2.11. WebAdmin
2.2.12. WebService
2.2.13. Windows Service
2.3. 버그 수정
2.3.1. CDI
2.3.2. Deployment
2.3.3. EJB
2.3.4. IO
2.3.5. JDBC
2.3.6. JMS
2.3.7. JMX
2.3.8. JNDI
2.3.9. NodeManager
2.3.10. Security
2.3.11. Server
2.3.12. Servlet
2.3.13. Session Server
2.3.14. Tool
2.3.15. Transaction
2.3.16. WebAdmin
2.3.17. 기타

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

2.1. 신규 기능

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

2.1.1. Deployment

  • deploy target이 all-target인 경우 DAS에는 deploy되지 않도록 하는 기능 추가

    • application deploy를 all target으로 설정하는 경우 모든 서버에 deploy가 되는데 DAS에는 deploy가 되지 않도록 하는 기능이 추가되었다.

    • -Djeus.deploy.exclude.das 시스템 프로퍼티로 설정할 수 있다.

  • redeploy 시 Application DD를 upgrade하는 기능 추가

    • 구 버전 Application DD가 설정된 Application을 redeploy하는 경우 자동으로 Application DD 파일을 업그레이드하여 redeploy하는 기능이 추가되었다.

2.1.2. JDBC

  • DB Connection Leak 발생 시 Connection 연결반환 및 강제끊기 기능 추가

    • DB Connection Leak 발생 시 Connection을 수동으로 연결을 반환하는 기능과 강제로 끊는 기능이 추가되었다.

      • 연결반환 : return-connection

      • 강제끊기 : destroy-connection

    • connection을 사용 중인 서버 이름을 필수로 넣어야 하며, -cid(connection id) 혹은 -cpid(connection pool id) 옵션을 사용하여 return, destroy하고자 하는 connection, pool을 지정하여 사용하면 된다.

  • DB Connection Leak 발생 시 관리자에게 메일발송 기능 추가

    • SMTP Handler를 설정한 후 Action On Resource Leak 설정이 Warning이거나 AutoClose인 경우 Connection Leak 발생하는 경우 메일을 발송하는 기능이 추가되었다.

  • Connection Pool info 통계값 추가

    • Connection Pool Info로 Connection의 정보를 출력해주는 통계값이 추가 되었다.

      항목설명
      Active Max서버 기동 이후로 active한 Connection이 동시에 맺어진 최대 수를 출력한다.
      Active Average최근 한 시간 동안 active한 Connection이 맺어진 수의 평균을 출력한다.
  • Cluster DS의 Backup DataSource Connection을 정리해 주는 기능 추가

    • Cluster DS를 사용하는 경우 Failback되었을 때 Failover되었던 Backup DataSource의 Connection을 정리해 주는 기능이 추가되었다.

2.1.3. JMS

  • JMS Clustering 기능 중 Async Consumer 지원기능 추가

    • JEUS 7 Fix#4까지는 JMS Clustering의 Message Consume 방식을 Sync 방식만 지원하였다.

    • JEUS 7 Fix#5부터는 JMS Clustering의 Message Consume 방식을 Sync 방식과 Async 방식을 둘 다 지원할 수 있도록 기능이 향상되었다.

2.1.4. Server

  • patch file 간 Class 중복이 발생할 경우, 서버 기동을 중지하는 기능 추가

    • 기존에는 patch file 내부의 Class가 겹칠 경우 Warning Message가 출력된 뒤에 JEUS가 기동되었다. patch file 내부의 Class가 겹칠 경우 Warning Message 를 출력하고 서버가 기동되지 않도록 하는 기능이 추가되었다.

    • -Djeus.boot.ignorepatchoverlap=true 옵션을 설정하는 경우 patch file의 class 중복이 발생하더라도 기존처럼 Warning Message를 출력한 후 정상 기동된다.

  • File Handler의 Log Permission 기능 추가

    • 보안상의 이유로 로그 파일의 접근 권한을 변경할 필요가 있다.

      File Handler에 대해서만 jeus.log.file.permission 시스템 프로퍼티를 사용하여 파일의 권한을 지정한다. 시스템 프로퍼티는 읽기권한(r), 쓰기권한(w), 실행권한(x), 권한없음(-)으로 지정하며, 소유자, 그룹, 공개 권한을 지정한다.

      예: rwx-rw-rw- 
    • 해당 기능은 JEUS를 JDK 7 이상에서 실행할 때만 사용할 수 있다.

  • 서버가 STANDBY 상태로 기동된 경우 Deploy를 재시도할 수 있는 기능 제공

    • 서버를 기동하는 경우 Application 배포가 제대로 되지 않는 경우 STANDBY로 기동되면 문제를 수정한 후 start-server 명령 등을 통해 RUNNING 상태로 변경해야 된다. 배포 로직 상 문제로 STANDBY로 기동되는 경우 재시도가 의미가 있을 수 있다.

    • jeus.server.standby.retrycount, jeus.server.standby.retryinterval 시스템 프로퍼티를 사용하여 재시도 횟수와 간격을 지정할 수 있는 기능이 추가되었다.

  • server-log command 에 검색 옵션으로 base time + end time 추가

    • 로그의 검색방법은 start time부터 line 만큼 가져오는 것 만을 지원하였으나, base time + end time 형태로 일정 시간 안에 발생한 로그를 가져오는 기능이 추가되었다.

  • Term Type License 지원

    • 정식 라이선스에 Expire Date를 설정할 수 있는 Term Type License를 지원한다.

2.1.5. Servlet

  • set-cookie 헤더에 SameSite 속성 추가

    • Server - WebEngine - Session Config 페이지에 Same Site를 Lax, Strict으로 설정할 수 있는 기능이 추가되었다. (기본값: None)

  • appinfo 명령에 virtual host 항목 추가

    • appinfo 명령에 virtual host에 Deploy되어있는 App 정보를 확인할 수 있는 기능이 추가되었다.

  • Thread 평균 개수를 확인할 수 있는 기능 추가

    • Thread 평균 개수를 확인할 수 있는 기능이 추가되었다.

      항목설명
      current thread count현재 동작 중인 thread 개수
      Min thread count최소 thread 개수
      Max thread count최대 thread 개수
      Average count

      thread monitoring 주기마다 현재 current thread count를 1시간을 모니터링 주기로 나눠 버퍼에 쌓은 평균값

      (Monitoring thread가 동작이 길어지면 thread monitoring 주기가 지나고 다음 모니터링 thread가 동작하기 때문에 실제로 해당 값이 정확하게 일치하지 않는다.)

      Real max thread countCurrent thread count 중에서 가장 높은 개수
    • Application이나 Thread Monitoring 주기에 따라 실제 모니터링 되는 값과 차이가 있을 수 있다.

  • Spring 용 WebSocket upgrade handler 제공

    • lib/shared/spring-support/에 library 형태로 제공되며 shared library 형태로 사용한다.

    • 다음과 같이 Spring 설정 파일에 handshakeHandler를 등록하여 사용한다.

      <websocket:handlers>
        <websocket:handshake-handler ref="handshakeHandler"/>
      </websocket:handlers><bean id="handshakeHandler" class="jeus.spring.websocket.JeusHandshakeHandler"/>

2.1.6. Session Server

  • Handover 기능 추가

    • Cloud 환경 지원을 위해 서버가 Scale-In이 되어 MS가 제거되었을 때 제거된 MS의 세션을 살아있는 서버에게 전송해주는 Handover 기능이 추가되었다.

    • -Djeus.sessionmanager.use.handover 시스템 프로퍼티를 이용하여 설정할 수 있다.

  • Session 이 복원될 때까지 Server 의 기동을 기다리는 옵션 추가

    • JEUS 기동 과정에서 Session 복원이 완료되기 전에 서비스가 진행되어 오류가 발생할 가능성이 있었다. Session 복원이 완료된 뒤에 서비스가 진행되도록 Deploy를 지연시키는 설정이 추가되었다.

    • -Djeus.sessionmanager.cluster.stable.waiting.sec 시스템 프로퍼티를 사용하여 설정할 수 있다.

2.1.7. Tool

  • unpack-domain 명령에 overwrite 옵션 추가

    • unpack-domain 명령어에 overwrite 옵션을 추가하여 디렉터리를 지우지 않고 압축을 풀 수 있는 기능을 추가하였다.

    • JEUS 7 FIx#4까지는 unpack-domain 명령어는 기본적으로 대상 도메인이 존재하면 unpack-domain을 할 수 없다.

2.1.8. WebAdmin

  • 패스워드 항목의 암호화창 지원

    • SMTP handler, WebtoB Connector의 패스워드 항목에서 암호화창을 지원하도록 수정되었다.

  • WebAdmin에서 명시적으로 도메인 설정을 백업하는 기능 추가

    • Domain page에 [backup domain] 버튼을 추가하여 Backup Dir 설정과 Node Name 설정에 따라 원하는 타이밍에 pack-domain 명령을 수행할 수 있다.

  • WebAdmin의 context-path를 변경하는 기능 추가

    • 보안상의 이유로 WebAdmin의 context-path를 변경하는 기능이 추가되었다.

    • DAS 에 -Djeus.domainadminserver.webadmin.contextpath 시스템 프로퍼티를 이용하여 설정할 수 있다.

  • WebtoB connector 생성 시 duplication 기능 추가

    • WebAdmin에서 WebtoB connector를 생성하는 경우 등록되어 있는 WebtoB connector의 [DUP] 버튼으로 duplicate하여 생성할 수 있는 기능이 추가되었다.

  • DataSource 생성 시 duplication 기능 추가

    • WebAdmin에서 DataSource를 생성하는 경우 등록되어 있는 DataSource의 [DUP] 버튼으로 duplicate하여 생성할 수 있는 기능이 추가되었다.

  • Cluster DS 사용 시 Component DataSource의 우선순위를 설정할 수 있는 기능 추가

    • 기존에는 Component DataSource의 우선순위를 WebAdmin에서 설정하지 못하고 domain.xml을 수정해야 했으나, WebAdmin에서 우선순위를 설정할 수 있는 기능이 추가되었다.

  • Server를 multi start, stop할 수 있는 기능 추가

    • 여러 대의 서버를 선택하여 한 번에 start, stop할 수 있는 기능이 추가되었다.

2.1.9. WebService

  • JAX-WS에서 WSDL 2.0 지원

    • JAX-WS 구현체는 WSDL 2.0 Model을 가지고 있지 않기 때문에 WSDL 2.0 File을 WSDL 1.0 File로 전환하여 적용하는 방식으로 지원한다.

  • JAX-RPC document/literal 방식에서 Array Wrapper return type 지원

    • WebService Endpoint implemention의 array type을 WSDL의 array wrapper return type으로 적용할 수 있는 기능을 지원한다.

2.1.10. Installer

2.2. 변경 기능

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

2.2.1. Deployment

  • EAR Deploy 시 모듈을 찾는 범위 변경

    • EAR Deploy 시 모듈을 찾기 위해 내부 jar 및 클래스를 검사한다. 이때 application.xml이 존재하는 경우에는 application.xml에 명시된 모듈에 대해서만 검사하도록 기능이 수정되었다.

  • Application Install 시 확장자를 검사하도록 기능 변경

    • 보안상의 이유로 Application을 설치하는 경우 WAR, JAR, EAR, RAR의 확장자를 가진 파일만 설치되도록 변경되었다.

2.2.2. EJB

  • 부팅 시 Concurrent Deploy 로 인하여 EJB Compile 이 실패하는 문제 수정

    • 서버를 부팅하는 경우 등록된 Application이 여러 개인 경우 Concurrent Deploy가 수행되는데, EJB의 경우 각각의 Bean별로 Home과 Object Compile이 Thread 단위로 수행되던 중 Compile에 실패하는 경우가 있다.

    • Compiler가 Thread Safe하지 않기 때문에 발생하는 문제로 Lock을 잡아 Compile Error를 방지하도록 수정하였다.

  • EJB Failover를 수행하는 Exception 수정

    • UnknowHostException, ConnectionIOException에 대해서 Failover가 가능하도록 수정되었다.

  • EJB Clustering에서 비정상적으로 종료된 서버에 대한 Dynamic Link Ref의 update 동작 수정

    • EJB Clustering 중 동적 삭제하는 경우 비정상적으로 종료된 서버가 존재하는 경우 Cluster를 전체 동시 재기동하지 않으면 정보가 계속 남아있어 삭제된 서버로의 접근을 시도하는 현상이 발생한다.

    • 서버 재부팅 후 다른 서버로부터 replication받을 때 DLR의 경우 강제 종료된 서버의 link를 삭제하도록 수정하였다.

2.2.3. IO

  • port bind 시점 변경

    • base listener를 제외한 나머지 listener들의 port binding 시점이 변경되었다. port binding과 동시에 서비스가 가능하도록 모든 엔진의 기동이 끝난 이후로 변경되었다.

2.2.4. JDBC

  • RAC 환경에서 DataSource 선택 방식 변경

    • RAC 환경에서 Transaction을 사용하는 경우 Round Robin 방식으로 DataSource를 선택하는 방식에서 TX의 gtid hash 값으로 DataSource를 선택하는 방식으로 바뀌어 DB Lock이 걸릴 가능성을 감소시켰다.

  • XA DataSource를 Cluster DS로 사용하는경우 pool의 Fail 여부를 알 수 있도록 개선됨

    • 기존에는 Connection Pool DataSource만 지원했던 기능으로 XA DataSource에서도 지원하도록 변경되었다.

  • MS jeusadmin에 connection-pool-info console 명령어 추가

    • DAS jeusadmin에서만 가능했던 connection-pool-info console 명령어가 MS jeusadmin에서도 가능하도록 수정되었다.

2.2.5. JMS

  • Message rollback 이 무한대로 이루어지도록 수정

    • JEUS 7 FIx#4까지는 rollback count까지만 rollback하고 뒤로는 JEUSMQ_DLQ로 메시지가 들어가게 되어 있었다. (Default Rollback count = 3)

    • JEUS 7 FIx#5부터는 Rollback count 값과 상관 없이 Message rollback이 무한대로 이루어지도록 변경되었다.

2.2.6. JNDI

  • Clustering Manager의 Fail List 관리 개선

    • ClusterManager에서 Fail List에 두 개 이상의 Thread가 접근하여 갱신하려 할 경우 ConcurrentModificationException이 발생할 가능성이 있다.

    • 이 문제를 방지하기 위하여 Fail List를 다룰 때 Sync로 Lock을 걸어 보호하도록 수정하였다.

  • Cluster에서 서버가 제거되면 Failed Server List에서 해당 서버를 제거하도록 변경

    • Fail List에서는 Fail된 서버의 리스트를 가지고 있다.

    • Cluster에서 제거된 Server의 경우 Fail List에서 계속 가지고 있을 필요가 없기 때문에 Fail List에서도 제거하도록 변경하였다.

  • JNDI Cluster에서 getAliveContext 시 Fail List의 서버 목록을 갱신하는 로직 수정

    • Cluster된 JNDI에서는 Fail List를 관리하고 있다가 서버가 살아났다고 판단되는 경우 서버를 List에서 삭제한다. 이 과정에서 JNDI 연결이 끊겼음에도 SCF에 의해 서버가 살아있다고 판단하는 경우가 발생한다.

    • SCF가 살아있다고 판단하는 경우에도 JNS Connect를 한 번 시도하여 Fail List를 갱신하도록 수정하였다.

2.2.7. NodeManager

  • NodeManager의 listen host 기본값을 localhost에서 0.0.0.0으로 변경

    • DAS가 리모트에 존재하는 경우 NodeManager로 접속이 되지 않는 경우가 있어서 listen host의 기본값을 localhost에서 0.0.0.0으로 변경하였다.

  • -stopServer 옵션 사용 시 RUNNING이 아닌 서버도 내리도록 변경

    • 기존에는 stopNodeManager 명령에 -stopServer 옵션을 사용 하는 경우 RUNNING이 아닌 서버는 내려가지 않도록 되어 있었지만, 이를 변경하여 모든 서버가 내려가도록 변경되었다.

2.2.8. Server

  • JEUS Logger의 use parent handlers 항목 변경 시 에러 메시지가 출력되며 변경되지 않도록 수정

    • 원래 JEUS Logger의 use parent handlers 옵션은 설정이 불가능한 옵션이지만, 에러 메시지를 출력하여 설정이 불가능하다는 사실을 알기쉽게 변경하였다.

    • WebAdmin에서도 해당 항목의 checkbox가 disable로 변경되었다.

  • License 정보 확인 시 출력정보 변경

    • License 정보를 출력하는 경우 Real License와 Trial(developer) License에는 Expire Day를 출력하지 않게 변경되었다.

    • Trial License에는 EDITION, ISSUE-DAY, LICENSE SEQNO가 출력된다.

    • Real License에는 EDITION, ISSUE-DAY, CPU, HOST-NAME, LICENSE SEQNO가 출력된다.

    • Term License에는 EDITION, DUE-DAY, ISSUE-DAY, CPU, HOST-NAME, LICENSE SEQNO가 출력된다.

  • jeusadmin과 bootscript의 cache login이 동일하게 동작하도록 변경

    • cachelogin 옵션을 사용하는 경우에만 cachelogin 기능을 사용한다.

    • -u, -p(user, password) 옵션을 사용하는 경우 .jeuspasswd 파일이 업데이트되며 사용하지 않는 경우 업데이트하지 않는다.

    • -f, -host 옵션은 선택적으로 사용할 수 있다.

  • stopServer에서 domain과 filename을 받을 수 있도록 수정

    • stopServer 명령에 -f, -domain 옵션 추가하여 domain name과 filename을 받을 수 있도록 수정하였다.

  • pack-domain 기능 개선

    • pack-domain 명령어에 node 옵션을 추가하여 원격 노드에 domain backup을 수행 할 수 있도록 개선되었다.

    • 해당 기능도 boot-time backup 기능과 동일하게 JAVA NodeManager에서만 지원한다.

  • JEUS Rotation Log 파일명 표시방법 개선

    • log rotation, valid-hour를 설정하는 경우 rotation name에서 로그 생성 시간대를 확인하기 쉽도록 파일명에 시간(24시간 기준)을 표시하도록 개선하였다.

    • 로그 파일명은 JeusServer_yyyyMMdd_HH.log[0000] 형태로 변경되었다.

  • domain.xml의 File Lock을 세분화해서 잡을 수 있도록 개선

    • 서로 다른 서버 간에 Lock을 공유하여 다른 서버에서 하나의 파일에 동시에 기록하여 파일이 깨지는 문제를 방지하는 기능이 있다.

    • 현재 Lock이 광범위하게 잡혀있어 서버의 부팅이 concurrent하게 처리되지 않았기 때문에 파일 접근시간의 Lock을 최소화하도록 수정되었다.

  • JEUS 내부 엔진 기동 및 정지 순서 정리

    • 이전 버전까지의 엔진 기동 순서는 EJB → JMS → WEB 순으로 되어 있었다.

      신규 버전에서는 JMS를 EJB와 WEB에서 사용할 수 있으므로 JMS → EJB → WEB 순서로 변경하였다.

    • 다운 순서는 서버 다운 중 EJB 엔진이 내려갈 때 JMS 자원 정리 중 JMS 엔진이 없는 경우가 발생할 수 있어 WEB → EJB → JMS 순서로 변경하였다.

  • ASM 바이너리 버전 업데이트

    • ASM 바이너리 버전을 5.0.4로 업데이트하였다.

    • 이전 ASM 버전(4.2)은 JDK 8을 지원하지 않아서 업데이트하였다.

  • ConfigurationLock 에서 사용자를 비교하는 방법 수정

    • 현재 Lock을 가지고 있는 사용자와 Lock을 얻으려고 하는 사용자가 동일한지 비교하기 위해 principal 값을 비교하도록 수정하였다.

  • server-info 명령의 서버 가동시간 계산방법 변경

    • JEUS 7 FIx#4까지는 ServerStateInfo 객체 생성 시간을 사용했기 때문에 DAS를 재기동할 경우 MS 가동 시간이 초기화되었다.

    • JEUS 7 FIx#5부터는 GMS를 기준으로 시작 시간을 얻어와 가동 시간을 계산하기 때문에 DAS를 재기동해도 MS 가동 시간이 초기화되지 않도록 변경되었다.

  • Configuration Lock을 획득하지 못했을 경우 대기하는 기능 제공

    • 동적 설정변경을 위한 Lock 획득에 실패할 경우 바로 예외를 던지지 않고 일정 시간만큼 대기할 수 있는 기능을 추가하였다.

    • 대기시간 timeout 설정은 jeus.config.lock.timeout 프로퍼티로 설정한다. (기본값: 60000(ms))

    • JMX 요청 Thread pool 설정은 jeus.jmx.worker.max 프로퍼티로 설정한다. (기본값: 20)

  • delete-domain 명령 시 현재 접속 중인 서버의 도메인은 삭제하지 못하도록 변경

    • 기존에는 delete-domain 명령을 수행하면 접속 중인 서버의 도메인도 삭제되었으나 삭제하지 못하도록 변경하였다.

  • stopServer 명령 시 host 값 기본값 수정

    • stopServer 명령을 수행할 때 host를 입력하지 않는 경우 기본값으로 localhost:9736이 적용되도록 스크립트가 수정되었다.

  • DAS가 포함된 Cluster를 stop하는 경우 DAS를 제외하고 stop하도록 수정

    • 기존에는 DAS가 포함되어 있는 Cluster를 stop하면 DAS도 stop되어 DAS가 내려갔으나 DAS를 제외하고 stop하도록 수정되었다.

2.2.9. Servlet

  • appinfo 명령어 개선

    • appinfo -detail 명령어로 deploy Application의 class loading 옵션 정보를 확인할 수 있도록 개선하였다.

  • TCP Listener의 OOM 발생문제 수정

    • TCP 관련 Application을 HTTP URL로 호출할 경우 OOM(Out Of Memory)이 발생하였다.

    • TCP Listener의 Max Post Size를 설정하고 해당 값보다 Size가 클 경우 로그를 남기고 호출을 종료하도록 수정되었다.

  • webtob-connect thread 정보에 연결된 IP 정보 표시 추가

    • JEUS 7 FIx#4까지는 WebtoB Thread state만 확인 가능하였다.

    • JEUS 7 FIx#5부터 WebtoB Thread마다 연결된 WebtoB의 IP와 Port를 확인할 수 있도록 기능이 향상되었다

  • JSP에 Http 메소드 체크로직 추가

    • JSP나 Resource에 대한 요청(Resource Servlet)의 경우에도 Http 메소드를 체크하여 허용되지 않은 메소드인 경우 501 에러를 발생시켜 요청을 제한하는 옵션이 추가되었다.

    • -Djeus.servlet.jsp.allowOnlyStandardizedMethod 시스템 프로퍼티를 사용하여 설정할 수 있다. (기본값: false)

  • check-inlcuded-jspfile, read-timeout 기본값 변경

    • 엔지니어 요청 사항으로 check-inlcuded-jspfile의 기본값을 true로 변경하였다.

    • 엔지니어 요청 사항으로 WebtoB connector의 Default Read Timeout 값을 0초에서 120초로 변경하였다.

  • EL parser에서 overloaded된 메소드나 생성자(constructor)에 대한 validation을 엄격하게 하도록 수정

    • EL parser 적용 룰이 엄격해짐에 따라 메소드 이름 및 파라미터 개수뿐만 아니라 파라미터 타입까지 비교하도록 수정하였다.

2.2.10. Tool

  • jeusadmin에서 connect 명령 사용 시 host의 기본값이 사용되도록 변경

    • jeusadmin의 connect 명령어를 사용하는 경우 host를 입력하지 않아도 localhost를 기본값으로 사용하도록 변경되었다.

  • modify-web-engine-configuration 명령의 access log 관련 옵션 처리방법 개선

    • modify-web-engine-configuration 명령 중 access log 관련 옵션(enable, format, exclude ext, host name lookup)들은 한 번에 여러 가지 옵션에 대하여 동시에 설정할 수 있도록 개선되었다.

  • server-info command의 날짜표시 포맷 변경

    • JEUS 7 FIx#4까지는 server-info command의 날짜표시 포맷을 locale에 설정된 언어를 기준으로 반영되었다.

    • JEUS 7 FIx#5부터 jeus.properties에 설정된 JEUS_LANG 설정에 따라 server-info에 출력되는 날짜의 언어 종류가 결정되도록 변경되었다.

  • jeusadmin에 license seq no 확인 기능 추가

    • jeusadmin -licenseinfo 결과에 라이선스의 seq no를 표시하도록 수정되었다.

  • jeusadmin script mode verbose 옵션 추가

    • 기존에는 script mode를 사용하는 경우 script에서 출력한 값 이외에 기본 jeusadmin 결과 값이 함께 출력되었다.

    • jeusadmin 결과값을 제외하고 script에서 출력한 값만 보여줄 수있도록 script에 verbose 옵션(result = command("server-info", true))이 추가되었다.

2.2.11. WebAdmin

  • Webtob Connection 생성 시 Thread Pool을 0으로 설정하지 못하도록 변경

    • webtob-connector를 생성하는 경우 thread pool number를 1 이상만 입력 가능하도록 수정되었다.

    • thread pool number가 0인 경우 schema에 맞지 않아 XML 반영에 실패하게 되어 validation을 추가하였다.

  • Durable Subscriber에 설정한 Destination의 Type을 변경할 수 없도록 수정

    • JMS SPEC에 의해 Durable Subscriber의 Destination Type은 Topic만 가능하다.

      그러나 WebAdmin에서 Durable Subscriber의 Destination Type을 변경할 수 있게 구현되어 있어 Destination Type을 Queue로 변경하고 재기동할 경우 JMS Engine Fail이 발생하며 JEUS 기동에 실패하는 문제가 발생하여 Destination Type을 바꿀 수 없도록 변경하였다.

  • Connection Pool Size의 min, max의 값이 같을 경우 step validation이 적용되지 않도록 수정

    • WebAdmin에서 DataSource를 설정하는 경우 Connection Pool Size의 min, max, step 값 중 min, max 값이 같을 때 step 값은 의미가 없으나 validation이 적용되는 문제가 있어 validation이 적용되지 않도록 수정되었다.

  • Auto lock 기능을 Multi user가 접근 가능하도록 개선

    • 기존에는 WebAdmin 환경설정 중 Auto lock 기능을 사용하는 경우 Multi user가 접근하지 못하였으나, Multi user가 접근할 수 있도록 하였다.

  • Server log Monitoring 시 Server log를 base time과 end time으로 조회하도록 변경

    • 기존에는 Time과 Line으로 조회가 가능했으나, server-log command 기능 개선에 따라 WebAdmin Server log 조회 방법이 base time과 end time으로 변경되었다.

2.2.12. WebService

  • JAX-RS Runtime Library 위치 변경

    • JAX-RS Runtime Library 위치가 다음과 같이 변경되었다.

      JEUS_HOME/lib/system/* ⇒ JEUS_HOME/lib/shared/jaxrs-ri-1.4/*

  • JAX-WS Library 위치 변경

    • JAX-WS에서 Web Service Library Update를 유연하게 하기 위하여 Web Service Library 위치를 변경하였다.

      JEUS_HOME/lib/system/ ⇒ JEUS_HOME/lib/shared/wsit-2.2/

  • SAAJFactory 성능 개선 (JEUS SAAJFactory 구현)

    • WebService를 호출할 때 마다 SAAJFactory의 findResource를 찾지 않도록 SAAJFactory 구현체를 Caching하도록 수정하였다.

2.2.13. Windows Service

  • Windows Service 이벤트 로그에 command line 출력되도록 변경

    • Windows OS의 이벤트 로그에서 에러 원인을 파악할 수 있도록 이벤트 로그에 Java Command를 출력하도록 수정하였다.

2.3. 버그 수정

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

2.3.1. CDI

  • Windows에서 redeploy가 실패하는 현상 수정

    • Windows 환경에서 CDI를 사용하는 Application이 WEB-INF/lib 아래에 jar 파일을 포함하고 있을 경우 redeploy에 실패하던 문제가 수정되었다.

  • Bean을 정상적으로 생성하지 못하는 문제 수정

    • Web Application의 WEB-INF//lib/*.jar에 javax.enterprise.inject.spi.Extension을 extends한 class가 있을 경우 똑같은 Alternative를 여러 개로 인식하는 문제와 CDI로 구성된 jar인 경우 CDI로 인식하지 않아 bean을 구성하지 않는 문제가 수정되었다.

2.3.2. Deployment

  • Deploy 과정에서 XML 파일에서 오류가 발생하는 경우 파일의 경로가 출력되지 않는 문제 수정

    • Deploy 중 XML 파일에서 오류가 발생할 경우 XML 파일을 해석하는 과정에서 RuntimeException이 발생한 것으로 오류가 발생한 경로가 출력되지 않던 문제가 수정되었다.

  • upgrade 옵션 사용 시 DD파일의 JEUS 버전이 변경되지 않는 현상 수정

    • install-application, deploy-application, redeploy-application 명령에서 upgrade 옵션을 사용하는 경우 Application DD 파일의 JEUS 버전이 변경되지 않는 문제를 수정하였다.

2.3.3. EJB

  • EJB ActiveMenagement 동작 수정

    • Email Notify 설정에서 sender id, sender password, properties 항목이 설정되지 않는 문제를 수정하였다.

    • schema에서 block된 thread 개수가 설정 이상인 경우 EJB 엔진을 재시작하는 것으로 정의되어 있으나, 기능이 동작하지 않으므로 재시작 권고로 메시지를 변경하였다.

    • block thread의 통계치가 맞지 않는 부분을 수정하였다.

  • 서버 재부팅 시 Clustered EJB가 Deploy 완료되기 전의 요청이 Failover되지 않는 문제 수정

    • 서버를 재부팅하는 경우 JNDI Failed Server List에서는 서버가 제거된 상태에서 EJB Application이 Deploy되는 도중에 호출이 수행되는 경우 Failover되도록 수정되었다.

  • Cluster의 일부 서버가 살아있음에도 Failover가 되지 않는 문제 수정

    • EJB Failover 과정에서 lookup으로 받아오는 DLR이 아직 다른 서버로부터 replicate를 받지 못한 상태의 경우 다른 서버들이 살아있음에도 불구하고 모든 서버가 Fail되었다고 판단한다.

    • Failed Server에 대한 새로운 리스트를 만들어 복사한 후에 Failed Server를 제외함으로 문제가 발생하지 않도록 수정하였다.

  • non proxy Stateful failover 시 SkeletonMismatchException 발생문제 수정

    • Generated Skel에서 같은 코드인지 확인하기 위한 hash 값이 존재하는데, 이 hash 값이 코드가 달라져도 바뀌는 문제가 발생한다.

    • 메소드의 Array의 순서가 다르기 때문에 발생하는 문제로 Array를 Sort해서 문제를 수정하였다.

  • non proxy EJB failover 시 serialVersionUID가 달라서 생기는 문제 수정

    • Generated Code의 SerialVersionUID가 서버별로 달라서 Failover되는 경우 Exception이 발생하는 문제를 Generated Code에 SerialVersionUID를 넣어서 문제를 수정하였다.

  • Stateful EJB의 stateful-timeout 값이 0인 경우 바로 지워지지 않고 EJB Call되는 문제 수정

    • ejb-jar.xml에 EJB 3.x 스펙에서 지원하는 stateful-timeout과 @StatefulTimeout annotation 설정에 0이 설정될 경우 바로 지워지지 않는 문제를 수정하였다.

    • 해당 변경에 따라 stateful-timeout과 동일한 기능을 하는 jeus-ejb-dd.xml에 존재하는 disconnect-timeout 값도 동일하게 동작하도록 수정하였다.

  • serialversionUID가 지정되지 않아 JEUS 버전이 다른 경우 EJB 호출이 되지 않는 문제 수정

    • RMI, IIOP로 getEJBMetaData, getHomeHandle, getHandle API 호출과 관련된 Class에 serialversionUID를 명시하여 EJB 호출이 가능하도록 수정하였다.

  • Glassfish Corba Library 상 Network 이벤트 처리 오류 수정

    • Selector Thread에서 Exception이 발생하는 경우 Selector에서 이벤트를 받지 않도록 되어있던 부분을 다시 원래의 이벤트 값으로 다시 등록되도록 수정되었다.

  • Clustering 설정된 EJB Deploy 시 NameAlreadyBoundException 발생 문제 수정

    • EJB 2.x의 Remote Interface가 존재하고, ejb-jar.xml의 버전이 3.x로 되어있는 경우 DynamicLinkRef와 실제 객체를 bind하는 global name이 동일하여 NameAlreadyBoundException이 발생하던 문제가 수정되었다.

  • 다른 도메인에서 EJB Call 시 EJB 형태가 동일한 경우 Local Optimize가 되는 문제 수정

    • Stub Proxy에서 쓰이는 ejbId에 domainId와 serverId를 추가하여 도메인별, 서버별 EJB를 구분하여 다른 도메인에서 EJB Call한 경우에도 Local Optimize되던 문제를 수정하였다.

  • RMI에서 사용하는 host 주소가 any address로 등록되는 문제 수정

    • Server Listener의 listen-address를 설정하지 않는 경우 RMI의 host 주소를 any address로 사용하여 외부 접근이 되지 않던 문제를 실제 서버 주소를 사용하도록 변경하여 해결하였다.

  • EJB 3.0에서 xml과 annotation을 동시에 쓰는 경우 NameAlreadyBoundException 발생하는 문제 수정

    • xml과 annotation을 동시에 사용하는 경우 하나의 bean을 두 개의 이름으로 등록할 가능성이 존재한다.

    • 스펙상 xml이 우선이므로 xml에서 등록된 class의 경우 annotation을 처리하는 경우 등록하지 않도록 수정하였다.

2.3.4. IO

  • KeyStore에 2개 이상의 Key Alias가 존재하는 경우 SSLContext를 초기화 하지 못하는 문제 수정

    • KeyStore에 2개 이상의 Key Alias가 존재하는 경우 SSLContext를 초기화하지 못하는 문제가 수정되었다.

  • GMS View가 이전 버전으로 출력되는 현상 수정

    • IP multicast로 설정된 경우 GMS View의 순서가 바뀌어 GMS View가 이전 버전의 View로 보이는 현상이 수정되었다.

2.3.5. JDBC

  • 서버 기동 중 connection-pool-info 명령어를 실행하는 경우 잘못된 오류 메시지가 보이는 문제 수정

    • MS가 기동 완료되기 전에 connection-pool-info 명령어를 실행하는 경우 Exception이 발생되었다.

    • MS가 기동 중인 경우에 connection-pool-info 명령이 실행되면 기동되어 있는 서버의 connection-pool-info만 출력되도록 수정하였다.

  • Use Failback 기능이 동작하지 않는 문제 수정

    • Cluster DataSource를 사용하는 경우 'Use Failback' 항목을 'false'로 설정하면 Failback되지 않아야하나, Failback이 되는 문제가 수정되었다.

  • Cluster DataSource의 동적변경 가능 항목 수정 시 동적변경이 되지 않는 문제 수정

    • Connection Pool이 존재하지 않는 상태에서 Cluster DataSource의 설정 중 동적변경이 가능한 항목을 수정한 후 동적으로 반영이 되어 변경한 설정대로 동작하지만, server-info의 Need to Restart가 true되며 서버의 재기동이 필요하다고 메시지가 출력되는 문제를 해결하였다.

  • RAC 환경에서 사용하지 않는 Connection이 생성되는 버그 수정

    • RAC 환경에서 Failback되었을 때 주 DataSource에 사용하지 않는 Connection이 생성되는 버그가 수정되었다.

  • WebAdmin에서 Server에 DataSource 추가 시 동적 반영이 되지 않는 문제 수정

    • 이미 추가되어 있는 DataSource보다 윗 행에 있는 DataSource를 선택하여 추가하는 경우 동적 반영이 되지 않는 문제가 수정되었다.

2.3.6. JMS

  • MessageBridge의 XA 모드가 동작하지 않는 문제 수정

    • XA 모드를 사용할 경우 javax.transaction.xa 패키지의 클래스들을 찾을 수 없어서 ClassNotFoundException이 발생하는 문제가 발생하던 문제를 수정하였다.

  • Client Limit가 정확히 적용되지 않는 문제

    • Client Limit 설정 값보다 1개 많은 수의 클라이언트가 추가로 연결되었던 현상이 수정되었다.

  • durable subscription message type = JDBC일 경우 메시지 수신이 되지 않던 문제 수정

    • Durable Subscription Message Store가 DB를 사용하는 부분에 오동작이 있어서 메시지 수신이 안되던 문제가 수정되었다.

  • Durable Subscription의 모니터링 결과가 하나만 보이는 문제 수정

    • 동일한 Durable Subscriber Name을 가진 Client ID를 모니터링할 경우 하나만 보이는 현상이 수정되었다.

    • DurableName 순으로 먼저 정렬되고 각 DurableName 내에는 Client ID 순으로 정렬되도록 수정되었다.

  • onMessage에서 Consumer를 close해도 Remaining Messages가 줄어들지 않는 문제 수정

    • onMessage에서 Consumer를 close할 경우 타이밍 문제로 메시지가 복구되어 Remaining Messages가 줄어들지 않는 문제가 수정되었다.

  • Global Order의 순서가 맞지 않는 문제 수정

    • Local Application과 서버가 메시지를 주고받는 과정에서 Global Order Message 정보가 누락되어 Cluster 내의 다른 서버에 Global Order Message가 있어도 이를 처리하지 못하는 현상이 있었다.

    • Cluster 내의 각 서버마다 Global Order Message를 분배하여 쌓은 후 Global Order Message 순서에 따라 순차적으로 소비될 수 있도록 수정되었다.

  • Active-Active Failover 시 메시지가 복사되는 문제 수정

    • Active-Active Failback될 때 신규 생성한 메시지가 복사되지 않도록 수정되었다.

  • Message Bridge 설정 중 NPE 발생 문제 수정

    • Message Bridge 설정 중 잘못된 값이 들어갔을 경우 NPE(NullPointerException)가 발생하던 현상이 수정되었다.

  • JMS Messages가 Grouping되지 못하던 문제 수정

    • Local App와 서버가 메시지를 주고받는 과정에서 Message Group 정보가 누락되어 JMS Messages가 Grouping되지 못하던 문제가 수정되었다.

  • receiveNoWait() 형식으로 메시지를 받을 수 있도록 수정

    • Queue를 대상으로 receiveNoWait()를 호출한 경우 timeout을 -1로 전달하기 때문에 해당 메시지는 항상 기한이 지난 것으로 판단하여 request list에서 해당 request를 버리게 되어 메시지가 전달되지 않는 문제가 수정되었다.

  • Direct Buffer OOM으로 메시지 송수신 불가한 문제 수정

    • 사용 중이지 않은 direct buffer들이 pool로 반환되지 않아 OOM(Out Of Memory)이 발생하던 현상이 있었다.

    • Thread 10개 이상으로 JMS 성능을 측정하는 경우 OOM(Out Of Memory)이 발생하였으며 JEUS 7 Fix#5에서는 해당 현상이 수정되었다.

  • Temporary Queue를 처리할 Connection 지정이 잘못되는 문제 수정

    • Producer를 생성하는 경우 Temporary Destination을 지정하여 전송할 경우 Connection ID가 잘못 지정되어 메시지 전송에 실패하던 문제가 수정되었다.

2.3.7. JMX

  • Java SE 8u101 이후 버전 사용 시 jeusadmin으로 접속할 때 접근거부(access denied)되는 문제 수정

    • Java SE 8u101부터 java.security.DomainCombiner의 동작이 달라져서 jeusadmin으로 접속할 때 접근이 거부(access denied)되는 문제가 수정되었다.

2.3.8. JNDI

  • EJB embeddable container의 동작 수정

    • JNDI 클라이언트는 LocalClient Context를 사용하도록 수정하였다.

    • Embeddable EJB context의 port를 Server context에서 가지고 오지 않도록 수정하였다.

  • Graceful Redeploy 체크 시 ClassLoader가 변경되는 현상 수정

    • JNDI Lookup이나 바인드할 때 graceful redeploy 체크를 하게 되는데, 이때 사용자가 설정한 ClassLoader가 아닌 JEUS ClassLoader로 변경되는 문제가 수정되었다.

  • InitialContext 생성 시 hostname으로 빈 스트링("")이 넘어오는 경우 처리 안되는 문제 수정

    • provider url에 빈 스트링("")이 사용되는 경우 localhost로 수행되도록 수정되었다.

2.3.9. NodeManager

  • apply/remove patch 시 nodas 옵션이 제대로 동작하지 않는 문제 수정

    • apply/remove patch 명령에 nodas 옵션이 동작하지 않는 버그가 수정되었다.

  • apply-patch 명령 시 패치 파일이 잘못된 디렉터리로 가는 버그 수정

    • apply-patch 명령을 수행하는 경우 jext/jnext/jlext 패치별 각 디렉터리에 위치해야 하나 모든 패치가 jext 디렉터리로 가는 버그가 수정되었다.

2.3.10. Security

  • Security Domain 삭제 시 JEUS_HOME/config/security 하위의 설정 파일이 제거되지 않는 문제 수정

    • WebAdmin에서 Security Domain을 제거하는 경우 domain.xml의 설정만 제거되고, JEUS_HOME/config/security 하위의 설정 파일이 제거되지 않는 문제를 수정하였다.

  • Security Domain 생성 시 Deadlock 발생하는 현상 수정

    • Security Domain을 생성한 후 Activate되는 순간 Deadlock이 발생하는 문제가 수정되었다.

  • javax.security.auth.login.Configuration의 JEUS 구현체가 스펙에 맞지 않던 문제 수정

    • javax.security.auth.login.Configuration.getAppConfigurationEntry()의 parameter로 name를 전달받는데, LoginModule 정보에 name이 없는 경우 null을 리턴해 주어야 하나 Exception이 발생되던 문제를 수정하였다.

2.3.11. Server

  • connect -cachelogin 기능이 동작하지 않는 문제 수정

    • jeusadmin을 offline으로 접속한 후 connect -cachelogin 명령을 수행하는 경우 cachelogin 기능이 동작하지 않는 문제가 수정되었다.

  • File Handler의 rotation이 false라도 rotation되는 문제 수정

    • File Handler의 rotation 설정이 false로 설정되어 있어도 rotation되는 문제가 수정되었다.

    • 로그 파일은 JeusServer_yyyyMMdd.log 형식으로 생성된다.

  • MS만 기동되어 있는 경우 MS의 jeusadmin에서 system-info 명령 시 MS가 기동되어 있지 않다고 출력되는 버그 수정

    • DAS가 down되어 있는 경우 MS의 jeusadmin에서 system-info 명령을 수행하는 경우 system info 결과값이 출력되지 않고 MS가 기동되어 있지 않다는 메시지가 출력되는 버그가 수정되었다.

  • Cluster 설정 아래에 있는 lifecycle-invocation 항목이 동적설정되지 않는 문제 수정

    • Cluster 설정 아래에 있는 lifecycle-invocation 항목이 동적설정되지 않는 문제가 수정되었다.

  • SMTP handler의 문제 수정

    • send for all 설정이 되어있지 않는 경우 실제 logger에 handler로 추가되지 않는 문제가 수정되었다.

    • SMTP handler를 제거하는 경우 logger에서 제거하려 하기 때문에 에러가 발생하는 문제를 해결하기 위하여 logger에서 handler를 제거하는 부분을 수행하지 않도록 변경하였다.

    • SMTP handler에 비밀번호를 암호화하는 경우 서버 기동이 되지 않는 부분을 수정하였다.

    • thread state notify에서 subject를 지정할 수 있는데 SMTP handler를 통해 메일을 전송하는 경우 subject가 제대로 설정되지 않는 문제가 수정되었다.

  • FileHandler의 Rotation 관련 오동작 수정

    • RotationDir 값을 absolute-path로 설정하는 경우 파일이 잘못 생성되는 문제가 수정되었다.

    • Log Rotation에 실패하는 경우 기존 파일에 덮어쓰는 문제가 수정되었다.

  • Boot-time 도메인 백업기능과 pack-domain 명령어 동작이 다른 문제 수정

    • 두 가지 방법에서의 백업된 파일의 내용이 동일해야 하지만 동일하지 않았던 문제를 수정하였다.

    • boot-time 도메인 백업의 경우 빈 디렉터리와 nodes.xml 파일이 포함되지 않았으나, pack-domain 명령과 동일하게 포함시키도록 수정되었다.

  • Server 또는 Cluster 삭제 후 삭제한 Server, Cluster만을 대상으로 하는 Application이 DEPLOYED 상태로 남아 있는 버그 수정

    • Server나 Cluster만을 대상으로 갖는 Application이 있을 경우 Application 대상 제거 작업이 제대로 되지 않았던 버그가 수정되었다.

  • JVM Memory Max 값이 DAS 설정 값으로 출력되는 버그 수정

    • system-info 명령어로 MS의 JEUS Memory Information을 조회하는 경우 Max Heap Memory가 DAS의 값으로 출력되는 버그가 수정되었다.

  • WebtoB 내장 JEUS인 경우 NodeManager로 MS가 기동되는 버그 수정

    • 내장 JEUS인 경우 DAS 하나만 띄워서 사용하는 것만 지원하여 NodeManager로 MS 기동이 되지 않아야 하나 기동이 되는 버그가 수정되었다.

  • jeusadmin에서 add-servers-to-cluster를 중복으로 입력하는 경우 에러 발생하는 문제 수정

    • jeusadmin에서 add-servers-to-cluster를 중복으로 입력하는 경우 이미 등록되어 있는 Cluster인지 체크하여 등록되어 있는 Cluster라는 메시지가 출력하도록 수정되었다.

  • DAS 기동 시 옵션을 사용하지 않는 경우 Launcher 로그가 남지 않았던 버그 수정

    • DAS를 domain, server 옵션 없이 기동하는 경우 Launcher 로그가 남지 않았던 버그가 수정되었다.

2.3.12. Servlet

  • Query String 인코딩 문제 수정

    • Query String에 "/test.jsp?name=%&name"과 같은 형식으로 사용할 경우 % 인코딩된 값으로 인식하여 디코딩을 시도하다가 IllegalArgumentException이 발생하던 문제가 수정되었다.

  • Servlet Filter의 Annotation에 asyncSupported가 동작하지 않는 문제 수정

    • AsyncServlet에서 Filter를 사용할 때 asyncSupported=true 설정이 동작하지 않는 문제가 수정되었다.

  • 사용자 코드에서 ContextLoader의 archive 안의 Jar 파일을 닫을 수 있는 문제 수정

    • spring-web-4.3.0.RELEASE.jar 라이브러리를 사용하는 Application이 deploy하는 중 해당 파일의 압축을 풀다가 zip file closed error가 발생하던 문제가 수정되었다.

  • Reverse Proxy 비정상 동작 문제 수정

    • JEUS 7 FIx#4까지는 Reverse Proxy에서 RewriteFilter를 사용할 경우 dataURL이 적용되지 않는다.

    • JEUS 7 FIx#5부터 RewriteFilter, ProxyFilter를 함께 사용할 경우 RewriteFilter에만 dataURL를 설정하면 된다.

    참고

    Reverse Proxy의 에러 페이지 처리에 대해서는 미구현되어 있다.

  • Async Servlet 수행 시 ClassNotFound 발생문제 수정

    • Async Servlet 수행 중 "asyncContext.complete();" 후 Classloader가 ContextLoader에서 RootClassLoader로 변경되면서 하위 Classloader인 ContextLoader에 로딩된 Class를 찾지 못해 ClassNotFound가 발생하던 문제가 수정되었다.

  • context root로 요청 시 Security 설정이 적용되지 않는 문제 수정

    • web.xml에 http-mehtod 제한 설정을 해도 context-root로 접근할 경우 모두 허용되던 문제가 수정되었다.

  • Application의 servlet-name 값이 중복되어도 deploy 되던 문제 수정

    • JEUS 7 Fix#4까지는 Application 내의 각 Class 간 servlet-name이 중복될 경우 기존의 값을 덮어쓰면서 Application이 디플로이된다.

    • JEUS 7 Fix#5부터 Application 내의 각 Class 간 servlet-name이 중복될 경우 로그가 출력되면서 디플로이 실패되도록 수정되었다.

  • WJPv1 attribute 길이가 0인 경우 파싱 에러 발생문제 수정

    • JEUS 7 FIx#4까지는 host header를 입력하지 않고 GET을 호출할 경우 NullPointException과 500 error가 발생되었다.

    • JEUS 7 FIx#5부터는 host header가 없는 경우 BadRequestException이 발생하면서 400 error가 발생한다.

  • post-data에 다수의 파라미터가 들어오는 경우 Thread Hang 발생문제 수정

    • post-data에 매우 많은 양의 파라미터가 들어올 경우 byte array를 생성할 때 Thread Hang 이 걸리던 문제가 수정되었다.

  • JspServlet의 async-support 옵션이 동작하지 않는 문제 수정

    • JSP에 Async 기능을 사용하기 위하여 각각의 JSP에 매핑한 경우에는 정상동작 하지만 web.xml에 JspServlet을 설정하고 그 하위에 async-supported를 true로 설정한 경우 asynSerlvet이 동작하지 않는 문제가 수정되었다.

  • Spring을 사용하는 Application Deploy 시 JEUS의 ListenerManager에서 NPE 발생하는 문제 수정

    • Spring에서 SpringBootServletInitializer의 onStartup 과정 중 JEUS의 listener class의 이름이 null로 들어가서 NPE(NullPointerException)를 발생시키는 문제가 수정되었다.

  • included jsp 파일이 변경되는 경우 계속 recompile되는 문제 수정

    • check-included-jspfile을 true로 설정하고, -Djeus.servlet.jsp.modern=false 옵션을 사용할 경우 included jsp 파일이 변경되면 계속 recompile하는 문제가 수정되었다.

  • default-error-page 인코딩 설정된 페이지의 한글깨짐 문제 수정

    • response-encoding 설정이 없을 경우 default-error-page로 설정한 페이지의 한글이 깨지는 문제를 수정하였다.

    • default-error-page의 인코딩이 시스템의 locale을 사용하지 않도록 수정되었다.

  • check-included-jspfile true일 때 taglib 사용 시 매 요청마다 JSP reload되는 문제 수정

    • check-included-jspfile 설정이 true이고, web.xml의 <taglib> 매핑 없이 taglib를 사용하는 경우 매 요청마다 JSP reload되는 문제가 수정되었다.

    • TLD 경로가 'file:/'로 설정되는 경우에 대한 처리를 추가하여 reload가 발생하지 않도록 수정하였다.

  • AsyncServlet의 dispatch() 또는 complete() 메소드 사용 시 Deadlock이 발생할 수 있는 문제 수정

    • 현재는 Async Thread가 dispatch()나 complete()를 사용하는 경우 원본 Thread의 종료를 기다리고 있어서, 메소드가 리턴되기 전 Deadlock이 발생할 수 있는 문제가 수정되었다.

  • Jasper에서 file:// 형태로 된 jar 또는 TLD 파일을 찾지 못하는 문제 수정

    • check-included-jspfile 설정이 true이고, taglib, include를 사용하는 경우 'file://'과 같은 절대경로의 jar 또는 TLD 파일을 찾지 못해 FileNotFound 발생하는 문제가 수정되었다.

  • Accesslog Handler 레벨이 동적으로 변경되지 않는 문제 수정

    • accessLogFileHandler가 동적으로 반영되지 않는 문제가 수정되었다.

2.3.13. Session Server

  • EJB Session Server와 Web Session Server가 동시에 서비스되지 않는 문제 수정

    • 내부적으로 사용하던 EJB Session Server의 ID와 Web Session Server의 ID가 동일하여 EJB Session Server가 동작하지 않던 문제를 해결하였다.

  • HttpBindingListener 오류 수정

    • Session의 attribute에 동일한 키의 값을 변경하는 경우 HttpBindingListener의 valueUnbound()만 동작해야 하는데 valueBound()도 함께 동작하던 오류를 수정하였다.

  • jeus.sessionmanager.failback.allow를 설정하고 Application을 호출하는 경우 NPE가 발생하는 문제 수정

    • jeus.sessionmanager.failback.allow=true를 설정한 경우 Application을 호출하는 과정에서 NPE(NullPointerException)가 발생할 수 있는 문제가 수정되었다.

  • ServletRequestListner.requestInitialized()에서 session을 사용하는 경우 Session이 제거되지 않는 문제 수정

    • ServletRequestListner.requestInitialized()에서 session을 사용하는 경우 Session이 제거되지 않는 문제가 수정되었다.

2.3.14. Tool

  • appcompiler로 JSP Compile 시 jsp-property-group 적용 안되는 문제 수정

    • appcompiler 명령으로 JSP를 Compile할 때 web.xml을 읽어서 jsp-property-group을 적용할 수 있도록 수정되었다.

  • show-request-processing-flow 명령 오동작 수정

    • show-request-processing-flow 명령어에서 -hostname 옵션이 없을 때 null host에서 컨텍스트를 찾는 문제가 수정되었다.

  • jeusadmin의 반복명령 처리방식 변경

    • jeusadmin에서 repeat 옵션으로 동일한 명령을 여러 번 실행할 경우 OOM(Out Of Memory)이 발생하는 문제가 있었다. repeat 옵션의 동작방식을 변경하여 OOM 이 발생하지 않도록 수정하였다.

  • Windows Service 사용 시 서버가 종료되지 않는 문제 수정

    • Windows Service 등록에 사용했던 JDK 버전과 jeus.properties에 들어있는 JDK 버전이 일치하지 않을 경우 서버가 종료되지 않는 문제가 수정되었다.

2.3.15. Transaction

  • IIOP로 Transaction을 전파하는 경우 데이터 정합성이 깨지는 문제 수정

    • 이기종 WAS인 클라이언트에서 IIOP호출을 통하여 JEUS로 2 phase commit을 수행할 때 클라이언트에서 IIOP Timeout이 발생하여 rollback이 되면 정합성이 깨지는 문제가 발생한다.

    • getConnection과 query를 수행하는 경우 Lock을 잡아 Transaction 없이 query가 수행될 수 있는 문제를 수정하였다.

  • Automated Transaction Recovery가 동작되지 않던 문제 수정

    • Automated Transaction Recovery가 동작되지 않는 부분이 수정되었다.

    • 설정을 false로 변경하는 경우 listener가 해제되지 않는 문제가 수정되었다.

  • InterposedTransactionManager 사용 시 1 PhaseCommit이 제대로 동작하지 않는 문제 수정

    • InterposedTransactionManager를 사용할 경우 보통 2 PhaseCommit으로 동작하기 때문에 1 PhaseCommit에 대한 고려가 되지 않는 부분을 수정하였다.

  • OTS Transaction 연동 실패 시 MARKED_ROLLBACK TX가 JEUS에 남아있는 문제 수정

    • WebLogic에서 JEUS로 IIOP를 연동하는 경우 JEUS는 TX가 전파된 후 WebLogic TM에 JEUS를 리소스로 등록해줘야 한다. 이때 등록작업이 실패하면 초기화된 TX가 계속 남아있는 현상이 발생하여 등록 작업하는 경우 초기화했던 TX 정보들을 제거하도록 수정되었다.

  • Transaction Coordinator에서 ClassCastException이 발생하는 문제 수정

    • EJB 클라이언트는 home과 object를 사용하며 이중 home은 하나의 객체를 재사용한다.

      SubCoordinator의 Transaction 정보를 가지고 있는 EJB 클라이언트가 재사용되는 경우 RootCoordinator로 강제 캐스팅을 하여 ClassCastException이 발생하는 문제에 대해 방어코드를 삽입하여 수정하였다.

  • EJB 전파 시 트랜잭션 SubCoordinator가 2분간 대기 후 TMException이 발생하는 문제 수정

    • 클라이언트에서 EJB가 호출되어 이미 생성된 SubCoordinator가 존재할 때 클라이언트에서 해당 EJB를 다른 EJB 통해 재호출하게 되면 SubCoordinator를 재사용한다.

      이때 SubCoordinator가 RootCoordinator에서 등록 확인 응답을 받아야 하는 것으로 동작할 수 있다. 하지만 RootCoordinator는 등록 확인 요청을 받은 적이 없기 때문에 응답을 보내지 않고 SubCoordinator는 2분간 대기하고 TMException이 발생한다.

    • 트랜잭션이 전파되어 처음 SubCoordinator가 생성될 때 RootCoordinator가 이미 SubCoordinator 등록 후 트랜잭션을 전파했다고 간주하고 상태 값을 변경하여 요청 확인 요청을 기다리지 않도록 수정하였다.

2.3.16. WebAdmin

  • Web Connector 추가 시 에러발생 문제 수정

    • Server Listener Ref 항목이 없는 webtob-connector, tmax-listener를 추가한 후 Server Listener Ref 항목이 있는 ajp13-listener, http-listener, tcp-listener를 추가하는 경우 에러가 발생하는 문제가 수정되었다.

  • SYSTEM_DOMAIN 제거되는 오류 수정

    • Security Domain의 기본값인 SYSTEM_DOMAIN이 WebAdmin에서 제거되는 문제를 수정하였다.

  • Lifeclcye Invocation 설정 문제 수정

    • Lifecycle Invocation을 생성한 후 수정할 때 무조건 id=0인 invocation 설정만 변경되는 문제가 수정되었다.

    • method name 항목이 동적설정임에도 수정되지 않는 문제에 대해서 수정되었다.

2.3.17. 기타

  • 메뉴얼 SNMP 예제 수정

    • 메뉴얼에 있는 SNMP 예제가 동작하도록 수정되었다.