제3장 JEUS 21

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

3.1. 신규 기능

JEUS 21에서는 Jakarta EE 8의 주요 기능을 완벽히 지원함으로써, 개발 생산성을 획기적으로 향상 시켰다. 또한 Jakarta EE 8에서 향상된 여러 기술을 사용하여 보다 안정적인 환경을 제공한다.

3.1.1. SuperFrame Master

  • 기존 WebAdmin을 SuperFrame Master로 통합

    • Master에서 JEUS21(Managed Server)를 제어 및 설정

    • 새로운 UI 적용

3.1.2. Topology

  • Topology UI 적용

    • Topology UI를 적용하여 전체 시스템을 관리하기 쉽도록 제공한다.

3.1.3. Session Server

  • 세션 스토리지로 Redis, Hazelcast 사용 기능 추가

    • 기본 제공 세션 스토리지가 아닌 Redis 및 Hazelcast를 사용할 수 있는 기능 제공한다.

  • Sticky encoding의 encoding rule 기능 개선

    • session의 encoding-rule을 padding이 출력되지 않도록 value값 BASE64_WITHOUT_PADDING과 RAW를 추가하게 되었다.

  • Session Server의 backup table을 jeusadmin tool을 이용해서도 볼 수 있는 기능 추가

    • server의 로그에서 뿐 아니라 jeusadmin을 통해서 session server의 backup table을 조회할 수 있다.

  • list-session command의 기능 추가

    • timeout이 지난 session을 -inactive 옵션으로 조회할 수 있다.

    • 특정 session만을 session id로 -i 옵션을 통해 검색하여 조회할 수 있다.

  • Session Cluster설정을 Session Storage 설정으로 확장

    • session을 관리하는 session manager와 실제 session을 보관하는 session storage를 분리하게 되었다.

    • session storage로 JEUS, REDIS, RUNTIME과 같은 Provider를 설정하여 사용할 수 있다.

    • session storage 설정을 위한 jeusadmin command를 제공 한다.

  • Application 과 Cluster에 session scope를 추가/제거 할 수 있는 기능 추가

    • 기존에는 session-cluster 하위에 specific session scope를 만들고 application의 jeus-web-dd.xml에 scope를 설정 하지만 JUES21에서는 scope에 Application과 Cluster를 직접 설정할 수 있다.

  • 분산식 환경에서 full-search 옵션 기능 추가

    • session을 전체 서버에서 찾는 기능의 사용 여부를 판단하는 옵션이 필요하여 0과 음수는 사용하지 않는다는 의미로 사용되고 0보다 큰 수는 실제 timeout값으로 사용한다.

3.1.4. Deployment

  • OSGI Framework 동작 기능 추가

    • JEUS 상에서 설정을 통해 OSGI Framework 인스턴스를 생성하고 초기화할 수 있는 설정을 제공한다.

3.1.5. JBatch

  • Batch Threadpool 상태 모니터링 기능 추가

    • thread-info 명령어를 통해 batch thread를 모니터링할 수 있도록 추가하였다.

