본 장에서는 JEUS 6.0 Fix#9에서의 버그패치, 기능추가, 변경사항에 대해서 설명한다.
컨테이너를 중복으로 start할 때 정상 boot된 컨테이너 정보도 Manager로부터 없어지는 문제 수정
기존에 boot되어 있는 컨테이너를 다시 boot 시킬 경우 boot에 실패하면서 기존에 정상적으로 booting 되어있던 컨테이너도 JEUS Manager의 컨테이너 list에서 제거되던 문제를 해결하였다.
Windows 플랫폼에서 SO_REUSEADDR 옵션 제외
Windows 플랫폼에서 SO_REUSEADDR 옵션을 제외하였다.
Windows에서 기동 중인 JEUS를 여러번 다시 booting할 때 file handler의 append가 false이면 log file을 rotate하다가 무한 loop에 빠지는 문제 수정
Windows에서 기동 중인 JEUS를 여러번 다시 booting할 때 file handler의 append가 false이면 log file을 rotate하다가 무한 loop에 빠지는 문제를 수정하였다.
undeploy할 때 cluster entity의 DLR이 unbind 되지 않는 문제 수정
Entity Bean의 경우 cluster 설정된 DLR이 undeploy할 때 unbind가 되지 않던 문제를 수정하였다.
CMP에서 cluster-ds를 사용할 경우 db-vendor 이름이 null이 되어 PL connection을 만들지 못하는 문제 수정
CMP에서 cluster-ds를 사용하게 되는 경우 cluster-ds의 설정에는 vendor 값이 없기 때문에 NPE가 발생하여 deploy가 실패하는 문제를 cluter-ds 중 current connection pool에서 db vendor의 이름을 가져오도록 하여 해결하였다.
User transaction 안에서 create된 entity가 commit 되지 않은 시점에 다른 tx에서 method call이 되는 문제 수정
tx 내에서 만들어진 entity가 commit, rollback에 대한 동작이 완료되기 전에 같은 tx가 아니면 entity에 접근이 되지 않아야 하므로 tx를 check 하도록 하여 해결하였다.
passivate된 상태에서 disconnect-timeout이 발생하면 @PreDetroy callback이 호출되는 문제 수정
EJB 3.0에서는 passvate-timeout 이후 disconnect-timeout이 발생했을 때 @PreDestroy callback을 호출해서는 안된다. ready 상태에서 disconnect-timeout이 발생하는 경우에만 @PreDestroy call이 호출되도록 수정하였다.
passvate-timeout 후 activate 시키면 passvate-timeout이 발생되지 않는 문제 수정
passvate-timeout 후 activate 시키면 다시 passivate 되어야 하나, activate 되면서 passivation-timeout 설정값이 사라져서 passvate-timeout이 발생되지 않는 문제가 수정되었다.
jms-resource type을 LOCALXAQCF로 설정할 경우 MDB의 onMessage가 호출되지 않는 문제 수정
IBM MQ의 resource type이 LOCALXAQCF인 factory를 MDB에 설정하게 되면 onMessage가 호출 되지 않던 문제를 수정하였다.
Web Listener 생성 중 오류가 발생할 경우 이상동작 문제 수정
Web Listener 생성 중 오류가 발생할 경우 이상동작 발생 문제를 수정하였다.
HTTP-listener의 max-queue 오동작 수정
HTTP listener의 max-queue의 기능은 queue size 개수만큼의 요청을 queuing 후 그 이상의 요청은 503 응답을 보내는 것이나, 현재는 queue 제한이 없는 무제한 queue를 사용하여 이 기능이 동작하지 않던 것을 별도의 Thread를 만들어 처리할 수 있도록 수정하였다.
webtob-backup이 동작하지 않았던 것을 수정
webtob-backup이 동작하지 않았던 것을 동작하도록 수정하였다.
JspWriter를 사용할 때 jeus.servlet.out.ensureContentOrder 설정이 동작하지 않는 버그 수정
JspWriter를 사용할 때 jeus.servlet.out.ensureContentOrder 설정이 동작하지 않는 버그를 수정하였다.
JSP 컴파일할 때 classpath를 구성하면서 내부에 web-inf first 옵션을 고려하지 않는 문제 수정
JSP 컴파일할 때 classpath를 구성하면서 내부에 web-inf first 옵션을 고려하지 않는 문제를 수정하였다.
response.setLocale()에서 getWriter() 호출 이후 Content-Language를 setLocale된 값으로 세팅하지 않는 문제 해결
response.setLocale()에서 getWriter() 호출 이후 Content-Language를 setLocale된 값으로 세팅하지 않는 문제를 해결하였다.
welcome-file-list 설정이 없는 경우 403이 리턴되지 않는 문제 해결
welcome-file-list 설정이 없는 경우 공백 페이지가 나오던 것을 403이 리턴되도록 수정하였다.
character encoding(charset) 설정이 되어 있지 않은 경우 response.getWriter()를 호출할 때 내부 charset 변수를 ISO-8859-1로 세팅하지 않은 버그 수정
character encoding(charset) 설정이 되어 있지 않은 경우 response.getWriter()를 호출할 때 내부 charset 변수를 ISO-8859-1로 세팅하지 않은 버그를 수정하였다.
JSP 내에서 page 태그의 conten-type에 charset을 지정하지 않았을 때 response.setLocale()를 호출할 경우 character encoding에 setLocale 값이 세팅되던 문제 수정
JSP 내에서 page 태그의 conten-type에 charset을 지정하지 않았을 때 response.setLocale()를 호출할 경우 character encoding에 setLocale 값이 세팅되던 문제를 수정하였다.
mime-mapping이 없는 파일에 대해서 content-type을 text/plain, URL은 text/html로 응답하는 문제 수정
mime-mapping이 없는 파일에 대해서 content-type을 text/plain, URL은 text/html로 응답하는 문제를 수정하였다.
특정 브라우저에서 range request에 대하여 200 OK + Full Content가 전달될 때 제대로 처리하지 못하던 문제를 항상 206으로 응답하도록 수정
특정 브라우저에서 range request에 대하여 200 OK + Full Content가 전달될 때 제대로 처리하지 못하던 문제를 항상 206으로 응답하도록 수정하였다.
ResourceServlet에서 Range Request를 처리할 때 Response Header에 Content-Range를 넣어주지 않는 버그 수정
ResourceServlet에서 Range Request를 처리할 때 Response Header에 Content-Range를 넣어주지 않는 버그를 수정하였다.
getWriter()를 사용할 때 HTTP 0.9에서 잘못된 메시지를 WebtoB로 전송하는 문제 수정
WebtoB를 사용하여 HTTP 0.9 요청을 서비스할 경우 application이 getWriter()를 호출하면 WebtoB로 보내는 응답 메시지가 두번에 걸쳐 1301(응답)로 설정되어 나가던 문제를 응답 메시지 유형을 5301, 5302로 변경하여 해결하였다.
web.xml에 jeus.servlet.servlets.JspServlet 설정 후 jsp-config를 사용하면 ClassCastException이 발생하는 문제 수정
web.xml에 jeus.servlet.servlets.JspServlet을 설정한 후 jsp-config를 사용하면 ClassCastException이 발생하는 문제를 수정하였다.
response.setCharacterEncoding("UTF-8")가 실행되고 reset()이 실행되면 characterEncoding이 ISO-8859-1로 초기화 되어야 하는데 초기화 되지 않는 버그 수정
response.setCharacterEncoding("UTF-8")가 실행되고 reset()이 실행되면 characterEncoding이 ISO-8859-1로 초기화 되어야 하는데 초기화 되지 않는 버그를 수정하였다.
web.xml에서 <filter-mapping>/<dispatcher>에 ERROR 설정과 <error-page>를 설정할 경우 NPE가 발생하던 문제 수정
web.xml에서 <filter-mapping>/<dispatcher>에 ERROR 설정과 <error-page>를 설정할 경우 NPE가 발생하던 문제를 수정하였다.
<response-encoding>/<forced>이 설정되어 있을 경우 ServletResponse.setLocale()이 무조건 무시되는 문제 수정
<response-encoding>/<forced>이 설정되어 있을 경우 ServletResponse.setLocale()이 무조건 무시되는 문제를 수정하였다.
jeus-web-dd.xml의 <response-encoding>/<forced>설정이 ServletResponse.setLocale()에 불필요하게 적용 되었던 문제 수정
jeus-web-dd.xml의 <response-encoding>/<forced>설정이 ServletResponse.setLocale()에 불필요하게 적용 되었던 문제를 수정하였다.
ServletResponse.getCharacterEncoding()이 기본적으로 ISO-8859-1을 리턴하지 않는 문제 수정
Character Encoding이 설정되지 않은 경우 ServletResponse.getCharacterEncoding()이 ISO-8859-1을 리턴하도록 수정하였다.
ServletResponse.setContentType() 호출 시 세미콜론(;) 뒤에 공백이 있을 경우 setCharacterEncoding()의 오동작 문제 수정
ServletResponse.setContentType()를 호출하는 경우 "text/plain; charset=UTF-8"과 같이 세미콜론(;) 뒤에 공백이 있으면 이후 setCharacterEncoding() 동작이 올바르지 않던 문제가 수정되었다.
setContentType()을 호출하지 않으면 getContentType()이 null을 리턴해야 하는 표준 요구 사항을 어긴 문제 수정
표준에 의하면 setContentType()을 호출하지 않으면 getContentType()이 null을 리턴해야 한다. 편의상 jeus.servlet.response.defaultContentType에 세팅된 값을 헤더에 적는 문제가 있었으나, 옵션으로 처리하여 문제를 해결하였다.
ServletResponse.setContentType을 호출할 때 파라미터에 charset이 포함되어 있을 경우 forced response encoding을 고려하지 않는 문제 수정
ServletResponse.setContentType을 호출할 때 파라미터에 charset이 포함되어 있을 경우 forced response encoding을 고려하지 않는 문제를 수정하였다.
기본으로 제공하는 에러 페이지에 오류가 발생한 페이지의 file size 만큼의 content-length 헤더를 포함시키는 문제 수정
기본으로 제공하는 에러 페이지에 오류가 발생한 페이지의 file size 만큼의 content-length 헤더를 포함시키는 문제를 수정하였다.
dispatch를 할 때 deny-download/directory 설정이 동작하지 않는 문제 수정
사용자가 jeus-web-dd.xml에 deny-download/directory를 설정해도 dispatch(forward/include)를 하면 무조건 허용하는 문제가 수정되었다.
webtob listener의 Thread pool에 지정된 max 값보다 더 많은 Thread가 발생하는 문제 수정
모니터링 주기에 의하여 Thread pool의 min 값을 채워주는 경우에도 추가로 Thread를 만들어서 설정된 max 값보다 더 많은 Thread가 생성되던 문제를 수정하였다.
AJP13, WebtoB의 ServletRequest.getRemotePort()를 호출할 때 port가 호출되지 않고 -1이 호출되던 버그 수정
AJP13, WebtoB의 ServletRequest.getRemotePort()를 호출할 때 port가 호출되지 않고 -1이 호출되던 버그를 수정하였다.
POST Body의 query string을 처리할 때 ServletRequest#setCharacterEncoding으로 override한 값을 적용하지 않는 문제 수정
ServletRequest#setCharacterEncoding API 정의에 따라 content-type charset을 override해야 한다. 그런데 application/x-www-form-urlencoded을 처리할 때 content-type charset을 먼저 적용하도록 되어있던 문제를 수정하였다.
ServletRequest#setCharacterEncoding 값을 URL query string, cookie에 적용하는 문제 수정
request.setCharacterEncoding()으로 설정한 값은 오로지 POST를 요청할 때 Body에 있는 query string을 처리할 경우에만 적용되어야 하는데 URL query string, cookie에 적용하는 문제를 수정하였다. jeus.servlet.request.6CompatibleSetCharacterEncoding 프로퍼티가 false일 경우 Servlet 표준에 맞게 동작한다.
javax.servlet.ServletRequest#getServerPort() API에서 Host 헤더 정보를 정상적으로 보여주지 않는 문제 수정
javax.servlet.ServletRequest#getServerPort() API에서 Host 헤더 정보를 정상적으로 보여주지 않는 문제를 수정하였다.
dispatch(forward, include)할 때 welcome file이 처리되지 않는 문제 수정
dispatch(forward, include)할 때 welcome file이 처리되지 않는 문제를 수정하였다.
WebtoB Suspend 요청 보내지 않는 문제 수정
JEUS는 요청처리 스레드가 살아있다면 무조건 suspend 요청을 WebtoB로 보내도록 수정하였다.
<encoding> 설정 및 Content-Type에 charset 설정이 없는 경우 한글깨짐 문제 수정
<encoding> 설정이 없고 Content-Type에 charset 설정이 없는 경우 Resource Servlet에서 Content-Type에 charset가 ISO-8859-1로 설정되어 한글이 깨지는 문제가 수정되었다.
jeus-web-dd.xml response defaut/forced encoding 설정을 jsp page encoding에 적용하지 않는 버그 수정
WEBMain.xml에 설정하는 response default/forced encoding을 jeus-web-dd.xml에서 치환할 수 있는데 jeus-web-dd.xml에 치환한 설정값을 jsp page encoding에 적용하지 않던 문제를 수정하였다.
Web Application이 stopped 상태인 경우에도 resource가 호출되는 문제 수정
stopped 상태인 exploded application을 호출하면 suspended 상태라는 메시지와 함께 정적 컨텐츠가 서비스 되던 문제를 503을 응답하도록 수정하였다.
jstl에서 c:url로 include할 때 jsessionid가 주소 뒤에 붙어서 resource를 못찾는 문제 수정
jstl에서 c:url로 include할 때 jsessionid가 주소 뒤에 붙어서 resource를 못찾는 문제를 수정하였다.
response.setLocale(..)을 여러번 호출할 때 Content-Language 헤더가 계속 추가되는 문제 수정
response.setLocale(..)을 여러번 호출할 때 Content-Language 헤더가 계속 추가되는 문제를 수정하였다.
response.setCharacterEncoding 호출 후 setLocale로 locale를 변경하는 경우 characterEncoding이 locale에 설정된 값으로 치환되는 문제 수정
response.setCharacterEncoding 호출 후 setLocale로 locale를 변경하는 경우 characterEncoding이 locale에 설정된 값으로 치환되는 문제를 수정하였다.
ajp13 스트림 처리에서 body가 없는 request body를 요청하면 EOFExecption이 발생하던 문제 수정
ajp13 스트림 처리에서 body가 없는 request body를 요청하면 EOFExecption이 발생하던 문제를 수정하였다.
Reverse Proxy를 사용하고 outout-buffer-size가 0인 경우 Transfer-Encoding과 Content-Length가 0으로 전달되어야 하는데 Chunked와 Content-Length 헤더가 동시에 전달되는 문제 수정
Reverse Proxy를 사용하고 outout-buffer-size가 0인 경우 Transfer-Encoding과 Content-Length가 0으로 전달되어야 하는데 Chunked와 Content-Length 헤더가 동시에 전달되는 문제를 수정하였다.
Cross Context Include할 때 IllegalArgumentException 발생 문제 수정
Cross Context Include할 때 IllegalArgumentException 발생 문제를 수정하였다.
redeploy나 컨테이너를 재기동할 때 변경된 included jsp 파일 컴파일 하지 않는 문제 수정
특정 JSP에 include된 JSP를 변경하고 해당 App를 redeploy한 뒤 include를 포함한 JSP를 호출하면 include된 JSP가 컴파일 되지 않고 이전 파일이 로드되며, 두 번째 호출할 때 컴파일 되던 문제를 수정하였다.
shutdown-timeout 기본값이 -1임에도 불구하고 30초로 동작하던 버그 수정
-1로 설정되어 있는 경우 처리중이던 request를 처리하지 않고 바로 JEUS가 종료된다.
java url context를 통해 lookup을 할 때 cluster url을 준 경우 IllegalArgumentException이 발생하는 문제 수정
luster url을 사용하여 user transaction을 lookup하게 되는 경우 cluster url의 host address를 parsing 할 수 없기 때문에 cluster url 중 하나를 선택하도록 하여 문제를 수정하였다.
InitialContext를 만들 때 principal, credential을 주지 않으면 무조건 lookup에 성공하는 문제 수정
InitialContext를 만들 때 principal, credential을 주지 않으면 무조건 lookup에 성공하는 문제를 수정하였다.
cluster 상황에서 node가 비정상 종료되어 failover할 때 NPE가 발생하는 문제 수정
Node Clustering이 되어 있는 server에 cluster context를 만들어서 jndi 요청을 하는 경우 하나의 node가 죽으면 다른 node로 Failover되는데, 두 개의 InitialContext를 만들어 공유해서 사용할 때 간혹 발생하던 NPE가 발생하지 않도록 수정하였다.
External XA JMS resource를 사용할 때 TX logging이 잘못되어 있는 문제 수정
External JMS resource를 사용할 때 로깅이 불필요한 LocalXA Resource를 로깅하는 반면에 로깅이 필요한 XA Resource는 로깅하지 않던 문제를 해결하였다.
OTS resource에 TX가 전파되었을 때 설정값의 active Timeout을 설정해 주지 못하는 문제 수정
OTS 트랜잭션이 전파될 때 domain.xml에 설정되어 있는 active-timeout 값이 아니라 기본값인 10분으로 무조건 설정되는 문제를 수정하였다.
Session Server의 retrycount 설정이 정상적으로 사용되도록 수정
기존에는 retrycount가 0이면 로그는 출력되지만 정상적으로 연결 자체가 이뤄지지 않았다. 그래서 retrycount 기본값을 0으로 변경하고 최초 연결시도는 1회 하도록 하며, 최초 연결이 안되거나 연결이 끊겼을 때에는 retry에 설정된 횟수만큼 연결을 재시도 하도록 하여 retrycount의 의미에 맞도록 수정하였다. (retrycount 기본값 변경: 1 → 0)
Session Update를 할 때 add New Session이 중복 호출되어 inconsistent exception이 발생되는 부분을 수정
jsp에서 out.flush()나 redirect를 호출하는 경우 add new session이 중복되어 수행될 수 있는데, 이 때 "session is inconsistent exception"이 발생될 수 있는 문제를 수정하였다.
sendRedirect 시점에 미리 session update 수행하도록 변경
sticky 설정이 없는 경우에 sendRedirect를 실행하면, 다른 컨테이너로 redirect될 수 있다. 이 경우 중앙식 세션 서버로 update가 일어나기 전에 응답이 나갈 수 있으며 이 때 세션을 찾지 못하는 상황이 발생할 수 있는 문제를 수정하였다.
HttpSessionActivationLister의 오동작 수정
HttpSessionActivationLister에는 sessionWillPassivate와 sessionDidActivate 메소드가 존재하는데, 기존에는 이 메소드들이 정상동작하지 않던 것을 passivation할 때 동작하도록 수정하였다.
중앙식 세션 서버에서 Session timeout이 0이나 0보다 작은값임에도 세션을 제거하는 버그 수정
세션 timeout의 값이 0이하인 경우 세션을 제거하지 않아야 하는데 세션 서버에서는 이를 고려하지 않아 세션이 제거되는 문제를 수정하였다.
디렉터리 형태의 EAR Application Deploy를 할 때 압축 파일 형태의 모듈이 포함된 경우 JEUS 내부의 workspace에 압축해제 하지 않고 Application 디렉터리에 압축해제 하는 문제 수정
디렉터리 형태의 EAR Application Deploy를 할 때 압축 파일 형태의 모듈이 포함된 경우 JEUS 내부의 workspace에 압축해제 하지 않고 Application 디렉터리에 압축해제 하는 문제를 수정하였다.
AppCompiler로 EAR compile을 할 때 application.xml에 설정된 library path를 EAR class loader에 등록하지 않는 문제 수정
AppCompiler로 EAR compile을 할 때 application.xml에 설정된 library path를 EAR class loader에 등록하지 않는 문제를 수정하였다.
deploy ant task를 이용하여 permanent deploy를 수행할 때 설정한 fast deploy 및 classloading mode 설정이 JEUSMain.xml에 써지지 않는 문제 수정
deploy ant task를 이용하여 permanent deploy를 수행할 때 설정한 fast deploy 및 classloading mode 설정이 JEUSMain.xml에 써지지 않는 문제를 수정하였다.
upgradetool4to6 및 appcompiler 관련 버그 수정
upgradetool4to6 및 appcompiler에 관련하여 수정된 버그는 다음과 같다.
upgradetool4to6 이전 stub, skel, impl 등의 클래스에 대한 삭제가 제대로 수행되지 않는 문제
appcompiler의 -deloldgen 기능 수행이 되지 않는 문제
appcompiler에 대한 처리 대상이 하나의 모듈이 아닌 app_home 전체를 지원하지 않는 문제
appcompiler의 개별 기능에 대한 도움말을 볼 수 없었던 문제
jeusadmin을 one-step으로 수행할 때 "arguemented option"의 입력값에 공백이 있을 경우 처리 오류 수정
jeusadmin을 one-step으로 수행할 때 "arguemented option"의 입력값에 공백이 있을 경우 처리 오류를 수정하였다.
웹서비스를 호출할 때 "User-Agent" HTTP 헤더 중복 생성 문제 수정
사용자가 헤더에 set한 웹서비스를 호출할 때 "User-Agent" HTTP 헤더가 중복 생성되어 문제가 발생할 수 있는데, 헤더가 중복 생성되지 않도록 수정하였다.
엔진 컨테이너를 실행할 때 Java Command 앞에 먼저 임의의 명령어를 수행시킬 수 있는 기능 추가
AIX와 HP 장비의 CPU Affinity 기능을 사용하기 위해 추가된 기능으로 Java command 앞에 execrset과 psrset 명령을 수행할 수 있다.
Stateful Session Bean에 동시 접속을 허용하는 기능 추가
Stateful Session Bean에 여러 클라이언트가 접근을 시도할 경우 ConcurrentAccessException이 발생한다. EJB 2.x에서는 동시 접근을 막는 것이 spec 사항이지만, EJB 3.1부터는 표준 dd의 access-timeout 설정을 통해 Stateful Session Bean의 동시 접근에 대한 timeout을 설정할 수 있다. (timeout 동안 try lock)
JEUS는 jeus-ejb-dd에 설정을 추가하여 동시 접근을 가능하도록 하는 기능을 제공한다. 단, 여기서는 timeout은 설정이 불가능 하며, bean instance에 대해 synch를 잡아 주어야 한다.
IIOP rmic을 수행할 때 -vcompat option을 넣을 수 있는 기능 추가
"-Djeus.ejb.compiler.rmic.vcompat=true"로 설정하면 컴파일할 때 -vcompat 옵션이 추가된다.
jeus-ejb-dd vendor type에 TIBERO 추가
jeus-ejb-dd vendor type에 TIBERO가 추가되었다.
Redirect Strategy 기능 추가
javax.servlet.http.HttpServletResponse.sendRedirect(String location) API를 사용할 때 location을 절대 URL로 변환하는 과정의 정책을 적용할 수 있다. 자세한 설명은 "JEUS Web Engine 안내서"의 "3.3.6. 웹 보안 설정"을 참고한다.
jeusadmin에서 ti 명령의 옵션 지원
jeusadmin에서 ti 명령을 수행할 때 web connection의 그룹 및 개수가 많으면 이를 한눈에 파악하기 어려우므로 이를 간략하게 볼 수 있는 옵션을 지원한다.
ti -os
JEUS-WebtoB 간 연결할 경우 SSL 통신을 이용할 수 있는 기능 추가
JEUS-WebtoB가 외부/내부로 분리되어 통신하는 경우에 발생할 수 있는 보안상의 문제를 방지하기 위하여 SSL 연결을 지원하는 기능이 추가되었다.(WebtoB 4.1 SP6 Fix#0 이상에서 지원)
WebtoB가 방화벽 밖에 있는 경우에 사용을 권장하며, 사용하는 암호화 알고리즘의 속도에 따라 WebtoB와 JEUS 사이의 통신 성능에 영향이 있다. disable-pipe가 false인 경우에는 SSL 이 필요없으므로 지원하지 않는다. (내장 WebtoB 사용 불가)
QueryString의 최대 byte 사이즈를 설정할 수 있는 기능 추가
HTTP 요청의 request-line에 포함된 query string의 최대 byte 크기를 설정할 수 있는 max-querystring-size 설정 기능이 추가되었다.
WEBMain.xml에 설정된 각각의 listener에 다음과 같은 형태로 설정한다.
기본값은 8192이며, 설정값이 0 보다 작을 경우 기능이 비활성화(제한 해제)된다.
HTTP header size를 제한하는 기능 추가
HTTP listener/WebtoB listener/AJP13 listener로 들어오는 요청에 대하여 헤더 byte 크기를 설정할 수 있는 max-header-size 설정 기능이 추가되었다.
JEUS도 보안강화 차원에서 Tomcat과 같이 HTTP message의 최대 크기를 제한하여 안정적인 응답을 보장할 수 있도록 한다. 기본값은 -1이며, 설정값 이상의 헤더가 존재할 경우 해당 요청은 더이상 읽지 않고 400 Bad Request 응답을 보낸다.
HTTP header 개수를 제한하는 기능 추가
허용할 수 있는 최대 HTTP 헤더의 개수를 설정할 수 있는 max-header-count 설정 기능이 추가되었다.
이 기능과 HTTP의 최대 사이즈를 설정하면 허용할 수 있는 최대 헤더의 사이즈를 결정할 수 있다. max-header-count에 0보다 큰 수를 설정하면, 그 숫자 이상의 헤더는 받아들이지 않고 요청을 처리하지 않는다. 만약 설정값이 0보다 작다면 기능이 비활성화(헤더 개수 제한 해제)된다.
HTTP Maximum parameter 개수 설정 기능 추가
Servlet 보안 강화의 일환으로 하나의 request에서 최대로 포함할 수 있는 parameter의 개수를 제한하는 max-parameter-count 설정 기능이 추가되었다.
max-parameter-count 설정을 하면 설정값 이상의 요청일 경우 413 응답을 보낸다. 기본값은 -1이며, 설정값이 0보다 작을 경우 기능이 비활성화(제한 해제)된다. multipart/form-data의 경우 해당 옵션이 적용되지 않는다.
ResourceServlet을 web.xml servlet-mapping으로 매핑하여 사용할 수 있는 기능 추가
ResourceServlet을 web.xml servlet-mapping으로 매핑하여 사용할 수 있는 기능이 추가되었다.
default error page 설정 기능 추가
context-group에 설정하며, 절대 경로로 html/htm 파일만 설정이 가능하다.
다음은 default error page 기능의 설정 예이다.
<context-group><default-error-page>/home/neyachan/Downloads/error.html</default-error-page>
설정된 페이지로 forward를 하는 것이 아니라 해당 정보를 읽어서 응답 내용으로 사용하며, 부팅 시점에 해당 페이지를 메모리에 캐쉬한다. 만약 잘못된 경로를 설정했을 경우에는 WARNING 로그를 발생한다.
POST data size에 대한 제약 옵션 추가
POST 요청의 경우 서블릿 엔진이 처리할 데이터의 제한을 byte 단위로 설정할 수 있다. Servlet 보안 강화의 일환으로 Content-Type이 application/x-www-urlencoded의 경우에는 첨부되는 파라미터 데이터의 byte 수가 제한대상이 된다.
Windows에서 resource 파일에 대해 대소문자 구별 여부를 선택하는 jeus.servlet.resource.ignore-filename-case 프로퍼티 추가
jeus.servlet.resource.ignore-filename-case가 true인 경우 JSP 파일을 대문자로 호출하면 JSP를 resource로 인식하여 소스가 노출될 수 있다. 이때 jeus.servlet.jsp.character.ignore를 true로 설정하면 소스의 노출을 방지할 수 있다.
메시지 전송이 실패했을 경우 Transaction Rollback 또는 Recover 되는 메시지가 다시 서비스될 때까지의 Delay를 설정하는 기능 추가
각각의 destination의 <redelivery-delay> 태그를 사용하여 설정할 수 있다.
dead letter destination을 각각의 Destination별로 설정할 수 있는 기능 추가
destination의 type은 무관하며, 존재하지 않는 destination을 지정하였을 경우 기존처럼 JEUSMQ_DLQ로 설정된다.
jmsadmin 기능 추가
jmsadmin의 추가된 기능은 다음과 같다.
명령 실행 결과를 파일로 출력하는 기능
명령어를 일정 간격으로 일정 횟수 반복하는 기능
-destall 명령어에 destination의 상세내용을 볼 수 있는 기능
-entryall 명령어에 항목 추가하는 기능(connection count, entry count)
cluster data source를 사용할 때 failover가 이루어진 후 primary component data source로 다시 failback이 이루어지면 backup component data source를 비우는 기능 추가
is-pre-conn option이 false일 경우에만 failback 이후 backup component data source의 connection pool을 destroy하여 당장 필요없는 back connection들을 제거한다. failover가 다시 수행되면 destroy된 backup component data source의 connection pool은 재차 생성된다.
하나의 JDBC connection pool을 복수의 서로 다른 사용자별로 Service할 수 있는 기능 추가
JEUS 내부에서 JDBC connection pool을 Group별로 관리하는 기능을 추가하여 하나의 connection pool을 서로 다른 복수의 사용자가 사용할 수 있도록 하였다.
httpOnly cookie 설정 기능 추가
Servlet 3.0부터 추가된 세션 설정인 httpOnly를 JEUS v6.0 Fix#9에서도 제공한다.
jeus-web-dd.xml에 <session-config><session-cookie><http-only> 태그로 설정할 수 있다. 기본값은 true이며, 설정하지 않아도 httpOnly가 붙는다.
컨테이너 비정상 종료에 대한 mbean notification 추가
mbean notification에 컨테이너 비정상 종료를 추가해서 비정상 컨테이너 종료에 대해 클라이언트에서 action을 취할 수 있는 여지를 주도록 변경하였다.
SNMP Agent Community name을 지원하도록 수정
SNMP 보안용 암호화 문자열인 Community Name에 대한 처리를 지원하도록 변경하였다. jeus.management.snmp.community 시스템 프로퍼티를 이용하여 설정할 수 있다.
EJB method의 개수가 많을 때 skel을 생성할 경우 dispatch method를 분할해 주도록 변경
EJB method를 100개 단위로 switch 문과 private method를 만들어 dispatch method를 짧게 만들도록 변경하였다.
StatefulSessionBean의 bean-pool 설정과 EntityBean의 connect-pool 설정을 제거
StatefulSessionBean의 bean-pool 설정과 EntityBean의 connect-pool 설정이 제거되었다. StatelessSessionBean은 기존과 같이 설정 가능하다.
Transaction Timeout 이후 EJB를 호출할 때 transaction propagation 에러가 발생하도록 변경
Transaction Timeout 이후 EJB를 호출할 때 transaction이 전파될 필요가 없는 경우(BMT, REQUIRED_NEW, NOT_SUPPORTS)에는 caller transaction에 반응하지 않도록 수정하였다.
Web Container Thread Pool의 max-wait-queue 기본값 변경
Web Container Thread Pool의 max-wait-queue 기본값 변경이 4에서 0으로 변경하였다.
AJP13 클라이언트 모듈에서 잘못된 속성 정보가 들어오면 Null로 처리하도록 변경
AJP13 클라이언트 모듈에서 remoteUser, authType를 empty String으로 보냈을 경우 null로 취급한다.
jeus.servlet.jsp.reload.enforceReloadingNativeLibraries 옵션 이름 변경
기능상의 혼동을 막기 위하여 jeus.servlet.jsp.reload.enforceReloadingNativeLibraries를 jeus.servlet.jsp.helpReloadNativeLibrariesByCallingSystemGC로 변경하였다.
urlblocking.properties 내 필드명 변경
기존에 제공된 urlblocking.properties 파일 내에 정의된 필드 이름들이 URL encode/decode 개념에 맞지 않게 되어 있어 HTTP URL Encode/Decode 개념에 맞춰 다음과 같이 변경 하였다.
unencodedUrl → encodedUrl
encodedUrl → decodedUrl
AJP13 SSL attribute를 지원하도록 수정
Apache, modjk 등에 클라이언트 인증서 Export 설정을 할 경우 JEUS로 클라이언트 인증서 및 SSL Cipher 등의 정보를 전달받을 수 있다.
WebtoB로부터 전송받은 SSL 클라이언트 인증서 정보 제공 기능 추가
WebtoB 4.1.5.2부터 추가되는 기능으로 WebtoB가 JEUS로 'WJP-SSL-SESSION-ID WJP-SSL-CIPHER WJP-SSL-CIPHER-USEKEYSIZE WJP-SSL-클라이언트-CERT'라는 이름의 HTTP 헤더로 SSL 정보를 보내주면 JEUS에서는 이를 읽어서 HttpServletRequest#getAttribute()로 제공한다.
outputstream, writer에서 close를 호출할 때 flush 하지 않던 것을 flush 하도록 수정
outputstream, writer에서 close를 호출할 때 flush 하지 않던 것을 flush 하도록 수정하였다.
AJP13 리스너 설정 중 동작하지 않던 connection-type 설정을 제거
AJP13 리스너 설정 중 동작하지 않던 connection-type 설정을 제거하였다.
jeus.servlet.jsp.reload.enforceReloadingNativeLibraries 옵션이 기본으로 동작하지 않도록 수정
JSP에서 Native Library 사용 중에 JSP Reloading이 필요한 경우 사용해야 하는 옵션이나, 성능저하가 발생하여 기본동작에서 제외하였다.
WebApplication Undeploy를 할 때 shutdown-timeout 대신 graceful undeployment timeout이 적용되도록 수정
Application undeploy 명령을 실행할 때 -gracetimeout 옵션 또는 jeus.app.graceful-timeout 시스템 프로퍼티에 적용받도록 변경하였다. (단위: ms)
WEBMain.xml의 webtob-listener/registration-id의 길이가 제한된 길이인 15byte를 넘어갈 경우 Servlet Engine이 booting되지 않도록 수정
WebMain.xml의 webtob-listener/registration-id의 길이가 제한된 길이인 15byte를 넘어갈 경우 Servlet Engine이 booting되지 않도록 수정하였다.
ajp13-listener의 read-timeout의 기본값을 0으로 변경
ajp13-listener의 read-timeout의 기본값을 0으로 변경하였다.
WEBMain.xml의 redirect-stdout, redirect-stderr 설정을 지원하지 않도록 변경
WEBMain.xml의 redirect-stdout, redirect-stderr 설정을 지원하지 않도록 변경되었다. 이 기능은 JeusLogger 의 console-handler 로 기본 제공되며, file-handler로 설정하여 사용할 수 있다..
ClusterManager lock 개선
기존에는 JNDI Connection, Operation을 할 때마다 연결하려고 하는 서버가 Failed인지 아닌지를 확인하는데, 사용되는 모든 Method에 Synchronized가 설정되어 Lock이 광범위하게 잡히는 문제를 개선하였다.
JDBC connection pool에 2-locks 구조 적용 개선
JDBC Connection pool이 내부적으로 각 사용자에 대한 Group으로 관리방법이 바뀌면서 성능향상을 위하여 Connection Put/Get에 각각 다른 lock을 사용할 수 있도록 변경하였다.
Cluster 데이터소스의 Selector API 및 동작 방식 변경
DataSourceSelector API를 interface로 새로 정의하였다. DataSourceSelector를 사용할 경우 Failover될 때 JEUS가 자체적으로 데이터소스를 선택하지 않고 DataSourceSelector에서 Select된 데이터소스를 사용하도록 변경하였다.
Standalone 클라이언트에서 java:comp/UserTransaction을 다른 이름으로 lookup할 수 있도록 기능 개선
java:comp/UserTransaction을 타 WAS(Web Application Server)와 같이 별도의 이름(java:/UserTransaction)으로 호출 가능하도록 하였고, 기존의 이름도 클라이언트에서 호출 가능하도록 하였다.
트랜잭션을 전파할 때 Timeout 시간 처리방법 개선
트랜잭션이 전파될 때 "-Djeus.tm.propagation.recalculated-timeout=true"로 설정하면 activetimeout을 소요된 시간만큼 감소시켜 넘겨줄 수 있도록 변경하였다. 하위 호환성을 위하여 기본값은 false이다.
중앙식 세션 서버를 사용할 경우 컨테이너에서 세션을 제거하면 전체 시스템에서 세션이 제거되도록 수정
기존에는 하나의 컨테이너에서 세션을 제거하더라도 다른 컨테이너에서는 세션이 유지되는 경우가 발생하였다. 이러한 문제점을 해결하기 위하여 어떤 컨테이너에서든지 세션을 제거하면 이 세션은 다른 컨테이너에서도 제거되도록 수정하였다.
EAR Deploy를 할 때 JAR가 많은 경우 deploy 시간 단축
JAR(EJB module) Deploy를 할 때 매번 자신의 archive의 모든 class list를 class loader에 register하던 것을 모든 EJB module의 Deploy가 끝났을 때 EAR에서 한번만 하도록 변경하여 Deploy 시간을 단축시켰다.
디렉터리 형태의 EAR/Web Application Deploy를 할 경우 Application 디렉터리에 JEUS 내부용 디렉터리 및 파일을 생성하지 않도록 변경
디렉터리 형태의 EAR Deply를 할 경우 lib 디렉터리, META-INF/application.xml을 생성하지 않도록 변경하였다.
디렉터리 형태의 Web Application Deploy를 할 경우 WEB-INF, WEB-INF/classes, WEB-INF/tempdir, WEB-INF/jeus-web-dd.xml, jeus-webservices-dd.xml과 같은 디렉터리 또는 파일을 생성하지 않도록 변경하였다.
RMI/IIOP Interop 설정에 따른 IIOP Export가 설정된 EJB Bean 디플로이 처리 방식 개선
다음은 Entity Bean을 디플로이할 경우 처리 방식에 대한 설명이다.
IIOP, JNDI 둘 다 export하는 EJB의 경우: IIOP Export할 때 COS Naming Server 설정이 없으면 Warning 출력 후 JNDI에만 Export하도록 수정하였다.
IIOP만 export하는 EJB의 경우: IIOP Export를 할 때 COS Naming Server 설정이 없으면 디플로이가 실패하도록 수정하였다.
deploy ant task에 classloading mode 속성 추가
deploy ant task에 classloading mode 속성을 추가하였다.
auto deploy에 대한 정책 및 설정 정리
다음은 Auto Deploy에 대한 정책 및 설정에 대한 설명이다.
auto deploy for applications in a directory
<absolute-path>에 directory 절대 경로를 적고 <check-absolute-path>를 true로 설정해야 enable된다. (<check-absolute-path >의 default는 false로 유지)
<absoulte-path>가 명시되었으나 <check-absolute-path>가 false이면 일단 auto deploy for applications in a directory는 불가능하며, <check-absolute-path>가 false이므로 <absolute-path>와 <pat >의 조합으로 애플리케이션의 절대 경로를 결정하여 auto deploy for an application을 시도할 수 있어야 한다. 이 경우 <path>가 존재하지 않으면 deploy error를 발생시킨다.
디렉터리에 존재하는 애플리케이션 각각에 대하여 auto deploy for an application이 default interval(10초)로 동작하도록 한다.
auto deploy for an application
<absoulute-path>와 <path>의 조합으로 애플리케이션의 절대 경로를 결정하고, <check-absolute-path>를 false로 설정해야 enable된다. (<check-absolute-path>의 default는 false로 유지)
appcompiler에서 EAR precompile을 할 때 EJB 또는 웹만을 선택할 수 있는 옵션 추가
appcompiler에서 EAR precompile을 할 때 EAR 내의 EJB 또는 웹만을 선택하여 컴파일할 수 있는 기능이 추가되었다. -ejbonly -webonly으로 EJB와 웹 모듈을 선택할 수 있다.
하나의 Target 컨테이너에 같은 JNDI Name을 가진 데이터소스를 2개 이상 설정할 경우 Validation Exception이 발생하도록 수정
데이터베이스나 클러스터 생성 및 설정을 변경할 때 데이터소스 Target에 설정되어 있는 컨테이너에 중복된 데이터베이스 JNDI name이 있는 경우에는 Validation Exception을 발생하도록 변경하였다.
밀리초를 남길 수 있는 Log Formatter 지원
jeuslogging.properties에 jeus.util.logging.SimpleMillisFormatter를 등록하면 로그를 밀리초 단위로 설정할 수 있다.