본 장에서는 JEUS6 Fix#1에서의 버그 패치, 기능 변경, 추가사항에 대해서 설명한다.
charset Encoding 관련 버그 수정
pageEncoding 설정이 없는 경우 contentType의 charset 인코딩이 jsp 페이지 인코딩과 response 인코딩에 반영되지 않던 버그를 수정하였다.
pageEncoding이 없으면 contentType의 charset으로 jsp 페이지를 읽도록 한다.
pageEncoding만 있고 contentType 설정이 없을 경우 pageEncoding을 contentType의 charset에 반영하도록 한다.
accesslog의 파라미터 값에 대한 한글 깨지는 현상 수정
get 방식의 요청에서 파라미터 값이 한글일 경우 accesslog에 파라미터 값의 한글이 깨지는 버그를 수정하였다.
jsp 페이지를 응답 encoding으로 변환하지 못할 경우의 버그 수정
JSP의 결과를 해당 페이지의 응답 encoding으로 변환하다 변환되지 않는 문자가 있어서 에러가 발생하면 해당 문자뒤로 jsp 출력이 되지않는 버그가 수정되었다.
JDK1.5 API 관련 버그 수정
JDK5에서 getServletContext().getResource()가 리턴한 URL을 URI로 변경하는 경우 path가 null이 되는 버그가 수정되었다.
<예제>
URL url = getServletContext().getResource(request.getServletPath()); out.println(url.toURI().getPath());
Memory leak 관련 버그 수정
다음과 같은 경우에 Memory leak이 발생할 가능성이 있었으나, 이를 발생하지 않도록 수정하였다.
datasource에 대해서 reconfig할 경우
enable-wait가 false이거나 설정이 되어 있지 않을 경우 disposable connection이 사용될 수 있는데, 이 disposable connection이 사용되었을 경우
connectionpool에 대한 resizing이 일어났을 경우
dba-delegation이 사용될 경우
DB2 관련 DataSource 관련 버그 수정
DB2에 DataSource를 연동해서 사용시에 ClassCastException이 발생하던 버그를 수정하였다.
session.close() 호출할 때 session MBean이 사라지지 않는 버그 수정
Connection이 살아있는 상태에서 Session을 create, close를 반복할 때, Session MBean이 사라지지 않아 OutOfMemory에러가 발생하던 버그를 수정하였다.
여러 XA를 실행할 때 Deadlock 발생하는 버그 수정
여러 XA가 동시에 실행되고 있을 때 만약 한 트랜잭션이 데이터베이스 lock을 소유하고 있고 다른 트랜잭션들은 JMS 스레드들을 모두 점유한 채 이 lock을 기다리고 있는 상황이라면, 현재 lock을 소유한 트랜잭션은 다음 단계를 진행하지 못하고 다른 트랜잭션들은 이 트랜잭션이 종료하기를 기다리게 되어 deadlock 상태로 빠지게 되는 현상을 수정하였다.
JMS 엔진이 시작될 때 NPE발생하는 버그 수정
JMS 엔진이 시작될 때 시작이 실패하여 shutdown이 실행하던 중 초기화 되지 않은 Storage를 접근하여 NullPointerException 발생하는 버그를 수정하였다.
pending message를 requeue할 때 NPE발생하는 버그 수정
pending message가 존재하는 Queue에 AsyncReceiver가 대기중 일 때 pending message를 requeue 시키면 NPE발생하는 버그를 수정하였다.
WebService OneWay 호출할 때 발생했던 NullPointerException 버그 수정
'nodatabinding' 옵션을 사용하여 개발된 web service에서 One way 형태로 호출할 때 서버 단에서 NullPointerException이 발생하던 버그가 수정되었다.
WebService 수행할 때 발생하던 multipart/related 관련 에러 수정
WebService 수행할 때 Response message 중 'Content-Type'의 optional parameter인 'start'의 value가 quoated-string이 아닐 경우에도, value를 quoated-string으로 변화하여 처리 가능하도록 하였다.
UDDI DB connection 관련 버그 수정
UDDI를 사용하지 않는 경우 해당 DB connection이 idle 상태로 돌아가지 않던 버그를 수정하였다.
http-invocation이 설정되어 있을 경우, port 설정이 적용되지 않는 현상 수정
EJBMain.xml에 http-invocation이 설정되어 있는 경우, jeus-ejb-dd.xml에서 지정한 port의 설정이 무시되는 현상과 여러 EJB의 port 값이 동일할 경우 BindException이 발생하는 현상이 수정되었다. 이 문제는 모두 http-invocation이 설정되어 있을 때 발생하는 것으로, http-invocation이 설정되어 있지 않다면 모두 정상 동작한다.
Passivation 처리된 Session 정보의 Destory 과정 수정
Passivatation된 Session 정보가 Destroy 될 경우, session 의 attribute나 object 정보가 제대로 복원되지 않고 destory 되던 현상을 수정하였다.
EJB fail-over 대상 Exception 목록 수정
EJB container가 요청받은 EJB에 대해서 서비스를 제공할 수 없을 때 EJBServerAlreadyDownException을 던지도록 변경하고, EJB fail-over 대상 Exception에 포함시켰다.
Transaction 종료 후 EJB를 호출할 때 발생하는 Exception 수정
Transaction 범위 안에서 rollback 처리된 Entity bean을 Transaction 종료 후 호출할 때 JeusContainerException을 내지 않고 NoSuchObjectException이 발생하도록 수정하였다.
<idempotent-method><method-name> 태그 관련 사항 수정
jeus-ejb-dd.xml 파일에 EJB Clustering 설정을 할 경우, <idempotent-method>를 지정하기 위한 method-name 태그에 대한 처리를 제대로 하지 못하던 문제를 수정하였다.
EJB Descriptor 파일과 Annotation에서 동시에 idempotent-method을 설정할 경우, Descriptor 파일의 내용으로 Annotation 설정을 대체하는 과정에서 발생하던 문제를 수정하였다.
EJB Descriptor 파일에서 idempotent-method의 이름을 지정할 경우, Annotation에서 설정된 idempotent-method 설정 중 EJB descriptor에서 지정된 method name으로 시작하는 모든 method의 설정을 대체하는 문제를 수정하였다.
Deployment 관련 버그 수정
컨테이너가 2개 이상일 때 deploy할 경우 as옵션을 사용하면 에러가 발생하는 버그를 수정하였다.
<keep-generated>태그가 작동하지 않던 버그를 수정하였다.
jeusadmin에서 -n옵션으로 undeploy, stop, applist 시도할 때 NullPointerException 발생하던 버그를 수정하였다.
appcompiler 관련 버그 수정
ear 을 appcompiler로 compile할 때 작업 디렉터리가 남아있는 현상을 수정하였다.
"."이 파일명에 포함되어있는 war모듈을 appcompiler가 수행하면 실패하던 버그를 수정하였다.
applicationxml의 잘못된 문법이나 정보가 있는 ear모듈을 appcompiler할 때 작업 디렉터리가 남아있던 버그를 수정하였다.
keep옵션이 작동하지 않던 버그를 수정하였다.
application.xml 이 없는 EAR모듈에 대한 appcompiler을 지원한다.
servlet response를 gzip으로 압축하여 서비스하는 기능 추가
servlet response에 대하여 데이터 크기가 설정한 값보다 클 경우 데이터를 gzip으로 압축해서 보내주는 기능이 추가되었다.
webtob와 http listener에서만 지원되며 각 listener 태그 아래에 <compression> 태그로 설정하여 사용할 수 있다.
<설정 예><http-listener> ... <compression> <min-size>50000</min-size> <exclude-user-agent>gozzilla,traviata</exclude-user-agent> <mime-type>text/html,text/plain,image/gif,image/jpg</mime-type> </compression> ... </http-listener>
<min-size>는 압축하려는 데이터의 최소 크기이며, 보내려는 데이터의 크기가 이 설정 값 이상일 경우에만 압축하게 된다.
<exclude-user-agent>는 압축기능을 사용하지 않고자 하는 UserAgent를 설정하며, comma로 구분하여 여러 개를 설정할 수 있다.
<mime-type>은 압축하고자 하는 MimeType을 지정하며, 설정하지 않을 경우에 기본적으로 text/html, text/xml, text/plain을 지원한다.
NIO기능 추가
JMS Service Channel에서 nio를 사용할 수 있도록 기능이 추가되었다. 이 기능을 사용하려면 JMSMain.xml에서 blocking-socket 태그를 false로 설정한다. 이에 대한 설명은“JEUS MQ 안내서”의 “5.3.1. 서비스 채널 설정” 부분을 참고한다.
FlowControl기능 추가
Queue나 Durable Subscriber에 MessageListener가 등록되어 있으면 Destination에 메시지가 도착하자마자 Consumer에 보내지므로 클라이언트가 이 메시지들을 빨리 처리하지 않으면 클라이언트 메모리에 쌓이게 되어 OutOfMemory에러가 발생할 수 있다. 자세한 설명은“JEUS MQ 안내서”의 “5.4.5. 메시지 흐름 제어 설정” 부분을 참고한다.
WebService Console Tool 기능 강화
wsdl2java Console Tool에 -ddgen 옵션이 추가되었다. 이 옵션은 -outputmapping 옵션과 함께 사용해야 하며, web.xml과 webservices.xml을 생성한다.
<예제>
$>wsdl2java -gen:client -d ./build/classes -package echo -compile -outputmapping Doclit-mapping.xml -ddgen ./src/conf/DocLitEchoService.wsdl
JAX-WS 웹 서비스에서 스트리밍(Streaming) 방식의 첨부 파일 처리방법 추가
JAX-WS 웹 서비스에서 첨부 파일을 포함하는 SOAP 메시지를 스트리밍 형태로 송/수신 하는 방법을 추가하였다. 자세한 설명은 “JEUS Web Service 안내서”의 “10.4. 스트리밍 방식으로 첨부 파일을 처리하는 방법” 부분을 참조한다.
MBean 모니터링 기능 보완
기존에 있던 MBean 모니터링의 User Interface를 개선하여 사용 편의성을 높였다. MBean 모니터링은 JEUS JMX서버를 사용하여 각 MBean의 정보를 애플릿창에서 그래프로 출력한다. 자세한 사용법은 “JEUS WebAdmin 안내서”의 “5.2. MBean 모니터링” 부분을 참고한다.
Work Area 기능 추가
실행중인 스레드 및 이와 관련된 스레드에서 컨텍스트를 공유하기 위한 WorkArea 기능을 추가하였다. 이와 관련된 내용은“JEUS EJB 안내서”의 “12.1. Work Area 서비스”를 참조한다.
Session Replication 모드 설정 기능 추가
EJB가 JEUS 세션 매니저에 세션 복제를 요청하는 시점을 조정하기 위한 기능을 추가하였으며, 이를 사용하기 위하여 '@Replication' 어노테이션 및 <replication>태그가 추가하였다.
@CreateIdempotent 어노테이션, <create-idempotent> 태그 추가
@Idempotent 어노테이션의 statefulIdempotentCreate 속성을 삭제하고 이를 @CreateIdempotent 어노테이션 및 <create-idempotent> 태그로 대체하였다.
useOldSerialVersionUID 시스템 프로퍼티 추가
'jeus.util.JeusException.useOldSerialVersionUID' 시스템 프로퍼티를 추가하고, 이것을 true로 설정할 때 JEUS fix 21 이상 및 JEUS 6 version에서 JEUS 5 fix 20 이하의 version과 통신하면서 serialVersionUID 관련 에러가 발생하지 않도록 할 수 있는 기능을 추가하였다.
appcompiler를 수행할 때 exploded 모듈 지원
이전 fix 버전에서 지원하지 않던 appcompiler로 exploded모듈의 컴파일을 지원한다.
JMS XA 테이블 element추가
JMS의 XAResource상태를 저장하기 위한 테이블이 추가 되었다.
jmsadmin의 recover, detach 명령 deprecated
jmsadmin의 recover, detach명령을 사용할 때 NPE발생 및 XA지원의 이유로 deprecated되었다.
기존 다른 broker에서 사용하던 embedded db는 JMSMain.xml의 jms-main/storage/embedded/path 태그에 경로를 설정하면 attach가 가능하므로, 기존 recover, detach등의 명령을 대신할 수 있다.
JSP에서 생성되는 java, class 파일 저장 위치 변경
JEUS 5에서는 exploded로 디플로이한 경우 JSP에서 생성되는 파일의 위치가 컨테이너에 관계 없이 동일하게 WEB-INF/.warjspwork를 사용했지만 JEUS 6에서는 VM별로 구분하도록 변경되었다.
JEUS 5의 WAR로 디플로이한 경우와 유사하게 JEUS_HOME\webhome\.generated\.warjspwork 아래에 컨테이너명과 컨텍스트 패스로 구분해서 파일을 위치시킨다.
JEUS 6에서는 exploded와 WAR 구분 없이 동일한 위치에 JSP에서 생성된 파일을 저장하도록 변경하였다.
VM별로 생성 파일 위치를 구분했기 때문에 동일한 JSP를 여러 컨테이너에 동시에 호출한 경우 발생하는 문제를 해결할 수 있다.
WEBMain.xml과 jeus-web-dd.xml에 jsp-work-dir, compile-output-dir을 설정한 경우에도 지정한 디렉터리 아래에 컨테이너명과 컨텍스트 패스로 구분해서 파일을 생성한다.
자세한 내용은“JEUS Web Container 안내서”의 “3.3.3. JSP 엔진 설정” 부분을 참고한다.
디플로이할 때 jsp 컴파일 기능 삭제
디플로이할 때 Web application의 JSP 페이지들을 프리컴파일하는 기능이 제거되었다.
jeusadmin에서 deploy할 때 classloading옵션 변경
jeusadmin에서 deploy할 때 기존의 isolated옵션을 삭제하고 classloading 옵션이 추가되었다. 기본값은 ISOLATED이다.
“어플리케이션 배치-파일업로드” 동작 방식 변경
“어플리케이션 배치-파일업로드”에서 기존에는 모듈을 원하는 폴더에 두고, 디플로이 단계까지 지원을 했다. 이번에는 모듈만 원하는 폴더에 두는 것으로 동작 방식을 변경했다.