제2장 JEUS 8 Fix#1

내용 목차

2.1. 신규 기능
2.1.1. CDI
2.1.2. Cloud
2.1.3. Deployment
2.1.4. Installer
2.1.5. IO
2.1.6. JDBC
2.1.7. JMS
2.1.8. Node Manager
2.1.9. SCF
2.1.10. Security
2.1.11. Server
2.1.12. Servlet
2.1.13. Session Server
2.1.14. Tool
2.1.15. Transaction
2.1.16. Webadmin
2.2. 변경 기능
2.2.1. Cloud
2.2.2. Deployment
2.2.3. Installer
2.2.4. IO
2.2.5. JBatch
2.2.6. JDBC
2.2.7. JNDI
2.2.8. Node Manager
2.2.9. Security
2.2.10. Server
2.2.11. Servlet
2.2.12. Session Server
2.2.13. Tool
2.2.14. WebAdmin
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. Node Manager
2.3.8. Security
2.3.9. Server
2.3.10. Servlet
2.3.11. Session Server
2.3.12. Tool
2.3.13. Transaction
2.3.14. WebAdmin

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

2.1. 신규 기능

본 절에서는 JEUS 8 Fix#1의 신규 기능을 정리한다.

2.1.1. CDI

  • Implicit bean archive를 검색하지 않는 기능 추가

    • CDI spec에 "CDI 1.1에서는 1.0과 호환성 유지를 위해 implicit bean archive를 검색하지 않는 기능을 제공해야 한다"고 명시하고 있다. 이를 위한 기능을 추가하였다.

    • jeus.cdi.enable-implicit-bean-archive를 시스템 프로퍼티를 통해 설정이 가능하다. (기본값: true)

2.1.2. Cloud

  • 클라우드 서버를 위한 모니터링 명령어 추가

    • 클라우드 서버를 사용하는 경우 자신의 서버가 어떤 서버와 연동이 되어 있는지 확인하는 기능이 추가되었다.

    • jeusadmin에서 list-corelated-servers 명령어로 확인이 가능하다.

  • Cloud Support SPI 도입

    • 클라우드 환경에서 Virtual Multicast를 사용하기 위한 Service Provider Interface(SPI)를 제공한다.

    • 다음의 프로바이더를 지원한다.

      • Kubernetes

      • AWS

      • Vcloud

  • 클라우드 환경(Kubernetes)에서 세션 서버의 backup-table을 타 노드로 선택하는 기능 추가

    • 클라우드 환경에서 세션 백업을 더 안전하게 하기 위해 백업 테이블을 다른 노드(머신)에 둘 필요가 있다. Kubernetes에서는 pod들이 어느 노드에 속해 있는지 확인할 수 있는 API를 제공한다. 이를 이용하여 타 노드(머신)으로 backup-table이 지정되도록 기능이 추가되었다.

  • 클라우드 서버 모드 지원

    • 클라우드 환경에서 사용할 수 있도록 클라우드 서버 기능이 추가되었다. 클라우드 서버는 Cloud license인 경우에만 동작한다.

  • 클라우드 서버 기능을 Cloud license로 제한

    • 클라우드 서버의 기능은 Cloud license에서만 사용될 수 있도록 기능이 추가되었다.

2.1.3. Deployment

  • DAS를 제외한 모든 서버를 대상으로 애플리케이션을 배포할 수 있는 기능 추가

    • 애플리케이션을 배포하는 경우 대상은 서버 목록, 클러스터 목록을 지정하거나 all target으로 사용하여 모든 서버를 지정할 수 있다.

    • DAS는 서비스의 대상이 아니므로 제외해야 할 필요가 있어 jeus.deploy.exclude.das 시스템 프로퍼티를 사용하여 DAS에는 애플리케이션이 배포되지 않도록 하는 기능이 추가되었다. (기본값 : false)

  • deploy 관련 명령어에 -upgrade 옵션 추가

    • install-application, deploy-application, redeploy-application 명령어에서 애플리케이션을 업그레이드하기위해 -upgrade 옵션을 사용하였지만 -u만 입력해도 옵션이 동작하도록 기능이 추가되었다.

2.1.4. Installer

  • Silent Mode Installer 지원

    • Silent Mode로 설치할 수 있는 기능이 추가되었다(Linux만 제공).

  • administrator ID, DAS Name, DAS port를 입력할 수 있도록 기능 추가

    • administrator ID, DAS Name, DAS port를 입력할 수 있도록 기능이 추가되었다.

2.1.5. IO

  • Listener의 SSL 설정을 위한 명령 추가

    • jeusadmin에서 listener의 SSL 설정을 추가할 수 있는 config-listener-ssl 명령이 추가되었다.

2.1.6. JDBC

  • JDBC Connection Leak이 발생하는 경우 메일을 관리자에게 전송하는 기능 추가

    • JDBC Connection Leak이 발생하는 경우 Action On Resource Leak 설정이 Waring이거나 AutoClose인 경우 메일 안내를 받을 수 있는 기능이 추가되었다.

  • primary component datasource로의 failback 이후 backup component datasource를 empty하게 만드는 기능 추가

    • primary component datasource로의 failback 이후에도 backup component datasource는 커넥션들을 그대로 유지하는 것이 JEUS 6 Fix#8까지의 정책이었다. 이 정책과는 반대로 idle 상태가 된 backup component datasource들을 empty하게 만드는 기능을 추가하였다.

  • DataSource 연결반환 또는 연결끊기 기능 추가

    • DB Connection Leak이 발생하였을 때 수동으로 연결끊기, 연결반환을 할 수 있는 기능이 추가되었다.

  • connection-pool-info 명령어를 수행하는 경우 Activate 상태인 connection의 개수를 보여주는 기능 추가

    • jeusadmin으로 connection-pool-info 명령어를 수행한 경우 Active Average, Active Max 항목을 추가하였다.

      항목설명
      Active Averge평균 Active connection을 보여주는 항목
      Active MaxActive한 커넥션이 동시에 최대 몇 개까지 맺어졌었는지 알려주는 항목
  • getConnection하는 DB 사용자 계정달라지는 경우에 대한 로그 추가

    • Connection Pool을 사용하던 DB 사용자의 계정이 변경되는 경우에는 커넥션 연결을 끊고 다시 연결하여 사용한다.

      이런 상황이 자주 발생하는 경우라면 Connection Pool의 size를 늘려서 idle conneciton이 각 DB 계정별로 분배되도록 설정하여 사용해야 한다. 하지만 커넥션이 새로 맺어지는 것에 대해 로그가 남지 않아 사용자가 설정 변경을 해야한다고 판단할 수 없었다.

      따라서 아래와 같은 로그를 출력하도록 하여 상황을 파악할 수 있도록 하였다.

      [CPOOL-0025] There is no idle connection for user [user1] in the connection pool [tibero_pool1].
       A new connection was made for user [user1] whereas a single connection for user [user2] has been destroyed." 

  • modify-data-source 명령어에서 -algorithm 옵션 추가

    • jeusadmin에서 modify-data-source 명령어에 -algorithm 옵션이 추가되었다.

      다음의 알고리즘을 사용한다.

      • base64

      • DES

      • DESede

      • AES

      • SEED

      • Blowfish

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

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

      • 연결반환 : return-connection

      • 강제끊기 : destroy-connection

    • 커넥션을 사용 중인 서버 이름을 필수로 넣어야 하며, -cid(connection id) 또는 -cpid(connection pool id) 옵션을 사용하여 return, destroy할 Connection과 Connection Pool을 지정하여 사용한다.

  • test-data-source-config 명령어를 MS의 jeusadmin에서 동작하도록 기능 추가

    • test-data-source-config 명령어를 DAS의 jeusadmin에서만 사용이 가능하였으나, MS만 기동되어 있는 상태에서도 동작하도록 기능이 추가되었다. 이는 DAS가 종료되어 있는 상태에서도 데이터소스를 연결할 수 있도록 하기 위해 추가되었다.

  • test-data-source-config 명령어에서 -all 옵션 추가

    • test-data-source-config 명령어를 통해서 서버별 데이터소스와 연결이 가능한 상태인지 확인이 가능하다.

    • -all 옵션을 이용하여 전체 서버의 데이터소스 연결 가능 여부를 확인할 수 있도록 기능이 추가되었다.