3.1.6. JDBC

  • connection validation시 별도의 스레드를 생성하여 check-query를 수행하고 스레드에 timeout을 주도록 기능 추가

    • 데이터소스의 connection pool 설정에서 "Connection Validation" 하위의 "Check Query Class"를 "jeus.jdbc.connectionpool.TimeLimitedConnectionChecker"로 설정하여 스레드에 timeout을 주도록 추가하였다.

  • 데이터소스 계정 관리 기능 확장

    • 계정 관리 기능을 유연성있게 확장하기 위해 JEUS JDBC 엔진과 DB 접속 계정 정보를 관리하는 시스템 사이에 적절한 인터페이스, API를 추가하였다.

      클래스설명

      jeus.jdbc.helper.DataSourceAccountProvider

      내부적으로 DB에 접속하기 위한 "User"와 "Password"를 얻어올 수 있는 API를 정의하고 있다.

      jeus.jdbc.helper.DefaultDataSourceAccountProvider

      위의 인터페이스에 대해 JEUS에서 기본적으로 제공하는 구현체이다.

      jeus.jdbc.datasource.DataSourceAccountProviderException

      위의 인터페이스 구현체가 DB에 대한 "User"와 "Password" 값을 평문으로 얻는데 실패했을 경우 JEUS JDBC 엔진에게 던지는 에러를 정의한다.

  • 데이터소스 connection pool 초기화 중 JDBC connection 생성 단계에서 에러가 발생해도 connection pool 초기화 작업을 완료하는 옵션 기능 제공

    • connection pool 초기화 중 에러 발생해도 connection pool 초기화 작업 완료할 수 있도록 하는 jeus.jdbc.connection-pool.keep-initialization-on-connection-error 옵션을 제공한다.

  • 서버 기동 시 JDBC connection pool 초기화를 수행하는 옵션 기능을 추가

    • 서버 기동 시 connection pool 초기화를 할 수 있도록 하는 jeus.jdbc.connection-pool.initialization-on-boot 옵션을 제공한다.

  • jeusadmin에서 add-data-source command 옵션으로 algorithm을 추가

    • add-data-source 명령어에 algorithm을 추가하였다.

3.1.7. JMS

  • JEUS Store Postgre EnterpriseDB 추가 지원

    • JEUS Store 설정 시 EnterpriseDB를 추가 지원하도록 한다.

  • Quota를 정의해 Destination별로 설정 기능 추가

    • 해당 기능이 추가됨에 따라 add-jms-quota, modify-jms-quota, remove-jms-quota, list-jms-quotas 명령이 추가되었다.

    • Quota를 정의하여 Destination별로 설정할 수 있도록 기능이 추가되었다. 단, Cluster 환경의 destination은 Quota 설정이 불가하다.

  • jeusadmin [JMS] 항목 명령어 추가

    • Connection factory, Quota, Destination 등 jms 리소스 설정 항목 추가/조회/수정/제거 명령이 추가되었다.

  • JMS Clustering 구조 확장

    • 기존 DurableSubscription에 한정하여 클러스터링이 동작하던 구조에서 Shared / Durable / SharedDurable subscription을 추가적으로 클러스터링 동작이 되도록 지원한다.

  • Topic message multicast 기능 추가

    • Topic message를 UDP multicast를 이용하여 publish하는 기능을 지원한다.

3.1.8. Logging

  • log 파일에 posix permission, chown 설정 시 Domain 일괄적용 기능 추가

    • Domain 내 모든 log 파일에 posix permission, chown을 적용하는 기능이 추가되었다. 기존 Logger의 file-handler와 함께 설정할 경우 file-handler 설정이 우선된다.

3.1.9. Network

  • NIO Selector sharing 기능 추가

    • NIO Selector를 전체가 공유하는 방식과 Base Listener를 제외한 나머지가 공유하는 방식을 제공하는 기능이 추가되었다.

3.1.10. SCF

  • 타 서버와 통신하는 방식 transport 설정 추가

    • 도메인 설정 변경 시 transport 설정으로 DUMMY, HYBRID, MESH, TREE를 선택하는 방식이 추가되었다. 단, 쿠버네티스 환경에서는 TREE를 고정으로 사용하도록 한다.

  • Virtual Multicast가 Master Server의 주소만 특정된 상태에서도 동작하도록 기능 추가

    • 최소한 Master Server의 listen-address만 기술해 놓으면 Virtual Multicast가 가능하도록 기능이 추가 되었다.

  • SCF의 Callback을 호출받고 싶은 Executor를 Listener에 지정할 수 있는 기능 추가

    • 이벤트에 대한 Callback은 Thread pool에 맡겨 수행하게 된다. 여러 이벤트가 동시에 발생할 경우 호출 순서 예측이 불가능하여 Callback을 호출받을 Executor를 지정할 수 있도록 기능이 추가 되었다.

3.1.11. Security

  • role, resource command 추가

    • principal의 role과 resource를 추가, 변경, 제거하는 기능과 명령어가 추가되었다.

3.1.12. Server

  • Lifecycle Invocation 설정 command 기능 추가

    • Lifecycle Invocation 설정 시 webadmin을 통해서만 설정 가능했던 부분을 고려하여 jeusadmin command로도 설정 가능하도록 기능이 추가되었다.

