본 장에서는 JEUS v7.0 Fix#4 릴리즈에서 추가된 새로운 기능과 변경된 기능에 대해 간략히 설명한다.
본 절에서는 JEUS의 신규 추가사항에 대하여 설명한다.
Application을 Deploy할 때 EAR Application 내의 라이브러리를 가장 먼저 로딩할 수 있는 기능 추가
Application Deploy할 때 EAR Application 내의 라이브러리를 가장 먼저 로딩할 수 있는 기능이 추가되었다(기존에는 가장 마지막에 로딩되었다).
EAR Application의 jeus-application-dd.xml 의 <classloading><local-lib-first> 태그를 true로 설정하여 적용한다.
Application Name이 설정되지 않았을 때 중복을 피하기 위하여 상위 디렉터리 이름을 포함하여 새로운 이름을 만들어 주는 기능 추가
JavaEE6부터 추가된 Application Name을 jeus-web-dd.xml에 설정하지 않을 경우, Application File Name을 기본으로 사용하도록 하고 있으나, 중복이 발생할 가능성 있고 필요한 경우 이름을 변경할 수 있도록 정의되어 있다.
Application Name을 설정하지 않은 경우 같은 이름의 Application이 둘 이상일 때 기존에는 이름 중복으로 오류를 발생시켰으나, Application이 포함된 디렉터리의 이름을 붙여서 중복이 발생하지 않도록 수정하였다. 단, 디렉터리는 상위 1단계 까지만 이름으로 사용하며 상위 1단계 디렉터리까지 동일한 Application의 경우는 중복오류를 발생시킨다.
application-info 명령에 각 Application에 대해 서버별 상태를 보여주는 기능 추가
application-info 명령에 stateperserver(sps) 옵션을 추가하여 각 Application에 대한 서버별 상태를 출력하도록 하는 기능을 추가하였다.
서버가 내려가 있는 등의 이유로 상태정보를 얻을 수 없는 경우에는 NO_STATE로 출력된다.
backup domain 명령을 수행할 때 다른 노드로 백업된 Domain 압축 파일을 전송할 수 있는 기능 추가
backup domain 명령을 수행할 때 다른 노드로 백업된 Domain 압축 파일을 전송할 수 있는 기능이 추가되었다.
기존에는 백업된 Domain 파일은 Local에만 저장되어 다른 노드로 옮기는 작업은 수동으로 진행했으나, backup domain 명령을 수행할 때 nodemane을 설정하여 원하는 노드로 백업 Domain 파일을 전송할 수 있다.
unpack-domain 명령을 수행할 때 옵션을 받을 수 있는 기능 추가
unpack-domain 명령에 -dasurl, -nodename, -nodeurl 옵션이 추가되었다.
현재는 das listen address, node name, node manager listen address를 커맨드에 별도로 입력해 주어야 하는데, one-step 명령으로 처리될 수 있도록 명령을 수행할 때 한번에 옵션으로 받을 수 있는 기능이 추가되었다.
one-step 명령으로 사용할 경우 모든 옵션을 다 설정해 주어야 정상 동작한다.
jeusadmin에 unpack-domain 명령을 수행할 때 -force 옵션을 줄 수 있는 기능 추가
unpack-domain을 수행할 때 기존에 Domain이 존재하면 unpack-domain 명령이 실패했는데, 이를 -force 옵션을 주어 기존의 Domain이 남아 있더라도 unpack-domain을 수행할 수 있도록 하는 기능이 추가되었다.
-force 옵션을 사용할 때 기존에 남아있던 domain 디렉터리는 삭제된다.
Domain에 포함된 모든 서버에 공통으로 적용되는 log-home 설정기능 추가
Cluster Datasource에 XA Affinity 기능 추가
RAC에서 글로벌 트랜잭션이 이루어지게 되는경우 성능상의 이점을 위하여 물리적으로 분산된 RAC 인스턴스가 아닌 하나의 RAC 인스턴스에서 트랜잭션이 처리되도록 데이터소스를 선택하는 기능이 추가되었다.
XA Affinity가 설정되어 있을 경우 Failover, Failback, Loadbalancing 방식은 무시되고 XA에 묶인 RAC 인스턴스와 동일한 URL을 갖는 데이터소스가 선택되며, XA 하에서 선택할 데이터소스가 없으면 기존의 정책대로 데이터소스를 선택한다.
JMS Message Type Checking 방법 개선
기존의 instanceof 를 통해 JMS Message type을 확인하던 방법 이외에 별도로 Property를 추가하여 Message의 type을 확인할 수 있도록 하였다.
Message type 확인을 위한 Property 이름은 JMS_JEUS_MESSAGE_TYPE 이며, 반환 형태는 String 형태로 Bytes, Map, Object, Stream, Text, File, MessageGroup, Empty가 나오게 되며, 정상적이지 않은 메시지의 경우 Unknown을 출력한다.
Windows 환경에서 서버 간 통신장애를 확인하기 위한 기능 추가
Windows 환경에서 랜선을 제거하면 IOException이 장시간 발생하지 않아서 서버간에 통신이 되지 않는지 확인하는데 시간이 오래 걸릴 수 있다.
이를 방지하기위해 JMX에서 ping으로 MS 간에 서로 통신이 되는지 확인하도록 하는 설정이 추가되었다.
-Djeus.jmx.ping.period, jeus.jmx.ping.timeout
성능을 향상을 위한 Asynchronous Logging 기능 추가
logging을 log를 호출한 worker thread에서 처리하지 않고 전담 logger thread에서 처리함으로써 성능을 향상하기 위해 Asynchronous Logging 기능이 추가되었다.
성능에 민감한 access logger에 대하여 buffer가 찬 blocking 상황 에서도 blocking 없이 넘어가도록 하는 기능이 추가되었다. 해당 기능은 Asynchronous Logging을 사용할 때만 유효하다.
파일 핸들러에 대해서만 지원하며, 해당 기능을 위해 jeus.logging.useAsync=true와 jeus.access.logging.skip.when.busy=true 옵션이 추가되었다.
JEUS Network Library Manual 제공
JEUS Network Library의 Manual을 javadoc 형태로 제공한다.
${JEUS_HOME}/docs/api/jeus-network에서 확인할 수 있다.
SSL을 사용할 때 프로토콜 지정 기능 추가
SSL을 사용할 때 프로토콜들을 지정할 수 있는 기능이 추가되었다.
SSLv3 프로토콜에서 보안문제가 발생하여 이에 대한 대응책으로 특정 프로토콜만을 사용할 수 있는 기능이 추가되었다.
jeus.net.ssl.protocolVersions property에 사용할 프로토콜을 콤마(,)로 구분하여 등록하면 된다.
SSL 클라이언트에서 properties 파일 사용기능 추가
SSL 클라이언트에서 properties 파일을 사용할 수 있는 기능이 추가되었다.
SSL Context를 생성하기 위해서 필요한 정보들을 클라이언트에 설정할 때 System Property를 사용하지 않고 별도의 Properties File로 설정하여 System Property에서 File Path만 설정해서 불러오는 기능이 추가되었다.
노드 매니저 이중화 기능 추가
노드 매니저가 이상 종료되었을 때 이를 감지하고 대기 중인 노드 매니저가 기동하여 노드 매니저의 역할을 하는 기능이 추가되었다.
그러기 위하여 노드 매니저를 부팅할 때 새로운 Thread를 생성하여, standby할 child 노드 매니저 프로세스를 시작하고, child 프로세스와 통신할 리스너를 생성한다.
만들어진 리스너를 통하여 standby 노드 매니저와 주기적으로 heart beat 체크를 하게되며, 이 체크가 실패하였을 때에는 standby 노드 매니저가 기존의 노드 매니저의 역할을 한다.
standby 노드 매니저를 설정한 후 stopNodeManager 명령 수행할 때 standby 노드 매니저를 graceful하게 종료하도록 한다.
standby 노드 매니저가 설정된 상태에서 stopNodeManager 명령을 내리면 active에서 standby로 TERMINATE 메시지를 보내고, standby는 active와 접속 종료 및 로그를 남긴 후 종료된다.
active에서는 standby가 종료되었거나, TERMINATE 메시지 전송 후 2초가 경과하면 standby를 종료시킨다.
노드 매니저에 RQS 프로세스를 모니터, 제어할 수 있는 기능 추가
노드 매니저에 RQS 프로세스를 모니터, 제어할 수 있는 기능이 추가되었다.
기존에는 노드 매니저에서 JEUS 서버 프로세스만을 모니터링, 관리하였으나, Tmax RQS 프로세스를 관리할 수 있는 기능이 추가되었다.
RQS 관련 정보 파일을 읽어서, RQS 프로세스를 실행하고, 모니터링 Thread를 통하여 프로세스를 관리할 수 있다. 모니터링은 heart beat 포트를 통하여 주기적인 통신을 하여 alive를 체크하고, 연결이 끊겼을 때에는 프로세스를 재기동할 수 있다.
Cloud License 추가
JEUS 제품의 CLOUD 플랫폼 지원을 위하여 CLOUD 플랫폼에 맞는 라이선스가 추가되었다.
CLOUD 라이선스를 사용할 경우 host name, ip address, ncpu validation을 체크하지 않고, 기동할 때 로그만 남긴다.
JEUS Launcher와 JEUS 노드 매니저를 개별적으로 패치할 수 있는 기능 추가
JEUS Launcher와 JEUS 노드 매니저를 개별적으로 패치할 수 있는 기능이 추가되었다.
JEUS Launcher나 JEUS 노드 매니저의 패치가 나오는 경우 JEUS 서버에는 적용될 필요가 없으나 기존의 패치 방법으로는 구분할 수 없다.
또한 jeus.properties 파일에 직접 패치 파일에 대해 classpath를 지정해 줘야하는 불편함이 있어 JEUS Launcher나 JEUS 노드 매니저의 패치를 JEUS 서버와 별개로 진행할 수 있는 기능이 추가되었다.
패치 파일의 prefix는 Launcher는 jlext, 노드 매니저는 jnext 이고, 패치 파일의 위치는 $JEUS_HOME/lib/system, $JEUS_HOME/lib/jnext, $JEUS_HOME/jlext 폴더를 사용한다.
jar 라이브러리를 autoExploded 디렉터리로 풀어서 로딩하는 기능 추가
jar 라이브러리를 autoExploded 디렉터리로 풀어서 로딩하는 기능이 추가되었다.
Classloader에 의하여 jar가 로드 된 후에 로드된 jar 파일을 새로운 파일로 runtime에 교체를 하면 class not found와 같은 에러가 발생하는데, 이러한 문제가 발생하지 않도록 jar 파일을 임시 디렉터리에 압축 해제하여 클래스를 로딩하는 기능을 추가하였다.
다음의 옵션으로 압축해제 할 jar 파일을 넣을 디렉터리를 설정할 수 있다.
-Djeus.classloader.append.dirs.autoexplode (기본값: /.workspace/autoExploded)
stopServer 스크립트에 debug와 verbose 옵션 추가
서버가 down될 때 에러 메시지나 출력되는 내용을 확인할 수 있도록 stopServer에 debug와 verbose 옵션을 추가하였다.
stopServer, startDomainAdminServerNM 스크립트에 cachelogin 기능 추가
서버가 down(stopServer)될 때 username/password를 캐시에서 읽어서 진행할 수 있는 기능이 추가되었다.
NodeManager 를 통한 DAS를 기동(startDomainAdminServerNM)할 때 username/password를 캐시에서 읽어서 기동시킬 수 있는 기능이 추가되었다.
Idle Time 기준으로 가지고 있는 세션 정보를 보여주는 명령 추가
jeusadmin에 Idle Time 기준으로 가지고 있는 세션 정보를 보여주는 list-session 명령을 추가하였다.
마지막 접근한 시간을 기준으로 정렬되며, 분산 세션의 경우 passivation된 세션의 목록도 함께 출력된다.
서버가 가지고 있는 세션 중 "일정시간"이 지난 세션들을 제거하는 명령 추가
jeusadmin에 서버가 가지고 있는 세션 중 분단위로 설정한 시간이 지난 세션들을 제거하는 remove-session(rmsession, rms) 명령을 추가하였다.
명령을 수행할 때 조건에 해당하는 경우 Passivation된 세션도 삭제된다.
login manager 기능이 추가됨에 따라 jeusadmin에서 login manager 설정을 추가 변경할 수 있는 기능 추가
login manager 기능이 추가됨에 따라 jeusadmin에서 login manager 설정을 추가 변경할 수 있는 기능이 추가되었다.
jeusadmin의 modify-session-configuration 명령에서 lmp, lms 옵션이 추가되었다.
Application에 Maximum Session Count 적용 기능 추가
Application에 Maximum Session Count 적용 기능이 추가되었다.
기존에는 세션 생성의 제한 및 강제 관리기능이 없어서 세션에 의한 OOM 발생 우려가 있었다.
Application에서 최대한 유지하는 세션 수에 제한을 두고 그 이상의 요청에 대해서는 세션 을 생성하지 않도록 하는 기능을 추가하여 이러한 문제를 방지하였다.
세션 서버가 다른 서버로부터 세션을 유지할 때 마이그레이션을 수행하지 않도록 하는 기능 추가
세션 서버가 다른 서버로부터 세션을 유지할 때 마이그레이션을 수행하지 않도록 하는 기능이 추가되었다.
같은 세션에 대해 iframe 등을 통하여 동시 요청을 보낼 경우 세션이 유실되는 것을 방지하지만, 기능을 위해 지속적으로 업데이트하기 때문에 성능이 하락하게 된다.
appinfo -detail 명령에서 session cluster name을 보여주는 기능 추가
appinfo -detail 명령으로 App의 jeus-web-dd.xml에 설정된 session cluster name 정보를 확인할 수 있는 기능이 추가되었다.
Session manager의 Fail-back 기능 추가
재기동되는 서버가 자신이 백업을 서버로부터 세션을 다시 복구할지를 설정할 수 있는 기능이 추가되었다.
기본적으로 백업으로부터의 복구는 수행하지 않지만, 순차적인 패치 작업 등을 수행시 세션 유실 방지를 위해 지원하며, 다음의 옵션으로 설정할 수 있다.
-Djeus.sessionmanager.failback.allow=true
jeusadmin에 script 모드 추가
jeusadmin에서 command를 통한 반복작업 및 결과값에 따른 처리를 위하여 스크립트 파일을 읽어 지정된 동작을 수행하는 스크립트 모드가 추가되었다.
스크립트 언어는 python과 ruby를 지원한다.
자세한 내용은 “JEUS Reference Book”의 “4.2.18. Script 모드 사용법 및 Script 작성법”을 참고한다
jeusadmin -script 옵션을 사용할 때 argv 넘겨 줄 수 있는 기능 추가
jeusadmin에 -script 옵션을 사용할 경우 스크립트 파일명과 스크립트에서 사용할 argv를 큰따옴표("")로 묶어서 한번에 입력할 경우 스크립트에서 argv를 사용할 수 있는 기능이 추가되었다.
자세한 내용은 “JEUS Reference Book”의 “4.2.18. Script 모드 사용법 및 Script 작성법”을 참고한다.
jeusadmin에 명령어 레코딩 기능 추가
jeusadmin에서 입력한 명령어를 스크립트 형태(확장자를 기준으로 정해짐)로 저장하는 명령어(start-record / stop-record)가 추가되었다.
확장자는 지원하는 스크립트인 *.py와 *.rb 만 지원한다.
이를 위해 스크립트에서 커맨드를 실행할 때 콘솔과 동일하게 결과 출력하도록 변경되었다.
자세한 내용은 “JEUS Reference Book”의 “4.2.18. Script 모드 사용법 및 Script 작성법”을 참고한다
jeusadmin 에서 domain.xml 을 수정할 수 있는 기능 추가
자세한 내용은 “JEUS Reference Book”의 “4.2.16. 설정 편집 명령어”를 참고한다
jeusadmin에 set-servers-option, unset-servers-option 명령 추가
set-server-option과 유사한 기능으로 -servers 옵션이 필요한 명령을 수행할 때 기본으로 사용할 대상을 설정할 수 있는 기능이 추가되었다.
Monitoring/Thread 페이지에서 Thread 상태에 따라 표시되는 내용을 필터링하는 기능 추가
오른쪽 상단에 all / active / idle / blocked / reconn 필터를 적용하는 옵션 버튼이 추가되었으며, 적용된 옵션은 Session Scope 단위로 유지된다.
WebAdmin의 화면을 Refresh할 경우 화면 위치가 초기화되지 않고 기존에 보고 있던 위치를 유지하는 기능 추가
WebAdmin의 monitoring/thread와 백업 화면에서 화면을 Refresh할 경우 화면 위치가 초기화되지 않고 기존에 보고있던 위치를 유지하는 기능이 추가되었다.
WebAdmin의 권한을 console 권한 기준으로 설정할 수 있는 기능 추가
WebAdmin의 권한 관리 기능은 지정된 Role에 따른 UI의 모든 기능을 사용할 수 있게 한다.
그에 따라 콘솔에서 설정 가능한 특정 서버에 대한 Deploy, Undeploy만 가능한 권한을 줄 수 없다.
해당 권한을 사용할 수 있도록 권한 체크를 Console Command 에 위임하는 기능을 제공한다.
-Djeus.tool.webadmin.use.console.permission=true
해당 기능을 사용하는 경우 UI에서 필요한 모든 커맨드에 대한 permission을 설정해야 한다
Domain, Cluster에 lifecycle invocation 설정 기능 추가
lifecycle invocation은 서버의 lifecycle에 따라 수행할 method를 설정할 수 있는 기능으로, 기존에는 서버에서만 설정할 수있었으나 Cluster와 Domain에도 설정할 수 있도록 하여 Domain/Cluster에 속한 모든 서버를 부팅할 때 수행할 수 있도록 변경되었다.
Servers와 Monitoring/Servers 화면에서 서버를 node, group, cluster를 기준으로 그룹화하여 표시하는 기능 추가
Servers와 Monitoring/Servers 화면에서 서버를 node, group, cluster를 기준으로 그룹화하여 표시하는 기능이 추가되었다.
WebAdmin 설정화면에서 Server Group Type과 서버 그룹을 설정하여 적용하고, 오른쪽 상단에 no group, node, group, cluster 버튼을 통해 변경할 수 있다.
WebApp를 Deploy할 때 항상 web.xml의 metadata-complete=true로 동작시키는 옵션 추가
WebApp를 Deploy할 때 항상 web.xml 의 metadata-complete=true로 동작시키는 옵션이 추가되었다.
모든 Application에서 JavaEE 표준에서 정의한 annotation을 사용하지 않기 위하여 web.xml의 metadata-complete = true 설정을 할 수 있는데, 해당 설정과 무관하게 무조건 metadata-complete를 true로 동작시킬 수 있는 옵션이 추가되었다.
-Djeus.servlet.useMetadataCompleteDeploy=true
webinf-first 적용할 때 예외 패키지 추가
jeus-web-dd.xml에 excluded-package를 추가하여 특정 패키지에 대해서는 webinf-first를 적용하지 않도록 하는 기능이 추가되었다.
webinf-first를 통해서 WebApp 내부의 라이브러리의 클래스를 우선적으로 사용할 때 해당 클래스가 bootstrap classloader나 상위 classloader에 이미 정의되어 있을 경우 발생할 수 있는 문제점을 막기 위하여 추가되었다.
WebEngine에 응답할 때 gzip compression 기능 추가
WebEngine(http-listener, webtob-connector)에서 응답 압축 기능을 제공한다.
자세한 내용은 “JEUS Web Engine 안내서”의 “2.3. 웹 커넥션 설정”을 참고한다.
Virtual Host에서 hostname 외에 port를 설정 가능하도록 제공
Hostname과 context path가 같은 경우에 각각의 vhost가 다른 App로 서비스할 수 있도록 vhost를 설정할 때 port 설정을 함께 할 수 있는 기능이 추가되었다.
ResourceServlet에 sendfile(FileChannel.transferTo) 사용 기능 추가
ResourceServlet에 sendfile(FileChannel.transferTo)을 사용하는 기능이 추가되었다.
File에 대한 GET 요청을 보다 효율적으로 처리하기 위하여 추가된 기능으로, use-nio=true이면서 SSL을 사용하는 경우에만 지원하며, jeus-web-dd.xml에 <resource-servlet><sendfile-size-threshold> 옵션을 추가로 지원한다.
Request URL 매핑에 따른 Request Parameter Character Encoding 설정 기능 추가
요청이 들어올 경우 URL 매핑에 해당하는 request의 parameter를 문자열로 만들 때 설정된 character encoding을 사용하도록 하는 기능이 추가되었다.
jeusadmin의 appinfo -detail 명령을 수행할 때 jeus-web-dd.xml의 내용을 보여주는 기능 추가
패키징된 Application의 jeus-web-dd.xml 파일 설정 내용을 편리하게 확인할 수 있도록 appinfo -detail 명령에서 jeus-web-dd.xml의 내용을 그대로 보여주는 기능이 추가되었다.
Client-side에서 message logging을 사용하기 위한 옵션 추가
Client-side에서 message logging을 사용하기 위한 옵션이 추가되었다.
System property를 사용하는 경우는 다음과 같이 설정한다.
-Djeus.webservices.jaxrpc.client.transport.http.soap.verbose=true
logging.properties 파일을 사용하는 경우에는 다음과 같이 설정한다.
jeus.webservices.jaxrpc.client.level=FINEST
또는
jeus.webservices.jaxrpc.client.ClientTransportFactory.level=FINEST
WebSocket 1.1 지원
javax.websocket.Session에서 제공하지 않던 HttpServletRequest의 정보들을 jeus.websocket으로 시작하는 property로 제공하는 기능 추가
기존의 javax.websocket.Session은 HttpServletRequest의 정보들 중 request URI, query string, user(security)를 API를 통해서 제공하고 있으나, 클라이언트의 정보를 담고 있는 remoteXXX API를 제공하지 않는다.
이것을 UserProperties Map(Session.getUserProperties())을 통해서 제공하는 기능이 추가되었다.
WebSocket extension negotiation 추가
javax.websocket.server.ServerEndpointConfig#getExtensions()과 javax.websocket.server.ServerEndpointConfig.Configurator#getNegotiatedExtensions() AIP가 동작되도록 기능이 추가되었다.
본 절에서는 JEUS의 변경사항에 대하여 설명한다.
Interop 설정이 없으면 JavaSE ORB를 비활성화시키도록 변경
Interop 설정이 없는 경우 RMI/IIOP를 사용하지 않는 것을 명시적으로 설정한 것이므로 자동으로 활성화 되던 JavaSE ORB를 비활성화시키도록 변경되었다.
install-jeus, pack/unpack-domain 명령 수행할 때 Last modified Time(LMT)를 유지하도록 변경
install-jeus이나 pack/unpack-domain 명령을 수행할 때 JEUS의 파일들을 압축/해제하여 실제 설정 파일이 변경되지 않았는데도 마지막 수정시간이 변경되어 불필요한 경고 메시지를 받는 경우가 생기는 현상을 방지하기 위하여 Last modified Time(LMT)를 유지하도록 변경하였다.
jeusadmin의 uninstall-jeus 명령어 대상 일부 제한
uninstall-jeus 명령어로 JEUS를 uninstall할 때 DAS 노드인지를 먼저 확인하여 DAS는 uninstall하지 못하도록 변경되었다.
check-query period 시점의 커넥션 관리 정책 변경
check-query period 시점에 커넥션을 확인할 경우 All Connection Mode에서 커넥션에 문제가 생길 경우 pool에 들어있는 모든 idle connection에 check-query를 실행하기 때문에 hang과 유사한 현상이 발생한다.
이러한 문제를 막기 위하여 ConnectionPool의 generation 값이 다른 커넥션에 대해서는 하나하나 정리를 하고, 현재 generation과 일치하는 커넥션들에 대해서는 연속 실패의 경우에 한하여 나머지 idle connection을 버리도록 변경되었다.
Destination이 존재하지 않는 메시지의 처리방법 개선
Destination이 존재하지 않는 메시지에 대하여 함부로 지우면 안되기 때문에 이 메시지들을 DLQ로 이동시킨다
Destination을 삭제하기 전에 남아있는 메시지가 없는지 먼저 확인하도록 변경
Destination을 삭제할 때 의도하지 않게 JMS 메시지를 지우는 경우가 발생할 수 있으므로 이를 방지하기 위하여 삭제 전에 미리 확인하고 메시지가 남아 있다면 메시지가 출력되도록 수정되었다.
Destination을 삭제할 때 남아있는 메시지가 있다면 해당 설정 변경을 pending시키고, 메시지가 남아있으니 재기동하기 전에 이 메시지를 잘 처리하라는 내용이 출력되도록 변경되었다.
DB 장애가 발생하는 경우 JMS Engine을 Suspend시키도록 변경
Persistence Store를 사용할 때 DB 연결에 문제가 있을 경우, JMS 에서는 정상적인 서비스가 불가능하다고 판단하여 JMS Engine을 Suspend시키고, DB 연결이 복구되면 Resume시켜서 다시 서비스할 수 있도록 변경하였다.
Rolling 패치 및 jeusadmin의 patch-info 명령에서 새롭게 추가된 패치 디렉터리도 포함하도록 변경
Rolling 패치 및 jeusadmin의 patch-info 명령에서 새롭게 추가된 패치 디렉터리도 포함하도록 변경되었다.
기존의 패치인 jext 폴더외에 JEUS Launcher의 패치인 jlext와 노드 매니저의 패치인 jnext 폴더도 지원하도록 변경되었다.
노드 매니저와 서버의 security.key 파일 분리
password를 encryption/decryption하기 위한 security.key 파일을 서버와 노드 매니저가 동일한 위치의 파일을 사용하였으나 분리하여 사용하도록 변경되었다.
DAS와 설정 파일을 동기화할 때 security.key 파일이 삭제가 되는 문제가 발생할 수 있다.
노드 매니저에서 사용하는 security.key 파일의 위치는 $JEUS_HOME/nodemanager에 생성된다.
JEUS 노드 매니저 설정을 property 파일에서 XML 파일로 변경
기존에 property 파일에 설정하던 JEUS 노드 매니저의 설정을 $JEUS_HOME/nodemanager/jeusnm.properties에서 jeusnm.xml 로 변경하였다.
stopNodeManager 명령에서 새로운 형태의 환경 파일을 지원하도록 변경
stopNodeManager에서 -p 옵션으로 xml 혹은 properties 파일을 사용할 수 있도록 변경되었다.
서버 기동 상태가 비정상 적으로 표시되던 문제 수정
jeusadmin에서 startserver 명령으로 MS를 기동할 때 jeusadmin에서는 정상적으로 기동되었다는 메시지가 표시되지만 serverinfo에서는 STANDBY로 표시되던 문제가 수정되었다.
memorymonitor property를 사용할 때 thread dump도 남기도록 변경
메모리 사용량에 따른 제어옵션(jeus.server.memorymonitor)으로 정해진 모니터링 설정에 따라 heapdump를 남기고 강제로 MS를 재기동시킬 때 로그 파일에 thread dump도 함께 남기도록 수정되었다.
gc log 파일명을 자동 변경 기능 추가
JEUS를 기동할 때 command option에 "oracle : -Xloggc, IBM : -Xverbosegclog" 옵션을 설정하여 gclog를 생성하면 생성되는 gclog 파일의 이름에 내부적으로 time stamp를 자동으로 붙이는 기능이 추가되었다.
HP는 내부적으로 time stamp를 붙이는 기능이 있어서 제외하였다.
Mail Resource에 Password를 설정할 수 있도록 변경
Java Mail Resource를 설정할 때 property로 연결할 메일 서버의 정보를 설정하는데, 표준 property에 password가 정의되어 있지 않아서 클라이언트 코드에서 직접 password 를 넘겨주어야 하는 불편함을 해소하기 위하여 property에 password를 설정할 수 있도록 변경하였다.
JVM log의 크기가 20KB가 안되면 기존 파일을 삭제하고 새로 생성하는 문제 수정
JVM log의 크기가 20KB가 안되면 기존 파일을 삭제하고 새로 생성하는 문제가 수정되었다.
서버의 jvm.log 파일의 크기가 20KB가 넘는 경우 thread dump가 있는 것으로 가정하고 log rotation이 동작하였는데 파일의 크기가 20KB가 넘지 않는 경우에도 jvm.log를 rotation하도록 수정하였다.
jeusadmin cachelogin 기능 개선
cachelogin을 사용할 때 -u, -p 옵션을 뒤에 붙이는 경우에만 입력한 로그인 정보를 파일에 저장하였으나, 옵션을 사용하지 않고 입력창에서 입력해도 파일에 저장되도록 수정하였다.
패치 정보 조회기능 추가
jeusadmin의 system-info 명령의 patch information에 patch contents를 보여주는 기능이 추가되었다.
이 기능과 관련하여 jeusadmin을 실행할 때 보이는 patch 정보를 disable할 수 있는 옵션(-Djeus.tool.console.patchinfo=false)이 추가되었다.
위 옵션은 jeusadmin 스크립트에 적용하여 사용한다.
호환성 유지를 위하여 setMaxInactiveInterval가 0일 때 세션을 제거하던 기존의 option 지원
기존에는 setMaxInactiveInterval()를 0으로 설정한 경우 세션이 제거되었으나 이를 setMaxInactiveInterval()를 0으로 설정한 경우 session을 지우지 않도록 수정되었다.
이전 버전과의 호환성을 위해 jeus.servlet.session.invalidateBySetMaxInactiveIntervalZero 설정을 제공한다.
WebAdmin 처리속도 개선
어러 개의 서버를 한번에 삭제하는 시간을 크게 개선하였다.
여러 개의 서버가 등록된 경우 서버 정보를 화면에 표시하는 시간이 크게 개선되었다.
여러 개의 서버를 복사할 경우 기존에는 현재 상태를 저장한 후 복제하는 작업을 매번 반복던 것을 1회 저장한 뒤 여러 개의 복제 작업을 수행하도록 변경하여 복제 작업의 성능을 향상시켰다.
여러 개의 서버를 복사할 때 node name을 설정할 수 있도록 변경
기존에는 복사를 실행할 때 전체 서버에서 name과 port 중복을 체크하였으나, 전체 서버에서 name에 대한 중복체크, 같은 노드 에 속하는 서버에서 port 중복 체크, 노드가 다를 경우 Target이 되는 서버와 같은 Port를 할당하도록 변경되었다.
WebAdmin 페이지 검색 대상에서 메뉴 부분은 제외하도록 수정
WebAdmin 페이지 검색창에 캐시 기능 추가
WebAdmin 페이지 검색창에 캐시 기능이 추가되었다.
검색 기능이 동작하는 시점에 캐싱된 이후 동적으로 변경되는 상태나 설정정보는 반영되지 않으며 명시적으로 캐시를 초기화 해야 변경사항이 반영된다.
WebAdmin에서 요청 진행 중 다른요청을 진행하지 못하도록 변경
대화창에서 [확인] 버튼을 클릭해서 요청을 진행하는 경우 요청작업이 완료되기 전에 다른 요청을 진행하여 WebAdmin 동작에 영향울 주는 문제를 방지하기 위하여 화면 전체를 Block하도록 수정되었다.
WebAdmin 화면 표시 중 입력을 차단하도록 변경
WebAdmin 페이지 초기화에 오랜 시간이 걸리는 경우(예: Servers, Application 등), 사용자의 의도하지 않은 입력에 의하여 WebAdmin 동작에 영향을 주는 문제를 방지하기 위하여 페이지가 초기화되는 동안에 화면의 입력을 차단하도록 변경되었다.
서버를 삭제할 때 다수의 서버를 선택하여 한번에 삭제할 수 있는 기능 추가
WebAdmin Table 정렬방식 개선
WebAdmin에 표시되는 테이블 형태의 정렬방식이 서버에서 정렬된 데이터를 전달하는 방식으로 변경되어 내용이 많을 경우 성능이 향상되었다.
Server 화면의 경우 정렬순서와 무관하게 adminServer가 맨 앞에 출력되도록 변경되었으며, 표의 맨 첫 줄(head)을 클릭할 경우 해당 항목에 대하여 오름차순/내림차순으로 정렬하던 기능이 제거되었다.
Deploy 화면에서 Target으로 선택할 서버의 현재 상태를 표시하도록 변경
Deploy 화면에서 Target으로 선택할 서버의 현재 상태를 함께 표시하도록 변경되었다.
Cluster가 Target인 경우는 Cluster에 포함된 서버의 상태는 별도로 표시하지 않는다.
JSP에 대한 Java 파일 저장 인코딩을 jsp page encoding을 기본으로 사용하도록 변경
JSP 파일을 통해 생성한 Java 파일의 encoding은 JSP 파일의 encoding과 같게 만들도록 변경되었다.
jsp-engine/compile-encoding 값은 더이상 참조하지 않도록 변경되었다.
tmax-connector의 use-nio 옵션 삭제
tmax-connector에 속하는 Thread들은 각각 Tmax의 worker 역할을 하는 것으로, I/O 관련 작업은 Tmax에서 수행하기 때문에 JEUS의 use-nio 설정은 불필요하여 관련 기능/옵션을 모두 삭제하였다.
Set-Cookie 형식을 RFC 6265에 맞게 변경
기존에는 attribute를 붙일 때 콜론(;) 뒤에 SP를 붙이지 않도록 되어 있던 것을 RFC에 맞게 콜론 뒤에 SP를 붙이도록 변경하였다.
System Property로 jeus.servlet.followRFC6265SetCookieFormat=false를 설정하면 기존과 같이 콜론 뒤에 공백 문자를 붙이지 않는다.
JavaBeans Property Accessor method의 대소문자 구별 문제 수정
타입이 다르고 대소문자만 다른 동일한 이름의 JavaBeans Property가 존재하는 경우, 매핑되는 동일한 이름의 변수에서 대소문자를 구별하지 못하여 컴파일 오류가 발생하는 문제가 수정되었다.
JAX-RPC 에서 xsd:anyType을 지원하도록 수정
jax-rpc input mapping file을 고려하여 매핑되는 type이 xsd:anyType일 경우에도 지원 가능하도록 수정되었다.
Tie/Stub Class Name 중복으로 Deploy 실패하던 문제가 수정되었다.
noDataBinding을 사용하는 경우 WSDL의 port type name이 동일할 때 Deploy할 때 생성되는 Tie/Stub Class Name이 같은 이름으로 생성되어 Deploy 실패하는 문제가 수정되었다.
생성되는 Tie/Stub Class Name이 WSDL의 port type name이 아닌 port name으로 생성된다.
Server-side NoDataBinding 지원
Server-side에서 NoDataBinding을 설정할 때(javax.xml.soap.SOAPElement) NoDataBinding이 적용되지 않는 문제가 수정되었다.
Deploy time에 data binding 관련 파일들이 생성되지 않는다.
WSDL이 없는 경우 WebServiceProvider를 구별하지 못해 Metrics MBean 등록 실패 문제 수정
WSDL이 없는 경우 WebServiceProvider를 구별하지 못해 Metrics MBean 등록을 실패하는 문제가 수정되었다.
WSDL이 없이 여러 개의 WebServiceProvider를 Deploy할 경우 WebServiceProvider에 대응하는 WSDL Port가 없기 때문에 WebServiceProvider를 구별하지 못하여 첫 번째 WebServiceProvider는 정상 동작하나 나머지 WebServiceProvider는 javax.management.InstanceAlreadyExistsException을 발생시키면서 Metrics MBean 등록에 실패하는 문제가 수정되었다.
본 절에서는 JEUS의 모듈별 버그 수정 사항대하여 설명한다.
Base listener의 address 설정이 IP와 Hostname을 혼용하면 Deploy 실패하던 문제 수정
App Deploy할 때 각 장비의 위치를 확인할 때 같은 장비라도 Base listener의 address 설정이 IP와 Hostname을 혼용하여 설정한 경우 서로 다른 장비로 인식하던 문제가 수정되었다.
하나의 장비를 서로 다른 장비로 인식하여 Deploy할 때 App 파일을 같은 장비로 전송하여 덮어쓰면서 발생하는 문제가 수정되었다.
Non-graceful redeploy할 때 redeploy 명령어의 undeploy-timeout 옵션이 동작하지 않는 문제 수정
DAS를 통해 non-graceful redeploy 명령을 수행할 때 undeploy-timeout이 적용되지 않아서 처리 진행 중인 요청이 끝날 때까지 대기하는 문제가 수정되었다.
Exploded App Directory에 사용자 권한이 없음어도 Deploy 성공하는 문제 수정
Exploded App의 경우 JEUS에서 디렉터리에 대한 권한이 없어도 Deploy가 성공한 것으로 인식하지만 실제 호출되지 않는 문제가 해결되었다.
Archive 형태의 App를 Deploy할 때와 동일하게 디렉터리에 대한 권한을 먼저 확인하고 읽기 권한이 없으면 Deploy 실패하도록 수정되었다.
Windows 장비에서 App를 Redeploy할 때 파일 삭제에 실패하여 Redeploy 실패하던 문제 수정
Windows 장비에서 App를 Redeploy할 경우 파일 삭제에 실패하여 Redeploy 실패하던 문제가 수정되었다.
Windows에서 JEUS로 삭제에 실패했다는 응답을 보내지만 실제 파일은 삭제되고 있으므로 Windows의 응답과 무관하게 Redeploy를 진행하도록 수정되었다.
virtual host 설정된 MS에서 Redeploy 실패하던 문제 수정
context path가 동일한 두 App를 서로 다른 virtual host가 설정된 MS에 Deploy 후 Redeploy를 시도할 경우 Redeploy가 실패하던 문제가 수정되었다.
Exploded App에 Auto Deploy로 설정할 때 Redeploy 반복문제 수정
Exploded Application에 Auto Deploy를 설정하면 DD 파일이 변경되지 않더라도 계속 Redeploy를 반복하던 문제가 수정되었다.
Entity Bean에서 DB에 PK가 없는 Object가 나오는 문제 수정
두 테이블에서 primary key를 동일하게 사용하고 해당 column에 대해 relation으로 사용하는 경우 한 쪽 테이블에 가지고 있는 primary key에 대해 두 테이블에 동일한 데이터가 있다고 가정하여 다른 테이블에 primary key가 있는 object를 저장하였다.
이 테이블에서 primary key에 해당하는 데이터가 없는 경우 object가 아닌 null을 리턴하도록 수정하였다.
MS의 주소가 변경되어도 DAS에서 기존 주소로 MS에 JMX 연결을 시도하는 문제 수정
MEJBUtility에서 JMX Connection을 캐시할 때는 서버 이름만을 key로 사용하고 있기 때문에 장비A에서 server1을 띄웠다가 내린 뒤 장비 B로 옮겨서 다시 server1을 띄우게 되면 최초에 기동되었던 장비 A 로만 연결을 시도하던 문제를 수정하였다.
서버를 재시작하지 않고 장시간 사용하면 OOM 발생할 수 있던 문제 수정
JMX Connection 숫자를 줄이기 위해 도입한 subject delegation 기능에서 AccessControlContext를 재사용하기 위해 suject를 key로 사용하여 AccessControlContext를 캐시하는데, cache entry가 계속 늘어나면서 발생하던 OOM 문제가 해결되었다.
base listener에 real IP Address를 지정한 경우 Deploy할 때 cos naming server로 connect하지 못하던 문제 수정
base listener에 real IP로 Address를 지정한 경우, cos naming server도 real IP로 listen하는데, iiop가 설정된 EJB를 Deploy할 경우 localhost:9740으로 cos naming server에 connect해서 JNDI binding 작업을 진행하도록 되어 있어서 연결하지 못하는 문제가 있었다.
Real IP를 통하여 cos naming server로 연결하도록 변경하여 문제를 해결하였다.
Booting 시점에 다른 서버로 InitialContext을 생성할 때 발생하던 오류 수정
JEUS 내부적으로 code subject라는 system subject를 사용하는데, 부팅할 때 Deploy 작업을 위해 code subject로 login하고 다른 서버로 InitialContext를 만들게 되면 Exception이 발생하는 문제가 수정되었다.
Reliable Multicast를 사용하는 경우 CPU 사용율이 증가하는 문제 수정
Reliable Multicast를 사용하는 경우 메시지를 보내는 sender thread가 일정간격으로 send queue를 polling하며 쓸 메시지가 있는지를 확인하는데, 스케줄링된 작업에 의해 동적으로 변하는 polling timeout 값이 항상 작은 값으로만 세팅되어 스케줄링된 작업이 발생하면 sender thread가 loop를 도는 간격이 계속 짧아지면서 CPU 점유율이 100%까지 올라가던 문제가 해결되었다.
HTTP Listener를 사용하는 경우 socket이 증가하는 문제
HTTP Listener를 이용하여 HTTP 요청을 하는 경우 socket이 불필요하게 증가하고, 정상적으로 닫히지 않는 문제를 수정하였다.
WebAdmin을 통해서 서버를 종료할 때 리소스 정리 문제 수정
노드 매니저가 STOP_SERVER 메시지를 받아 서버를 종료하는 경우(노드 매니저에 접속 후 서버 종료)에는 서버에 대한 자원들을 정리해주지만, WebAdmin을 통해서 서버를 종료하는 경우(서버에서 종료 수행)에는 정리해주지 않는 문제가 있다.
Port 변경 등의 서버의 설정이 변경되는 경우에 노드 매니저를 통한 서버를 기동할 때 변경 이전의 정보를 그대로 사용하는 문제가 있어 서버에 대한 자료를 정리하도록 수정하여 문제를 수정하였다.
stopNodeManager 명령에서 SSL 관련 옵션에 대해 system properties 값이 적용되지 않던 문제 수정
stopNodeManager 명령에서 SSL 관련 옵션에 대해 system properties도 적용되도록 수정되었다.
SSL 관련 설정은 세가지 방법으로 설정값을 받아온다.
stopNodeManager의 p 옵션을 사용하여 property 파일을 통한 설정
stopNodeManager의 t, ts, tsp 옵션 통한 설정
stopNodeManager 스크립트를 통한 system properties 설정
이 중에 system properties 값을 사용하지 못하는 문제가 있어서 수정하였다.
apply-patch, remove-patch 동작 중 에러 발생 시 파일 전송, 삭제가 중단되는 문제 수정
apply-patch, remove-patch 시 파일 전송, 삭제에 대해 모든 작업을 수행 후 에러를 발생시키도록 수정되었다.
serverRetryRestart가 true로 설정되어있을 경우, 서버 재기동 실패 시 서버 상태 체크하도록 수정
serverRetryRestart가 true인 경우 NodeManger가 서버 재기동이 실패하는 경우 성공할 때까지 재시도를 시도하게 된다.
노드 매니저가 재기동을 수행하는 도중 DAS가 스크립트를 통해 부팅이 완료되는 경우 서버 재기동이 중단되어야 하지만 계속 재기동을 시도하는 문제가 있어 수정하였다.
web.xml 에 login-config 가 설정되지 않아도 JEUS 에서 j_security_check 를 수행하던 문제 수정
web.xml의 login-config 설정이 있으면 j_security_check를 JEUS에서 처리해야 하고 설정이 없다면 j_security_check를 처리하지 않아야 하는데도 무조건 j_security_check를 수행하던 문제를 수정하였다.
assign-role 을 여러 번 수행할 때 중복 추가되는 문제 수정
jeusadmin에서 assign-role을 여러 번 수행할 경우 policy.xml에 1회만 추가되지만, WebAdmin에서 확인하면 같은 role이 assign-role을 수행한 숫자만큼 추가되는 문제를 수정하였다.
Graceful Shutdown 될 때 timeout 비정상 동작문제 수정
stop-server 로 서버를 내릴 때 timeout 을 주어 Graceful Shutdown 을 시도하면 timeout 만큼 무조건 기다린 후 Shutdown 을 진행하여, 아무 요청을 처리하지 않고 있는 경우에도 timeout 만큼 기다리는 기다리던 문제가 수정되었다.
backup domain 을 설정할 때 백업 파일의 용량이 증가하는 문제 수정
domain backup을 사용하도록 설정하고 -backupDir을 domain 디렉터리 내로 설정하면 Domain을 압축하는 과정에서 백업 파일까지 같이 압축하여 백업을 할 때마다 계속 백업 파일의 용량이 증가하는 현상이 발생하여 Domain을 압축 할 때 -backupDir로 설정되어 있는 디렉터리는 건너 뛰고 압축하도록 변경되었다.
suspend-server에서 동작하지 않는 timeout 옵션 삭제
동작하지 않는 불필요한 기능을 삭제하였다.
lock file의 channel을 close하지 않아 fd leak이 발생하던 문제 수정
한 머신에 여러 MS가 있는 경우, server1에서 file lock을 잡으면 server2는 file lock을 잡기 위해 120s동안 재시도하는데, server2에서 file lock을 잡기 위해 open한 file channel을 close하지 않아서 발생하던 Too many open files와 같은 문제가 수정되었다.
jvm.log 에 대해 log rotation 설정 시 파일이 default 폴더에 생기는 문제 수정
Server log home을 설정하는 경우 jvm.log rotation 시 server log home 에 생성되어야 하나 default log home 에 생기는 문제를 수정하였다.
Session Backup Thread의 CPU 과점유 현상 수정
사이즈가 큰 세션이 Newtork으로 전달될때 reallock를 수행하면서 CPU를 과다하게 사용하는 오류가 수정되었다.
장비별로 Session Backup Table이 다르게 생성되는 문제수정
백업 테이블을 구성할 때 hostname 혹은 IP 주소 정보를 가지고 구성하는데 머신별로 hostname과 IP 주소가 혼용되어 사용되는 경우 Session Backup Table이 장비별로 다르게 생성되는 현상을 수정하였다.
Lifecycle IInfocation 설정 중 WebAdmin 접속장애 발생문제 수정
Auto Lock이 설정된 상태에서 Lifecycle IInfocation을 설정할 경우, WebAdmin 접속장애가 발생하던 문제가 수정되었다.
설정작업 순서상의 문제로 발생한 것으로 설정작업 순서를 변경하여 해결하였다.
WebAdmin에서 data-source을 설정할 때 password encrtypion이 정상적으로 되지 않던 문제 수정
WebAdmin에서 datasource을 설정할 때 [입력] 버튼을 이용하지 않고 Password를 직접 입력할 경우 정상적으로 암호화되지 않던 문제가 수정되었다.
ServletContext를 찾지 못해서 발생한 404 에러에 대한 access logging할 때 NullPointerException이 발생할 수 있는 문제 수정
access log format에 "%{XXX}c"와 같이 cookie 내용을 남기도록 설정하고 존재하지 않는 Servlet Context에 대한 요청으로 발생한 404 오류를 로그로 남길 경우 NPE가 발생할 수 있는 문제점을 수정하였다.
JSP를 컴파일할 때 classpath 순서 문제 수정
webinf-first 기능의 사용과 관련하여 JSP 컴파일 시점과 Class Loading 시점의 classpath 순서가 달라지는 문제를 수정하였다.
decodeRequestURI()할 때 상대 경로등을 통해 context 상위 디렉터리 접근을 허용하던 문제 수정
상대 경로등을 통해 context 상위 디렉터리를 지시하는 URI가 있는 경우 서버 내의 경로에 존재하는 중요한 파일이 노출되는 문제가 수정되었다.
Chunk 응답 처리할 때 ArrayIndexOutOfBoundsException이 발생하는 문제 수정
Chunk 응답 처리할 때 버퍼링할 내용의 크기에 따라서 잘못된 offset 계산으로 인해서 발생하던 문제가 수정되었다.
cross-context dispatch된 servlet 호출할 때 최초 요청받는 ServletContext만 호출되는 문제 수정
클라이언트가 요청한 Context A의 Servlet A에서 Context B의 Servlet B로 forward한 경우, Servlet B에서 request.startAsync()를 호출하면 Context B의 AsyncContext가 생성되어야 하나 Context A의 AsyncContext가 생성되어 Context B의 파일을 찾지 못하고 404 에러가 발생하는 문제가 해결되었다.
cross-context forward, include할 때에 ServletRequestListener를 호출하도록 수정
cross-context로 dispatch/include가 일어나는 경우에는 요청에 대한 시작/종료를 dispatch된 ServletContext의 ServletRequestListener들이 알 수 있도록 기존에 호출되지 않던 ServletRequestListener를 호출하도록 변경되었다.
JEUS Security Manager를 사용할 때 App Deploy 중 NPE 발생문제 수정
-Djeus.security.enable.default.manager=true를 설정 후 Deploy할 때 NPE 발생문제가 수정되었다.
Context 객체에서 JeusWebDDJaxb 객체를 설정하는 시점이 Classloading 이후로 변경되어 Classloading 중에는 아직 객체가 셋팅이 되지 않아 NPE 와 함께 Deply 실패하던 문제를 수정하였다.
UnlimitedlyBufferedOutputAdaptor를 사용할 때 content-length가 정상적으로 설정되지 않는 문제 수정
UnlimitedlyBufferedOutputAdaptor를 사용할 때 output-buffer-size=0으로 설정할 경우, content-length가 무조건 8192로 설정되는 문제가 수정되었다.
UnlimitedlyBufferedOutputAdaptor를 사용할 때 설정한 content-length가 초기화되는 문제 수정
UnlimitedlyBufferedOutputAdaptor를 사용하기 위해 output-buffer-size를 "0"으로 셋팅하였으나 두 번째 호출부터 해당 설정이 초기화 되어 응답이 chunked로 오는 문제가 수정되었다.
ServletContextListener 등이 Exception으로 실패했을 때 Deploy 실패 여부를 결정하는 옵션 추가
Serlvet.init(), Filter.init()에서 ServletException, RuntimeException이 발생하거나, javax.servlet.ServletContextListener#contextInitialized()에서 RuntimeException이 발생했을 경우 Deploy가 실패한 것으로 판단해야 하지만 기존에는 정상적으로 Deploy에 성공했다고 판단하는 문제가 있었다.
이 문제를 해결하기 위하여 위의 Exception이 발생할 때 Deploy가 실패한 것으로 판단하도록 수정하였으나, 이전 버전과의 호환을 위하여 jeus-web-dd.xml에 jeus.servlet.ignoreWebComponentFailureWhenDeploying 옵션을 true로 설정할 경우, load-on-startup Serlvet, Filter, ServletContextListener에서 Exception이 발생해도 Deploy가 성공한 것으로 판단하도록 하는 옵션을 추가하였다.
request header에 If-Range의 value가 http-date 형태일 때 range header가 적용되지 않는 문제 수정
resource servlet을 사용할 때 request header의 If-Range value는 e-tag와 http-date의 2가지 형태가 있으나 JEUS에서는 If-Range header가 http-date일 때 정상적으로 파싱하지 못하여 range header를 무시하던 문제를 수정하였다.
sendError()로 errorpage를 forward할 때 cookie 값이 유실되는 문제 수정
sendError()를 할 경우 JavaEE5의 경우에는 내부의 buffer를 지우고 에러 코드를 셋팅해서 보내도록 되어 있어서 동작 자체는 정상이나 Tomcat 6에서 Error page로 sendError로 보내는 경우에 쿠키는 보존되고 있고, JavaEE 6에서도 쿠키는 보존하도록 하고 있어서 쿠키 값을 유지하도록 수정되었다.
jsp-work-dir 설정이 잘못되어 있는 경우 JSP를 호출할 때 계속 컴파일하는 문제 수정
jsp-work-dir와 compile-output-dir가 다른 경우에 JSP의 classfile을 찾지 못하여 발생하던 컴파일 반복 문제를 수정하였다.
welcome file에 대한 include가 되지 않는 문제 수정
Servlet에서 RequestDispatcher.include를 수행할 때 include 상황을 고려하지 않고 welcome file로 forward하여 발생하던 문제가 수정되었다.
WJPv2 사용시 발생하던 문제 수정
WJPv2 에서 WebtoB 로부터 전달된 헤더 값, Query String 등을 String 객체로 만들 때 항상 system encoding(file.encoding) 으로 만들어서 발생하던 문제를 ISO-8859-1 로 만들도록 변경하여 수정하였다.
Client 가 POST 요청을 보낼 때, content-type 이 x-www-from-urlencoded 이고, chunk 인 경우 parameter 를 정상적으로 처리하지 못하는 문제가 수정되었다.
WJPv2 에서 HEAD 요청에 대해서 response.sendError() 를 호출했을 때 response 메시지를 잘못 만드는 문제가 수정되었다.
WJP2 사용시 client auth 헤더를 context의 attribute에 넣지 않아 정상적으로 처리되지 않는 문제가 수정되었다.
WJPv2 사용시 output-buffer-size=0 일 경우, response.sendError() 호출시 response message가 올바르게 만들어지지 않는 문제가 수정되었다.
jasper 에서 file:// 형태로 된 jar혹은 TLD파일을 찾지 못하는 문제 수정
include 된 파일에 설정된 TLD 파일이 file://와 같이 절대 경로설정 되어있고, 이 파일을 수정하는 경우 FileNotFound 오류가 발생하는 현상이 수정되었다.