2.1.7. JMS

  • Topic Message Multicast 지원

    • Topic Message를 UDP Multicast를 이용하여 publish할 수 있도록 기능이 추가되었다.

2.1.8. Node Manager

  • request에서 사용하는 pool 사이즈의 max값을 변경할 수 있는 기능 추가

    • DAS에서 다수 MS 기동 등의 요청이 오는 경우 Thread Pool이 부족하여 DAS 측에서 read time out이 발생할 수 있다. 이를 위해 maxPoolSize를 설정 가능하도록 기능이 추가되었다.

    • jeus.nm.listener.maxPoolSize 시스템 프로퍼티를 startNodeManager 기동 스크립트에 작성한다.

  • 기동 중인 Java 프로세스와 PID가 출력되도록 기능 추가

    • 기동 중인 Java 프로세스와 PID가 출력되도록 기능이 추가되었다.

    • startNodeManager 스크립트에 jeus.nodemanager.log.level 프로퍼티를 'FINEST'로 설정한다.

  • jant로 서버 종료 시에 -graceful, -shutdownTimeout 기능 추가

    • jant로 서버를 종료하는 경우에 -graceful, -shutdownTimeout 옵션을 사용하도록 기능이 추가되었다.

    • build.xml에 아래와 같이 설정을 추가한다.

      <property name="shutdownTmeout" value="3"/>
      <property name="graceful" value="true"/> 
      <down 
          domainName="${domain.name}"
          serverName="${server.name}"
          host="${host}"
          port="${port}"
          username="${username}"
          password="${password}"
          shutdownTimeout="${shutdownTimeout}"
          graceful="${graceful}"
      />

2.1.9. SCF

  • 'System Clustering Framework' 항목을 편집할 수 있는 커맨드 추가

    • 'System Clustering Framework' 항목을 편집할 수 있도록 jeusadmin에 config-system-clustering-framework, show-system-clustering-framework 명령이 추가되었다.

2.1.10. Security

  • encryption 명령어에 파일 경로 및 -nm 옵션을 추가

    • encryption 명령어에서 security.key를 도메인 외에 Node Manager를 이용하거나(-nm) 직접 security.key file path를 입력할 수 있는 커맨드 옵션이 추가되었다.

  • encryption 명령어에 사용 가능한 암호화 알고리즘을 보여주는 기능 추가

    • encryption 명령어에서 -algolist 옵션을 사용하여 사용가능한 암호화 알고리즘을 보여주는 옵션이 추가되었다.

  • 로그인 만료 기간을 설정할 수 있는 기능 추가

    • jeusadmin에 expire-user와 unexpire-user 명령어가 추가되었다.

      명령어설명
      expire-user 명령어expire되는 사용자의 시간을 입력할 수 있다.
      unexpire-user 명령어expire된 특정 사용자에 설정된 expiry time을 해제할 수 있다.
  • encription에서 암호화된 패스워드만 보이도록 하는 기능 추가

    • encription에서 암호화된 패스워드만 보이도록 하는 -s 옵션이 추가되었다.

  • 로그인 연속 실패 시 계정잠금 기능 추가

    • 로그인이 연속으로 실패하는 경우 계정을 잠그는 기능이 추가되었다.

      WebAdmin에서 [Security] 메뉴의 SYSTEM_DOMAIN에서 [Security Service] 탭의 Subject Validation 화면에서 'Default Subject Validation Service' 항목을 true로 설정하거나, jeus.properteis 파일에 jeus.security.subject.validation.maxattempts 시스템 프로퍼티를 추가한다.

    • Administrators 그룹에 속한 계정은 적용되지 않는다.

  • 암호화 알고리즘에 SHA-256, SHA-512 추가

    • 암호화 알고리즘에 SHA-256, SHA-512이 추가되었다.

  • 계정에 대한 암호화 알고리즘 변경이 가능하도록 기능 추가

    • jeusadmin에서 set-password를 사용하는 경우 기존에는 암호변경만 가능하였으나 암호화 알고리즘도 변경이 가능하도록 기능이 추가되었다.

      set-password user1 {password} -algorithm {algorithm}

2.1.11. Server

  • 로그 파일의 permission 설정하는 기능 추가

    • 로그 파일에 permission을 설정하는 기능이 추가되었다. File handler에 설정하여 사용한다.

  • pack-domain 명령어에 -node 옵션 추가

    • pack-domain 명령어에 -node 옵션을 추가하여, 사용자가 원하는 노드에 도메인을 백업하는 기능이 추가되었다.

  • stopServer 명령어에 -cachelogin 옵션 추가

    • stopServer 명령어로 서버를 종료하는 경우 -cachelogin 옵션을 사용하여 캐시 로그인이 가능하도록 기능이 추가되었다.

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

    • 서버를 기동하는 경우 애플리케이션 배포가 제대로 되지 않는 경우 STANDBY로 기동되면 문제를 수정한 후 start-server 명령 등을 통해 RUNNING 상태로 변경해야 된다.

    • 배포 로직상 문제로 STANDBY로 기동되는 경우 재시도할 수 있도록 기능이 추가되었다.

      프로퍼티설명
      jeus.server.standby.retrycount재시도 횟수를 설정한다. (기본값: 0)
      jeus.server.standby.retryinterval재시도 간격 설정을 설정한다. (기본값: 60000(ms))
  • 패치 파일에서 클래스가 중첩된 경우 서버의 구동을 중지하는 기능 추가

    • 패치 파일에 중복이 발생하는 경우 서버의 구동을 중지하는 기능이 추가되었다.

      프로퍼티설명
      jeus.boot.ignorepatchoverlap패치 파일의 중복에도 기동해야 하는 경우 설정한다.
  • Configuration Lock을 획득하지 못했을 경우 대기하는 기능 제공

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

      프로퍼티설명
      jeus.config.lock.timeout대기시간 timeout을 설정한다. (기본값: 60000(ms))
      jeus.jmx.worker.maxJMX 요청 Thread pool을 설정한다. (기본값: 20)
  • Life Cycle invocation 에러 발생 시 서버 정상 기동 여부를 선택할 수 있는 기능 추가

    • 서버 기동 중 Life Cycle Invocation에서 오류가 발생한 경우 서버를 RUNNING 상태로 기동할지 여부를 설정할 수 있는 옵션이 추가되었다.

    • jeus.server.invocation.keepBootOnError 프로퍼티로 설정한다.

      설정값설명
      trueRUNNING으로 기동된다.
      falseSTANDBY로 기동된다. (기본값)
  • 서버 종료에서 -graceful, -shutdownTimout 설정이 가능하도록 기능 추가

    • 서버 종료 명령 중 jeusadmin의 stopServer와 Node Manager에서 -graceful, -shutdownTimout 옵션을 사용 가능하도록 기능이 추가되었다.