3.1.13. Servlet

  • Servlet 4.0 스펙 지원

    • Servlet 4.0 스펙의 기능을 지원한다.

  • Websocket client 지원 기능 추가

    • client authentication 기능을 제공한다.

  • JEUS valve 기능 추가

    • tomcat valve 기능으로 서버와 가상호스트 단위로 filter를 적용하는 기능을 제공한다.

    • URL rewrite 기능 옵션을 제공한다.

      • jeus.servlet.valve.rewrite.RewriteValve

  • 모든 http 응답을 chunked로 나가게 하는 옵션 추가

    • weblogic 윈백 및 JEUS 7 fix 3 이하 버전에서 업그레이드 하는 경우를 고려한 옵션을 제공한다.

      • jeus.servlet.response.forceChunkedResponse 프로퍼티를 true로 설정한다.

  • jeusadmin AccessLog 명령어에 permission 옵션 추가

    • jeusadmin access-log 하위의 file-handler에서 log 파일의 접근 권한을 설정할 수 있는 permission 옵션을 추가한다.

  • WJP websocket 지원

    • 이전 버전(JEUS 8 Fix#1)까지 reverse proxy를 통한 연결 방식에서 WebtoB - JEUS 간 reverse connection을 통한 websocket 통신을 지원한다.

  • http method 제한 옵션 추가

    • http method를 서버 단위에서 제한할 수 있도록 옵션을 추가한다.

      Valve Class namekeyvalue

      jeus.servlet.valve.MethodConstraintValve

      deny or allow

      GET, POST 등

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

    • Set-cookie 헤더에 SameSite 속성을 추가한다.

  • JSP Compiler에 Eclipse Compiler 추가

    • JSP Compiler에 동시성 버그가 없는 Eclipse Compiler를 추가한다.

  • user agent에 따라 Cookie의 SamsSite 속성을 삭제할 수 있는 필터 추가

    • 특정 user agent에서 Cookie의 SameSite 속성을 삭제할 수 있는 필터를 추가한다.

3.1.14. Transaction

  • TransactionManager의 suspend와 resume api를 스펙에 맞게 제공

    • 스펙에 맞게 TransactionManager의 suspend와 resume api를 사용할 수 있도록 기능을 제공한다.

3.2. 변경 기능

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

3.2.1. HostManager

  • NodeManager가 없어지고 동일한 기능을 하는 HostManager로 변경

3.2.2. Deployment

  • Application-info 명령어를 통해 애플리케이션 세부 설정 조회 기능 추가

    • application-info -id <APPLICATION_ID> -detail 형태로 입력 시 애플리케이션 속성 정보가 빠짐없이 출력되도록 변경한다.

  • EJB 배포 시 변경사항이 없는 app일 경우 fast-deploy를 항상 사용하도록 변경

  • Deploy-0232 메시지 출력 시 INFO 메시지에는 Stack Trace를 출력하지 않도록 변경

3.2.3. EJB

  • IIOP 통신 상에서도 WorkArea 기능 사용할 수 있도록 확장

    • IIOP 통신 상에서도 WorkArea 부가기능 사용할 수 있도록 기능을 제공한다.

  • Scheduler Service를 사용하지 않으면 boot time에 로드하지 않도록 변경

    • <scheduler> <enable> 옵션이 false일 때 Scheduler Service를 boot time에 로드하지 않도록 변경하였다.

3.2.4. JDBC

  • DataSource 설정 시 export-name으로 alias를 줄 수 있도록 기능 개선

    • datasource-id 당 복수개의 export-name을 설정할 수 있도록 기능을 개선한다.

3.2.5. SCF

  • 도메인 설정 변경 시 Use Virtual Multicast 기능 제거

    • 타 서버와 통신하는 방식 transport 설정 기능이 추가되면서 Use Virtual Multicast 기능은 제거되었다.

  • SCF 초기화시에 자동 생성되는 Join 이벤트의 범위를 subGroup까지 확장

    • SCF 초기화시에 Leader 선정된 후 자기 자신에 대한 Join 이벤트를 생성하여 Callback들을 호출해 준다. 이때, Default Group에 대한 호출뿐 아니라 subGroup까지 확장하도록 변경되었다.

3.2.6. Security

  • role-user mapping command를 role-principal mapping command로 변경

    • (un)assign-role-to-user의 command는 (un)assign-role-to-principal로 변경되었다.

  • Managed Server의 masterurl 이 localhost인 경우 Master Server에 연결가능한 address를 탐색하도록 변경

    • Managed Server 기동 시 masterurl이 localhost일 경우 local network 주소 중 서버에 연결 가능한 주소로 연결되도록 변경되었다.

  • base64로 Encoding한 암호문에서 Padding 문자를 제거해도 Decoding되도록 변경

  • role과 resource에 대해 할당된 Permission과 할당되지 않은 Permission으로 나누어 관리하도록 변경

    • show-policy의 명령어로 할당된 Permission과 할당되지 않은 Permission으로 나누어 관리하도록 변경 되었다.

  • role과 resource에 대한 (un)assign command 동작을 수정

    • role과 resource에 대한 유효성 검사를 하고, command의 이름을 수정하여 의미를 확실하게 한다.

  • rolePermissionType에서 Principal의 최솟값을 1에서 0으로 변경

    • unchecked와 excluded type인 role에 대해 principal을 지정할 필요가 없다.

3.2.7. Server

  • MS가 정상 기동된 상태에서 비정상 종료 직후 STANDBY로 재기동 되었을 때 서버 상태 반영되도록 변경

    • 서버가 SCF Join 될 때 서버 시작 시간이 기존 서버의 시작 시간과 다른 경우 서버 상태를 UNKNOWN으로 변경한 뒤 서버의 상태를 가져오도록 변경되었다.

  • JEUS 메시지 내 domain.xml 문구 변경

    • domain.xml이 포함된 메시지는 domain 또는 JEUS Domain Configuration으로 변경되었다.

  • stop-server command에서 -f 및 -to 옵션 변경

    • -to 옵션 사용 시 1 이상의 숫자만 입력할 수 있도록 수정하였다.

    • -f, --force 옵션 사용 시 서버 자원 정리 과정을 거치지 않고 강제 종료되도록 수정하였다.

  • 명칭 변경

    • 변경사항

       기존변경

      명칭

      Domain Admin Server / DAS

      Master Server / MASTER

      옵션

      dasurl, daspath, das, excludeDas / exdas, exclusive-das /ed, das-name / das-base-port / das-base-address

      masterurl, masterpath, mastername, excludeMaster / exmaster, exclusive-master / em, master-name / master-baseport / master-base-address

      서버 프로퍼티

      jeus.domainadminserver. deploy.socket jeus.domainadminserver.webadmin.background.deploy jeus.domainadminserver.webadmin.contextpath

      jeus.masterserver.deploy.socket jeus.masterserver.webadmin.background.deploy jeus.masterserver.webadmin.contextpath

3.2.8. Servlet

  • Fake Webadmin 제거

    • webadmin이 deploy 되기 전 사용하였던 fake webadmin을 제거하고 WaitingPage를 제공하도록 변경하였다.

  • session 설정 우선순위를 변경

    • session 설정 우선순위를 webcommon.xml → domain.xml → jeus-web-dd.xml → web.xml 순으로 변경하였다.

  • 무의미한 thread id 출력 삭제

    • 사용자에게 보여지는 페이지에 thread id가 노출되지 않도록 삭제하였다.

3.2.9. Transaction

  • EJB 전파 시 RMI, IIOP 방식을 혼용할 수 있도록 기능 확장

    • EJB 전파 시 클라이언트 애플리케이션에서 RMI, IIOP 방식 혼용하여 사용할 수 있도록 기능을 확장하였다.

  • 클러스터 데이터소스 XA-Affinity가 로컬 트랜잭션까지 커버하도록 기능 확장

    • XA Emulation을 설정한 로컬 트랜잭션에 대해서도 Affinity 기능을 제공한다.