2.1.12. Servlet

  • spring support를 shared library로 관리

    • spring-support 라이브러를 JEUS_HOME/lib/shared/spring-support에 추가하였다.

  • modify-webtob-connector 명령어에 -ver, -wbhome, -ipcport 옵션 추가

    • modify-webtob-onnector 명령어에 -ver, -wbhome, -ipcport 옵션을 추가하여 각 항목에 대한 설정이 가능하도록 기능이 추가되었다.

    • show-web-engine-configuration 명령어에 wjp-version에 대한 내용도 추가되었다.

  • Spring 용 WebSocket upgrade handler 제공

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

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

      <websocket:handlers>
      <websocket:handshake-handler ref="handshakeHandler"/>
      </websocket:handlers><bean id="handshakeHandler" class="jeus.spring.websocket.JeusHandshakeHandler"/>
    • Spring 4.0.0 지원 라이브러리가 추가되었다.

  • WebtoB Connector에서 ServletOutputStream dump가 출력되도록 기능 추가

    • WebtoB Connector를 사용하는 경우 응답에 대한 ServletOutputStream dump가 출력되도록 기능이 추가되었다.

    • jeus.servlet.engine.response 로그를 FINEST로 설정하면 출력된다.

2.1.13. Session Server

  • 백업된 세션을 Active Session으로 처리하는 기능 추가

    • 클라우드 환경에서 Sacle In이 되면서 서버가 종료되는 경우 세션이 관리에 어려움이 있어 업그레이드 기능을 추가하였다. 업그레이드는 백업에 있는 세션을 primary로 이동시켜 세션을 유지하도록 하는 기능이다.

    • jeus.sessionmanager.cluster.failover.strategy=upgrade를 세션 프로퍼티로 추가한다.

  • Session manager provider를 서버별로 설정할 수 있도록 기능 추가

    • JEUS 8에서 session manager provider를 설정하는 옵션이 jvm scope에서 domain scope로 변경되었다. 하지만 기존에 InfiniCache 등에서 jvm별로 다른 프로바이더를 사용하는 경우가 존재하여 jvm-option에 설정하여 사용이 가능하도록 기능이 추가되었다.

    • jeus.servlet.sessionmanager.provider 프로퍼티를 설정한다.

2.1.14. Tool

  • offline jeusadmin에서 -f 옵션 사용 시 환경변수를 사용할 수 있도록 기능 추가

    • offline jeusadmin에서 -f 옵션을 사용하는 경우 환경변수를 사용할 수 있도록 기능이 추가되었다.

      offline>connect -u administrator -p 1111111 -cachelogin -f $JEUS_HOME/bin -domain jeus8
  • thread info 명령어에서 리스너 아이디 값에 애스터리스크(*)를 사용하도록 기능 추가

    • jeusadmin으로 ti 정보를 확인하는 과정에서 -li 옵션을 이용하여 리스너 아이디를 설정할 수 있는데 아이디에 애스터리스크(*)를 입력하여 해당 이름으로 시작하는 리스너만 표시할 수 있도록 하는 기능이 추가되었다.

      ti -li webtob*

2.1.15. Transaction

  • Dirty select 지원

    • IIOP를 사용하는 애플리케이션에서 Dirty select 기능이 추가되었다.

    • 애플리케이션에서 DB에 insert를 수행하고, commit를 진행하지 않은 상태에서 또 다른 애플리케이션에서 select를 수행하는 경우에 insert한 데이터를 확인할 수 없었다. Dirty select 기능을 통해 commit하지 않은 데이터도 확인이 가능하도록 기능이 추가되었다.

2.1.16. Webadmin

  • pack-domain 명령어를 WebAdmin에서 사용할 수 있도록 기능 추가

    • pack-domain 명령어를 WebAdmin에서 수행이 가능하도록 기능이 추가되었다.

  • ClusterDs 화면의 'Component Data Sources' 항목을 모두 선택할 수 있도록 기능 추가

    • ClusterDs 화면'Component Data Sources' 항목에 데이터소스를 한 개씩 선택할 수 있었던 것을 모두 선택할 수 있도록 기능이 추가되었다.

  • 'Data Source' 항목에 설정된 데이터소스를 모두 선택할 수 있도록 기능 추가

    • WebAdmin의 [Servers] 메뉴에서 'SERVER_NAME'을 선택한 후 [Basic] > [Basic Info] 탭의 'Data Source' 항목에 데이터소스를 한 개씩 선택할 수 있었던 것을 모두 선택할 수 있도록 기능이 추가되었다.

  • WebAdmin 상단 바에 라이선스 출력

    • WebAdmin의 상단 바에 라이선스 정보가 출력되도록 기능이 추가되었다.

2.2. 변경 기능

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

2.2.1. Cloud

  • 클라우드 서버에서 수행할 수 없는 명령어 제거

    • 클라우드 서버가 기동되어 있는 경우 jeusadmin에서 아래의 명령들이 수행되지 않도록 기능이 변경되었다.

      add-application-target
      add-cluster
      add-custom-resource-to-clusters
      add-data-sources-to-cluster
      add-dynamic-servers
      add-external-resource-to-clusters
      add-server
      add-servers-to-cluster
      add-server-template
      disable-to-resynchronize-applications
      enable-to-resynchronize-applications
      list-clusters
      modify-cluster
      modify-dynamic-servers
      remove-application-target
      remove-cluster
      remove-custom-resource-from-clusters
      remove-data-sources-from-cluster
      remove-external-resource-from-clusters 
      remove-server
      remove-servers-to-cluster
      show-dynamic-servers
      show-server-template
      start-cluster
      start-domain
      start-server
      stop-cluster
      stop-domain
      stop-server
      
  • 클라우드 서버에서 사용할 수 없는 옵션을 제거

    • 클라우드 서버에서 jeusadmin의 -cluster, -clusters 옵션이 필요 없어 기능을 제거하였다.

  • WebAdmin에서 수행할 수 없는 항목 제거

    • 클라우드 서버가 기동되어 있는 경우 클라우드 서버에서만 사용할 수 있는 항목만 접근되도록 기능이 수정되었다.

2.2.2. Deployment

  • 애플리케이션을 설치하는 경우 WAR, JAR, EAR, RAR 확장자만 허용하도록 수정

    • jeusadmin에서 install-application 명령어를 이용하여 애플리케이션을 설치하는 경우 정해진 확장자 이외의 파일이 설치되지 않도록 기능이 변경되었다.

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

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

2.2.3. Installer

  • 내장 WebtoB버전 변경

    • 내장 WebtoB 버전이 WebtoB 5 SP0 Fix#2로 변경되었다.

  • Password 유효성 체크 및 암호화 방식 변경

    • BASE64에서 ASE로 암호화 방식이 변경되어 보안이 강화되었다.

    • 아래와 같이 유효성을 체크한다.

      • 길이 : 8자 이상

      • 문자열 검사 : 영문대소, 숫자, 특수문자

      • 연속문자검사 : 같은 문자 연속 3개 이상 불가

      • 공백 불가

      • UserName과 비교 : UserName과 동일한 비밀번호 불가

  • 설치 후 파일 권한 변경

    • Unix 계열에서 설치하는 경우 파일 및 디렉터리 권한이 700으로 변경되었다.

2.2.4. IO

  • port bind 시점 변경

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

2.2.5. JBatch

  • JBatch check logic 개선

    • 애플레이션을 배포할 때 batch 모듈이 애플리케이션에 포함되어 있는지 확인하는 작업이 선행된다. 이때, 애플레이션에 archive 파일이 많은 경우 많은 시간이 소요될 수 있어 아래 파일들을 확인하여 batch의 사용 여부를 판단하도록 기능이 개선되었다.

      META-INF/batch.xml
      WEB-INF/classes/META-INF/batch.xml
      META-INF/batch-jobs/*.xml
      WEB-INF/classes/META-INF/batch-jobs/*.xml

2.2.6. JDBC

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

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

  • 데이터소스 설정에서 User와 Password를 동적으로 변경할 수 있는 기능 추가

    • DB의 계정 정보가 변경되는 경우 기존에는 MS를 재기동해야 하는 변거로움이 있어 이를 동적으로 설정할 수 있도록 기능이 변경되었다. 설정이 변경된 후에 Connection Pool이 refresh된다.

2.2.7. JNDI

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

    • Fail List에서는 Fail된 서버의 리스트를 가지고 있다. 클러스터에서 제거된 서버의 경우 Fail List에서 계속 가지고 있을 필요가 없기 때문에 Fail List에서도 제거하도록 변경하였다.

2.2.8. Node Manager

  • Node Manager 설정 파일의 기본값 변경

    • 기본으로 제공되는 jeusnm.xml 파일의 설정값이 변경되었다.

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

      • 로그 파일의 경로 설정이 가능하도록 logFileName 항목을 추가하였다.

2.2.9. Security

  • 캐시 로그인 관리를 위한 사용법 및 파일 내용변경

    • 캐시 로그인에 사용되는 .jeuspasswd 파일의 형태가 아래와 같이 변경되었다.

      domain_name:ID encode(ID:PW)
    • 사용법

      • 변경 전

        ./jeusadmin -domain domain1 -cachelogin
      • 변경 후

         ./jeusadmin -domain domain1 -u jeus -cachelogin
    • 캐시 로그인에 사용되는 security.key 파일의 위치를 JEUS_HOME/bin으로 변경하였다.

2.2.10. Server

  • 명령어별로 캐시 로그인 동작 통일

    • 기동/종료 명령어별로 -cachelogin 옵션 사용법이 서로 상이하여 이를 통일하였다.

      1. -cachelogin 사용 시에 cachelogin 사용

      2. -u, -p 옵션 사용 시 cachelogin 파일 업데이트

  • DAS가 포함된 클러스터를 stop하는 경우 DAS를 제외하고 stop하도록 수정

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

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

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

  • domain backup의 기본 경로 변경

    • set-domain-backup이나 pack-domain 명령어를 사용하면 도메인의 백업 파일이 생성된다. 이때 생성되는 기본 경로를 JEUS_HOME/bin에서 ${JEUS_HOME}/backups로 변경하였다.

  • stopServer명령의 host 옵션에 기본값이 적용되도록 변경

    • stopServer 명령에서 host 옵션의 기본값을 127.0.0.1:9736으로 추가하여 host 옵션을 사용하지 않아도 동작하도록 기능이 변경되었다..

2.2.11. Servlet

  • http-listener의 max-keep-alive-request 설정 제거

    • use-nio 설정이 JEUS 8에서 제거되고 설정값이 true로 고정되었다.

    • max-keep-alive-request 설정은 use-nio가 false인 경우에만 동작하던 옵션이므로 설정에 의미가 없어져 설정을 제거하였다.

  • max-post-size 동작 방식 변경

    • max-post-size 기능은 request body의 최대 크기를 제한하는 기능으로 이를 넘을 경우에 "413 Request Entity Too Large response"를 내도록 되어 있다.

    • Chunked에 대해서는 body를 읽어 처리하도록 하고, content-length가 있는 경우는 값만으로 body 길이를 판단하여 413 응답이 발생하도록 기능이 변경되었다.

  • include된 JSP가 존재하지 않는 경우 응답코드를 404에서 500으로 변경

    • include된 JSP가 존재하지 않는 경우 응답코드를 404에서 500으로 변경되었다. 페이지가 존재하지 않는 경우에는 404 응답을 하는 것이 맞지만, include된 페이지에 문제가 있다는 의미로 500으로 응답되도록 변경되었다.

2.2.12. Session Server

  • session backup 정책 변경

    • backup level과 상관 없이 서버의 time update가 발생하면 백업 서버에도 time update가 발생하여 성능에 영향을 줄 수 있었다. 이를 backup level에 정의된 곳으로 업데이트하도록 변경되었다. 따라서 사용자가 설정한 값으로 동작하도록 기능이 변경되었다.

  • Session search 성능 개선

    • 세션 존재 유무확인 방식을 async로 변경하였다. 분산식 세션 서버에서는 세션의 존재 유무를 판단하기 위해서 모든 서버에 세션을 찾아봐야한다.

    • 기존에는 sync 방식으로 서버에 차례대로 연결하여 세션을 찾는 작업을 수행했었다. 이는 다수의 MS가 존재하는 경우에는 성능이 저하될 가능성이 있다. 따라서 세션을 찾는 방식을 sync 방식에서 async 방식으로 모든 서버에 일괄적으로 질의하도록 기능을 변경하였다.

2.2.13. Tool

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

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

  • jeusadmin 등 툴 실행 시 패치 정보를 출력하지 않도록 변경

    • jeusadmin과 같은 툴 실행 시 패치 정보를 표시하지 않도록 기능이 변경되었다.

    • 표시하려면 jeus.properties 파일을 편집하여 TOOL_OPTION에 설정되어 있는 jeus.tool.console.patchinfo 시스템 프로퍼티 값을 true로 변경한다.

  • pack-domain 명령의 -f 옵션을 -p로 변경

    • -f 옵션은 dir-path를 설정하기 위한 옵션이었다. -f 옵션은 일반적으로 force를 의미하기 때문에 -p로 옵션명을 변경하였다.

2.2.14. WebAdmin

  • 업로드하는 경우 확장자 파일은 WebAdmin에서 Validation하도록 수정

    • WebAdmin에서 파일을 업로드하는 경우 확장자를 체크하여 허용하지 않은 확장자에 대해서는 업로드되지 않도록 기능이 변경되었다.

  • Role에 따라 접근 불가능한 페이지로 이동하는 버튼은 미출력하도록 변경

    • MonitoringRole 권한만 가진 계정의 경우 [Monitoring] > [Servers] 메뉴의 [Start], [Stop], [Resume], [Suspend], [GC] 버튼은 수정 권한을 갖는 Config Role이 없이 Monitroing Role만 있을 경우 비활성화되었다.

    • MonitoringRole 권한이 없는 경우, Resource Manager와 도메인 기본정보, Web Console 실행, Monitoring 배너는 출력되지 않도록 하였다.

2.3. 버그 수정

본 절에서는 JEUS 8 Fix#1의 버그 수정된 내용을 정리한다.

2.3.1. CDI

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

    • Windows 환경에서 CDI를 사용하는 애플리케이션이 WEB-INF/lib 아래에 jar 파일을 포함하고 있을 경우 redeploy에 실패하던 문제를 수정하였다.

  • 웹 애플리케이션 배포 시 WEB-INF 아래만 스캔하도록 수정

    • CDI 스펙에 따르면, 애플리케이션 클래스 패스에 있는 빈 아카이브들을 찾을 것을 규정하고 있다. 따라서, WEB-INF/classes와 WEB-INF/lib 아래에 있는 라이브러리들 및 기타 다른 방법으로 참조하고 있는 라이브러리들만 스캔을 하도록 동작을 변경한다.

    • WEB-INF 바깥에 존재하는 파일이나 리소스들, 특히 참조하지 않는 클래스나 라이브러리에 대한 불필요한 스캔을 하지 않도록 한다.

2.3.2. Deployment

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

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

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

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

  • JSP 컴파일 시 Library deployment 기능으로 배포한 라이브러리가 클래스 패스에 추가되지 않는 문제

    • Library Deployment 기능을 이용하여 서버에 lib를 deploy하였지만 jsp에서 클래스 패스에 추가되지 않아 컴파일이 실패하는 문제를 수정하였다.

  • 디렉터리 모드 애플리케이션 배포 시 파일 권한이 없어도 배포가 진행되는 현상 수정

    • 디렉터리 모드 애플리케이션 배포 시 대상이 되는 디렉터리에 대한 파일 권한이 없더라도 배포가 성공하였다. 첫 배포 시도 시에는 권한을 검증하나 한 번 배포가 된 애플리케이션 디렉터리에 대하여 배포가 성공적으로 이루어진 후 권한을 변경하는 경우에는 정상적으로 배포되는 문제를 수정하였다.

  • 디렉터리 모드 EAR 내부에 있는 아카이브 모드 모듈을 변경하였을 때 이를 감지하지 못하는 현상 수정

    • 디렉터리 모드 EAR 내부에 있는 아카이브 모드 모듈(jar,war등)을 변경하고 서버를 재기동한 경우 이를 감지하지 못해 최신 애플리케이션으로 반영하지 않는 현상을 수정하였다.

2.3.3. EJB

  • EJB 클러스터링에서 비정상적으로 노드를 삭제할 때 DLR 업데이트하지 않았던 문제 수정

    • EJB 클러스터링 중 동적추가/삭제하는 경우 비정상 노드를 삭제할 때 해당 노드의 정보가 클러스터를 전체 동시 재부팅하지 않으면 계속 남아있어 삭제된 노드로 시도하는 현상을 수정하였다.

  • EJB 호출하는 경우 UnknownHostException 발생 시 Failover 안되는 문제 수정

    • EJB 클러스터링 동작 중 특정 노드가 삭제되어 이 노드에 대한 정보를 제거하였으나, DLR link에 해당 노드의 정보가 남아있어 UnknownHostException이 발생할 수 있다. 이때 발생한 UnknownHostException에 대해서도 Failover가 동작하여야 하는데 동작하지 않았던 문제를 수정하였다.

  • EJB 클러스터링 중 동적추가/삭제 시 비정상 노드의 정보가 남아 있는 문제 수정

    • EJB 클러스터링 중 동적추가/삭제하는 경우 비정상 노드를 삭제할 때 해당 노드의 정보가 클러스터를 전체 동시 재부팅하지 않으면 계속 남아있어 삭제된 노드로 시도하는 문제를 수정하였다.

    • 설정이 동적으로 변경되는 경우 DLR의 Link들의 서버가 자신의 클러스터에 존재하는지를 체크하여 클러스터에 존재하지 않을 경우 Link를 삭제하도록 하였다.

  • Glassfish Corba Library 상 네트워크 이벤트 처리 오류 수정

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

  • enable-interop 설정이 false인 경우 deploy 실패 시 메시지가 명확하지 않은 문제 수정

    • enable-interop 설정이 false이고, IIOP를 사용하는 EJB를 deploy 하는경우 오류메시지가 누락되는 문제를 수정하였다.

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

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

  • EJB ActiveManagement 동작 수정

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

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

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

  • 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 값도 동일하게 동작하도록 수정하였다.

2.3.4. IO

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

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

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

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

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

2.3.5. JDBC

  • RAC 환경에서 사용하지 않는 커넥션이 생성되는 문제 수정

    • RAC 환경에서 Failback되었을 때 주 데이터소스에 사용하지 않는 커넥션이 생성되는 버그가 수정되었다.

  • Cluster DataSource의 동적변경 가능 항목 수정 시 서버의 재기동이 필요하다고 메시지가 출력되는 문제 수정

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

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

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

  • 부하 상황시에 physical connection이 끊어지는 현상

    • 부하상황에서 커넥션이 닫히는 경우 커넥션의 상태를 판단하는 부분의 타이밍 문제로 physical connection이 끊어지는 현상을 수정하였다.

  • 부하 상황에서 idle connection이 있음에도 불구하고 getConnection에 실패하는 현상 수정

    • 부하상황에서 idle connection이 있음에도 getConnection에 실패하고 WaitTimeoutException이 발생하는 현상을 수정하였다.

    • 커넥션을 얻어도 되는 스레드인지 체크하여 동기화 처리를 보장하였다.

2.3.6. JMS

  • 트랜잭션의 rollback의 경우에도 DLQ로 가는 현상 수정

    • 트랜잭션에서 rollback은 메시지의 오류보다 사용자에 의한 rollback인 경우가 있을 수 있어 DLQ로 처리하면 안되는데 이를 DLQ로 보내던 문제를 수정하였다

  • Tibero JDBC Driver의 구현이 변경되어 Max Chunk Size를 얻어오지 못하는 문제 수정

    • Tibero 5 이후부터 JDBC Driver에서 Max Chunk Size를 얻어올 수 있는 방법이 변경되어 이를 JEUS에 반영하였다.

  • Topic 클러스터링 시 Topic에서 consume이 되지 않는 문제 수정

    • Topic 클러스터링 시 클라이언트가 토픽에서 consume이 되지 않는 문제를 수정하였다.

  • Producer 생성 시 Temporary Destination을 지정하면 메시지 전송에 실패하는 현상

    • Producer 생성 시 Temporary Destination을 지정하여 send하면 메시지 전송에 실패하는 현상이 수정되었다.

      Temporary Destination이 있는 클라이언트로 라우팅은 잘 되지만 메시지를 리턴하고 있는데 전송된 메시지의 destination 내부 라우팅 정보에 connection id가 잘못되어 처리할 connection을 찾지 못하여 실패하는 현상을 수정하였다.

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

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

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

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

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

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

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

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

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

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

    • Local Application과 서버가 메시지를 주고받는 과정에서 Global Order Message 정보가 누락되어 Cluster 내의 다른 서버에 Global Order Message가 있어도 이를 처리하지 못하는 현상이 있었다. Cluster 내의 각 서버마다 Global Order Message를 분배하여 쌓은 후 Global Order Message 순서에 따라 순차적으로 소비될 수 있도록 수정되었다.

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

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

  • JMS 트랜잭션 메시지 처리에 실패하는 문제 수정

    • xa transaction 메시지를 보낸 후 end를 하지 않고 prepare나 commit을 하면 메시지 처리에 실패하던 현상이 수정되었다.

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

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

  • Failover를 수행한 서버가 Fail될 경우 기존에 Fail되었던 서버는 Failover가 되지 않는 문제

    • Failover를 수행할 경우 Failover에 대한 정보를 살아있는 서버들이 공유하고 있는데 이 정보 때문에 2차 Failover 시에 이미 Failover되었다고 판단하고 Failover를 skip하는 문제를 수정하였다.

  • 클러스터링을 동적으로 추가/삭제시 Topic이 동적반영되도록 수정

    • 클러스터링을 동적으로 추가/삭제하는 경우 Topic 클러스터링이 동적반영되지 않는 문제를 수정하였다.

  • Virtual Listener에 IP와 Port 설정 후 기동하게 되면 NullPointerException 발생하던 문제 수정

    • 서비스 그룹의 virtual listener를 설정하고 서버를 재기동하는 경우 NullPointerException이 발생하던 문제를 수정하였다.

  • Clustered Queue에 대해 recovery된 메세지의 async comsume이 안되는 문제 수정

    • 클러스터에 queue가 존재하고 서버가 정상 종료 후 기동된 경우 다른 서버에서 consumer가 async connection되면서 produce된 메시지가 consume이 되지 않는다. 이때, recovery가 발생하면서 consumer로부터 onMessasge()가 호출되어야 하지만 호출되지 않는 문제를 수정하였다.

  • Ping 관련 네트워크 시스템 프로퍼티가 반영되지 않는 문제 수정

    • JMS 엔진에서 jeus.net.ping.enable, jeus.net.ping.period, jeus.net.ping.timeout 설정이 반영되지 않아 서버 비정상 종료 시 fail-over 및 switch-over, recovery가 정상적으로 동작하지 않는 문제를 수정하였다.

2.3.7. Node Manager

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

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

  • apply-patch/remove-patch 명령어에 nodas 옵션이 제대로 동작하지 않는 문제 수정

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

  • Node Manager로 서버를 기동할 때 AES로 암호화된 패스워드를 입력하면 기동에 실패하는 문제 수정

    • NodeManager로 서버를 기동하는 경우 서버의 ID와 password가 AES로 암호화되어 있는 경우 기동에 실패하는 현상이 수정되었다.

  • 서로 다른 운영체제에서 도매인 백업이 정상적으로 동작하지 않는 문제 수정

    • 운영체제마다 서로 다른 파일 구분자를 사용함에 따라 도매인 백업이 설정되지 않은 경로에 저장되는 문제를 수정하였다.

2.3.8. Security

  • 대량의 EJB 배포 시 시간이 오래 걸리는 문제 수정

    • 대량의 EJB가 포함되어 있는 애플리케이션을 배포하는 경우 내부적으로 permission 동작을 진행 중에 시간이 오래 걸리던 문제를 수정하였다.

  • security.key 파일에 존재하지 않는 알고리즘이 있는 경우 추가되지 않고 덮어 쓰는 현상 수정

    • security.key 파일의 내용에 새로 추가하는 경우 알고리즘이 존재하지 않는 경우 알고리즘 내용이 추가되지 않고 덮어 쓰는 현상이 수정되었다.

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

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

2.3.9. Server

  • WebAdmin에서 클러스터에 서버를 추가하는 경우 Need to restart 상태가 true로 변경되는 문제 수정

    • WebAdmin에서 존재하던 클러스터에 서버를 추가하는 경우 Need to restart 상태가 true로 변경되는 문제를 수정하였다.

  • external, custom resource의 properties 값에 객체명이 출력되던 문제 수정

    • add-external-resource, add-custom-resource, modify-external-resource,modify-custom-resource 명령어 결과에 properties 항목에 객체명이 출력되던 문제를 properties 값이 출력되도록 수정하였다.

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

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

  • SMTP 핸들러 문제 수정

    • SMTP 핸들러 설정이 잘못된 경우 오류 메시지가 정확하게 표시되지 않는 문제를 수정하였다.

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

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

    • 'Send For All Messages' 설정이 되어있지 않는 경우 실제 logger에 핸들러로 추가되지 않는 문제를 수정하였다.

  • stopServer에서 domain과 filename 옵션이 적용되지 않는 문제 수정

    • stopServer 명령어에서 cachelogin을 사용하려면 f 옵션과 domain 옵션을 사용해야 하는데 이 기능이 동작하지 않던 문제를 수정하였다.

  • FileHandler의 Rotation 관련 오동작 수정

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

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

  • remove custom resource가 동작하지 않는 문제

    • remove custom resource 명령어을 수행하면 NPE(NullPointerException)이 발생하던 문제를 수정하였다.

  • Windows / Unix간 통신하는 경우 jarscan.properties 파일이 제거되는 문제 수정

    • DAS/MS를 Windows / Unix 간 통신하는 경우 file seperator가 서로 달라 jarscan.properties 파일이 제거되는 문제를 수정하였다.

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

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

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

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

  • Unix 환경에서 LD_LIBRARY_PATH가 적용되지 않는 문제

    • LD_LIBRARY_PATH 환경변수가 적용되지 않아 SO 파일이 적용되지 않는 문제가 있어 이를 수정하였다.

  • create-domain, delete-domain 명령어에서 특수문자가 입력되던 문제 수정

    • create-domain, delete-domain 명령어를 수행하는 경우 도메인명으로 사용할 수 없는 특수문자를 입력한 경우에도 도메인이 생성되던 문제를 수정하였다.

  • logManager.reset(), readConfiguration()을 호출하는 경우 SecurityException이 발생하는 문제 수정

    • JEUS 내부적으로 LogManager.reset()을 호출하는 경우 JeusLogManager.reset()으로 인터셉트하도록 구성되어 있어서 발생하는 문제로 이를 동작하지 않도록 기능을 수정하였다.

  • jeusadmin 혹은 Node Manager에서 서버 종료 시 graceful, shutdowntimeout 옵션이 동작하지 않는 문제 수정

    • jeusadmin 혹은 노드 매니저로 서버를 종료하는 경우 graceful, shutdowntimeout 옵션이 동작하지 않는 문제를 수정하였다.

  • 여러 개의 서버를 동시에 기동할 때 OverlappingFileLockException이 발생할 수 있는 문제 수정

    • 다량의 MS를 동시에 기동하는 경우 domain.xml파일을 DAS로부터 전송 받는데 이때 Lock을 획득하려고 시도하는 과정에서 OverlappingFileLockException이 발생하는 문제를 수정하였다

  • formatter-class 설정이 동작하지 않는 문제

    • log formatter class를 jeus.util.logging.SimpleMillisFormatter로 설정한 경우 동작하지 않는 문제를 수정하였다.

  • 로그 로테이션이 발생하는 과정에서 Thread hang이 발생하는 현상 수정

    • FileHander의 로그 로테이션 과정에서 thread hang이 발생하는 현상을 수정하였다.

  • smtp-handler 설정 수정 시 NoSuchMethodException 발생하는 문제 수정

    • smtp-handler를 동적으로 설정을 변경하는 경우 NoSuchMethodException 발생하는 문제를 수정하였다.

  • apply-patch 명령어 수행 시 패치 파일명을 입력하지 않으면 패치 전송에 실패하는 현상

    • apply-patch 명령어를 수행하는 경우 파일명 옵션을 입력하지 않은 경우 패치 파일 전송에 실패하는 현상을 수정하였다.

2.3.10. Servlet

  • EJB가 있을 경우 ejb in a war만 디플로이하도록 수정

    • 웹 모듈 디플로이 시 Annotation(@)을 스캔해서 EJB 존재 여부를 확인하도록 수정하였다.

  • reverse proxy의 전반적인 오류 수정

    • reverse proxy가 설정된 애플리케이션을 undeploy하여도 일부 기능이 동작하는 현상을 수정하였다.

    • reverse proxy를 설정한 후 error-page가 동작하지 않는 문제를 수정하였다.

    • reverse proxy의 클러스터가 동작하지 않는 문제를 수정하였다.

    • reverse proxy에서 한글이 깨지는 문제를 수정하였다.

    • HTTPS로 요청하였지만 HTTP로 redirect되는 문제를 수정하였다.

    • reverse proxy에서 파일이 다운로드되지 않는 문제를 수정하였다.

  • appcompiler 수행 시 web.xml 설정을 읽어서 jsp 파싱

    • appcompiler 명령어를 수행하는 경우 web.xml의 jsp-config 설정 부분이 동작하지 않던 문제를 수정하였다.

  • TCP 관련 애플리케이션을 HTTP URL로 호출할 경우 OOM(Out Of Memory)이 발생하는 문제 수정

    • TCP 관련 애플리케이션을 HTTP URL로 호출할 경우 OOM(Out Of Memory)이 발생하였다. TCP Listener의 Max Post Size를 설정하고 해당 값보다 Size가 클 경우 로그를 남기고 호출을 종료하도록 수정되었다.

  • WebSocket 세션 상태 관리 로직 변경

    • WebSocket 세션 상태를 정상적으로 관리하지 못해 지연이 발생하거나 IllegalSateException 등이 발생하였는데, 발생하지 않도록 오류를 수정하였다.

  • 요청을 순차적으로 처리하기 위해 하나의 요청을 읽은 후 OP_READ 제거 없이도 요청 처리하도록 수정

    • Listener에서 OP_READ를 제거하지 않도록 변경하였다.

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

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

  • web-listener 명령어에 대한 설명 및 오동작 수정

    • modify-web-listener의 -tidle 옵션에 따라 max-idle-time 설정이 변경되지 않던 문제를 수정하였다.

    • add-web-listener 옵션 설명을 수정하였다.

    • - tmin Tmax 설정이 필수임에도 설명이 부적절한 문제, ajp,tcp listener의 옵션 설명이 잘못되어 있어 이를 수정하였다.

  • postdata-read-timeout 동작하지 않는 문제 수정

    • postdata-read-timeout이 동작하지 않는 문제를 수정하였다.

  • 동적으로 필터를 추가하는 경우 순서가 잘못 동작하는 문제 수정

    • addMappingForUrlPatterns 메소드를 이용하여 Filter를 추가하는 경우 isMatchAfter 매개변수의 스펙을 잘못 해석하여 반대로 등록되는 문제를 수정하였다.

  • web.xml의 web-resource-collection 하위에 http-method가 동작하지 않는 현상 수정

    • web.xml의 web-resource-collection 하위에 http-method를 7개 이상 설정한 경우 7번째 이후부터는 기능이 동작하지 않는 문제를 수정하였다.

  • ajp-listener에서 응답이 8kb를 초과하는 경우 요청을 처리하지 못하는 현상

    • ajp-listener에서 응답이 8kb를 초과하는 경우 요청을 처리하지 못하는 현상이 수정되었다.

  • EL expression 사용 시 IllegalStateException 발생하는 문제 수정

    • EL에서 메소드를 호출할 경우 JDK 내부적으로 reflection을 사용한다. 이때 호출하려는 class의 modifier가 public이 아닌 경우 예외를 던지도록 되어 있어, EL 관련 내부 클래스들을 public으로 변경하였다.

  • 파일명에 역슬래시(\)가 있는 경우 탐색이 제대로 안되는 문제

    • TLD 파일을 찾으려고 검색하는 과정에서 파일명에 역슬래시(\)가 있는 경우 무한 루프로 인해 OOM(Out Of Memory)이 발생하는 현상을 수정하였다.

  • 예외 상황 발생 후 cache된 응답이 나가는 현상 수정

    • header와 body를 처리하는 중간에 예외가 발생하는 경우 header, body를 들고 있던 버퍼를 비워주어야 하는데 해당 부분이 누락되어서 예외 상황 발생 후 다음 요청에 이전 요청의 응답이 나가버리는 문제를 수정하였다.

  • encodoingURL()을 사용하는 경우 path parameter로 설정된 jsessionid가 반영되지 않는 현상 수정

    • encodoingURL()을 사용하는 경우 설정에 따라 path parameter로 sessionid를 붙여준다. jsessoind-name설정을 통해 기본값을 변경해도 값이 변경되지 않는 현상이 수정되었다.

  • tag file를 여러 JSP에서 사용하는 경우 ClassNotFoundException이 발생하는 현상

    • tag file을 여러 JSP에서 사용하는 경우 jsp 컴파일 시점에 ClassNotFoundException이 발생할 수 있는 문제를 수정하였다.

  • javax.servlet.forward.request_uri의 구현 방법을 변경

    • javax.servlet.forward.request_uri의 결과 값이 servlet spec 해석의 차이로 타 WAS와 달라서 이를 동일하게 동작하도록 기능이 수정되었다.

  • ajp listener가 동작하지 않는 문제 수정

    • ajp listener와 JEUS 간에 연결이 정상적으로 동작하지 않는 문제를 수정하였다.

    • post 요청시 body를 처리하지 못하는 문제를 수정하였다.

  • modify-tmax-connector 명령이 동작하지 않는 문제 수정

    • jeusadmin에서 modify-tmax-connector 명령이 동작하지 않는 문제를 수정하였다.

  • jeus-web-dd.xml의 graceful-jsp-reloading가 동작하지 않는 문제 수정

    • reloading 주기가 동작하지 않아 graceful-jsp-reloading이 동작하지 않는 문제를 수정하였다

  • WJP v2의 프로토콜이 다른 경우 attribute를 읽지 않도록 변경

    • WebtoB와 JEUS가 사용하는 WJP v2가 상이한경우 알지 못하는 attribute가 전송된 경우에도 이를 무시하도록 기능이 수정되었다.

  • 스프링 프레임워크 사용시 zip file closed가 발생하는 문제 수정

    • 스프링 프레임워크 내부에서 JEUS의 ContextLoader를 통해서 얻은 URL로부터 jar file를 얻은 후 close하고 있어서 발생하는 문제이다. 외부 jar를 close하지 않도록 기능이 수정되었다.

  • querystring의 value로 % 만 쓰는 경우 IllegaArgumentException 발생 문제

    • QueryString에 %만 입력하는 경우 IllegaArgumentException이 발생하는 문제를 수정하였다.

  • web.xml의 <security-constraint> 설정에 있는 <url-pattern>이 유효한 값임에도 deploy 실패하는 문제 수정

    • web.xml의 <security-constraint> 설정에 있는 <url-pattern>이 유효한 값임에도 유효성 검사를 잘못하여 deploy에 실패하는 현상이 수정되었다.

  • 세션 리스너 호출 시 thead context class loader가 잘못 설정될 수 있는 문제 수정

    • 세션이 시간이 지나 만료되는 경우 HttpSessionListener를 등록해 놓은 경우 sessionDestroyed()가 호출되어야 하는데 실제 해당 리스너가 속한 classloader가 아닌 다른 classloader가 설정될 수 있는 문제를 수정하였다.

  • ServletContext.getInitParameterNames()에서 설정되지 않은 값이 출력되던 문제 수정

    • ServletContext.getInitParameterNames()로 parameter를 가져오는 과정에서 web.xml에 설정하지 않은 값이 출력되던 문제를 수정하였다.

2.3.11. Session Server

  • remove-session 명령어 실행 시 backup session이 지워지지 않는 문제 수정

    • remove-session 명령어를 수행하는 경우 active session은 제거되지만 backup session이 제거되지 않는 문제를 수정하였다.

  • EJB Application과 Web Application을 동시에 boot time deploy하는 경우 backup-server이 NULL이 되는 문제

    • EJB Application과 Web Application을 동시에 boot time deploy하는 경우 backup-server이 NULL이 되는 현상을 수정하였다.

  • Session invalidation 중복 호출되는 문제 수정

    • HttpSessionBindingListener.valueUnBound()는 세션이 제거 시 호출될 수 있는데, 이 메소드에 session. invalidate()이 구현된 경우 session이 제거되었다는 로그가 출력되는 문제가 있었다. session invalidate가 중복으로 호출되지 않도록 오류가 수정되었다.

  • migration을 수행하지 않도록 세션 서버가 설정되어 있는 경우 invalidate() 후에도 세션이 유지되는 문제 수정

    • migration을 수행하지 않도록 세션 서버가 설정되어 있는 경우 invalidate() 후에도 세션이 유지되는 문제를 수정하였다.

    • primary server에 세션 정보를 저장하여 update, remove 수행할 때 해당 정보를 사용하도록 하였다.

  • 중복로그인 방지기능 사용 시 attribute에 한글을 사용하는 경우 백업이 되지 않는 문제 수정

    • 중복 로그인 방지기능 사용 시 attribute에 한글을 사용하는 경우 백업이 되지 않는 문제를 수정하였다.

2.3.12. Tool

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

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

  • set-domain-backup 명령으로 backupDir, nodename 설정을 제거할 수 없는 문제 수정

    • set-domain-backup 명령으로 backupDir, node 설정을 제거할수 없었다. 각 옵션의 값으로 unset을 입력하면 기본값으로 변경되도록 기능이 추가되었다.

  • pack-domin 명령의 node 옵션 오류 수정

    • node 옵션에 대한 validation을 추가하였다.

    • node 옵션을 사용하는 경우 성공/실패시의 결과 메시지를 변경하였다.

      • 성공

        Succeeded to send domain backup file [domain_name] to node [node_name]
      • 실패

        Failed to send domain backup file [domain_name] to node [node_name]. See the server log.
  • unpack-domain에서 노드 이름을 변경해도 nodes.xml이 변경되지 않는 현상

    • unpack-domain을 수행하면 DAS의 listen address, port, node name등을 입력받는데 이 항목들이 domain.xml에는 반영이 되지만 nodes.xml에는 반영되지 않는 문제를 수정하였다.

  • jeusadmin에서 verbose 명령이 동작하지 않는 현상 수정

    • jeusadmin onestep 커맨드로 verbose 옵션을 사용하는 경우 verbose 옵션이 동작하지 않는 현상을 수정하였다.

2.3.13. Transaction

  • JEUS에서 트랜잭션을 시작하여 IIOP로 트랜잭션을 전파하는 경우 트랜젝션이 분리되는 현상

    • 글로벌 트랜잭션을 IIOP 요청을 보내 트랜잭션을 전파하면 트랜잭션 ID가 나뉘어지는 문제가 있었다. 트랜잭션의 global root가 트랜잭션을 IIOP로 전파하는 과정에서 글로벌 트랜잭션 ID에 prefix가 붙어서 발생하는 문제였고. 이를 제거하여 동작하도록 문제를 수정하였다.

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

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

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

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

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

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

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

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

    • 이기종 WAS인 클라이언트에서 IIOP 호출을 통하여 두 대의 JEUS에 요청을 보내고 첫 번째 JEUS는 DB 작업이 성공하고 두 번째 JEUS에서 Timeout이 발생한 경우 클라이언트에서 IIOP Timeout이 발생하여 rollback이 되면 정합성이 깨지는 문제가 발생한다. getConnection과 rollback, query를 수행간에 Lock을 잡아 데이터 정합성이 깨지는 문제를 수정하였다.

  • commit 직전 RootCoordinator와 SubCoordinator가 모두 재기동되면 recovery 이후 시작되는 트랜잭션에 오류가 발생하는 문제

    • RootCoordinator가 알고있는 SubCoordinator의 TM 정보는 맞으나, RootCoordinator가 SubCoordinator와 연결되어있는 트랜잭션의 endpoint socket ID가 종료되었던 과거의 SubCoordinator의 TM의 정보를 가지고 있던 문제를 수정하였다.

  • CORBA IIOP를 통한 EJB 호출시 점차 성능이 저하되는 현상

    • CORBA IIOP를 이용하여 EJB를 호출하면 점차 메모리가 증가하여 성능이 저하되는 현상을 수정하였다.

2.3.14. WebAdmin

  • single quotation 입력 후 [확인] 버튼을 클릭하면 &$#39; 로 변환되며 에러가 발생하는 현상 수정

    • input data에 작은따옴표(' ')나 큰따옴표(" ")와 같은 특수문자를 입력하는 경우 문자가 &$#39;로 변경되어 오류가 발생하는 현상을 수정하였다.

  • ID에 슬래시(/)가 포함 되어 있는 경우 상세 페이지로 이동 시 에러 페이지로 이동하는 현상 수정

    • ID에 슬래시(/)가 포함되어 있는 경우 상세 페이지로 이동하는 경우 에러 페이지로 이동하는 현상을 수정하였다.

  • System logging에서 FileHandler 생성되지 않는 현상

    • System logging에서 logger를 생성한 후 FileHandler가 생성되지 않는 문제를 수정하였다.

  • server listener 추가후 TCP listener 추가 시 에러 발생

    • server luistener ref 항목이 없는 WebtoB, Tmax를 추가한 후 ajp13, http, tcp 리스너를 추가하는 경우 에러가 발생하는 현상을 수정하였다.

  • MS별로 virtual-host 설정이 서로 다른 경우 application deploy가 실패하는 현상 수정

    • MS 별로 virtual-host가 설정되어 있고, virtualhost를 상대로 애플리케이션이 deploy하는 경우 첫 번째 시도에는 정상적으로 deploy되나 remove-target 후 add-target로 deploy하는 경우 deploy에 실패하는 현상이 수정되었다.

  • password validator에 MinLength, MaxLength 항목에 대한 validation 추가

    • password validator에 MinLength, MaxLength 항목에 대한 validation을 추가하였다.