본 장에서는 JEUS 6.0 Fix#7에서의 버그패치, 기능추가, 변경사항에 대해서 설명한다.
Log level OFF 가 적용되지 않는 문제
로그를 남기지 않기 위해서 log level을 OFF로 설정해도 INFO 레벨로 로그가 출력되는 문제를 수정하였다.
jeus-ejb-dd.xml 에 prim-key-field 설정이 없을 경우 Auto -Key-generation을 사용할 때 발생하는 문제를 수정
ejb-jar.xml에 primkey-field가 설정되어 있음에도 불구하고, jeus-ejb-dd.xml에 prim-key-field를 설정하지 않으면 Auto Key Generation을 지정한 CMP를 디플로이 및 create, find, remove 등의 작업이 불가능한 버그를 수정하였다.
CMP2.0에서, CMR을 사용하는 경우 Foreign Key를 DB에서 Load하는 과정에서 column index 계산의 오류 수정
CMP 2.0에서 CMR을 사용할 때, Foreign key를 DB에서 읽어 오면서 column index를 잘못 계산하는 문제를 수정하였다. 이는 사용자가 정의한 key class를 사용하는 경우에만 발생한다.
Transaction attribute가 SUPPORTS인 Session Bean에서 EJBContext.getRollbackOnly, setRollbackOnly 호출시 IllegalStateException을 던지도록 수정
이전에는 CMT가 시작된 상황에서 Transaction attribute가 SUPPORTS인 Session Bean을 호출하고, 그 안에서 EJBContext.getRollbackOnly, setRollbackOnly를 호출할 경우 별도의 Exception이 발생하지 않았으나, 이를 수정하여 IllegalStateException이 발생하도록 하였다. 이때 다음과 같은 메시지가 발생한다.
[2010.03.10 11:13:26][1][b240] [container1-204] [EJB-4536] [module name : ejb1, bean name : CallerBean, session id : PYOvSI17B3ZhBhTk1CPQzk3yH5bTUillQyaie7OZ KhrQ5VcvRrpmPLpfYHRGGkMR.jeus6_ejb_engine1] will be discard because an exception is occured in business method. <<__Exception__>> javax.ejb.EJBTransactionRolledbackException at jeus.ejb.container3.ExceptionMapper.mapSystemException (ExceptionMapper.java:99) ...... Caused by: javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean java.lang.IllegalStateException: Session Bean of which tx attribute is NOT_SUPPORTED, SUPPORTS or NEVER should not call at jeus.ejb.container3.SessionTxInterceptor.processExceptionInClientTx (SessionTxInterceptor.java:405) at jeus.ejb.container3.SessionTxInterceptor.postInvokeTx (SessionTxInterceptor.java:342) ...... Root Exception stack trace : java.lang.IllegalStateException: Session Bean of which tx attribute is NOT_SUPPORTED, SUPPORTS or NEVER should not call at jeus.ejb.baseimpl.SessionContextImpl.checkOperationsAllowed (SessionContextImpl.java:437) at jeus.ejb.baseimpl.EJBContextImpl.setRollbackOnly(EJBContextImpl.java:212)
Annotation, XML descriptor에 class 혹은 method level의 interceptor가 같이 지정되어 있을 때 merge가 되는 현상을 수정
Annotation, XML descriptor에 class 혹은 method levle의 interceptor가 같이 지정되어 있을 때 merge가 되는 문제가 있었다. 스펙에 따라서 descriptor의 내용으로 Override 되도록 수정하였다.
ejb-jar.xml에서 <method-name> 태그를 사용할 때, name만 입력한 경우에 일치하는 method 중 처음 하나만 적용하는 현상을 수정
ejb-jar.xml에서 <method-name> 태그를 사용할 때, 기존에는 name만 적으면 일치하는 method 중 처음 하나만 적용하였다. 그러나 스펙에서는 method name이 일치하는 모든 method에 적용하도록 하고 있으므로, <method-param>에 * 를 지정한 경우와 동일하게 동작하도록 수정하였다.
같은 EJB를 2번 deploy를 시도하면 첫 번째 ejb가 bind한 것을 unbind하는 문제 수정
같은 EJB를 2번 deploy를 시도하면 두 번째 ejb가 deploy를 실패하여 undeploy되면서 자신이 bind하지 않은 것을 unbind하는 문제가 있었는데 자신이 bind한 list를 가지고 있다가 unbind하도록 수정하였다.
WEB-INF/.warjspwork폴더에 컴파일 된 jsp 클래스들이 존재할 경우 jsp를 수정하여도 반영되지 않는 문제 수정
WEB-INF/.warjspwork 폴더에 컴파일된 jsp 클래스들이 존재할 경우 jsp를 수정하여 디플로이할 경우 이전 jsp 파일이 보이는 문제가 있었는데, 최근 변경된 시각을 기준으로 최신 파일을 판단하도록 수정하였다.
jsp-engine의 compile-encoding 설정이 적용되지 않는 문제 수정
jsp-engine의 compile-encoding의 설정에 상관 없이 항상 UTF-8로 컴파일 되던 문제를 수정하였다.
web.xml의 web-app_2_5 스키마에 http-mothod-Type element가 동작하지 않는 문제 수정
web-app_2_5의 사용을 제공하지 않아서 web.xml에 <http-method>를 작성할 경우 SAXParseException이 발생하였으나 정상 동작하도록 문제를 수정하였다.
Filter, Servlet, Listener의 init과정에 오류 발생시 정상적으로 deploy되는 문제 수정
application-deploy할 때 이루어지는 initialization 과정(Servlet, Filter, Listener)이 실패하여도, 정상 Deploy가 되는 문제를 수정하였다.
jsf 라이브러리를 공유하여 사용할 경우 NullPointerException 발생하는 문제 수정
JEUS_HOME/lib/shared/jsf_ri_1.2/ 폴더에 있는 jsf 라이브러리를 2개 이상의 애플리케이션에서 사용할 경우, 하나의 애플리케이션을 undeploy 하면 다른 애플리케이션에서 NullPointerException이 발생하는 문제를 수정하였다.
response.setDateHeader()을 반복하여 호출할 경우 ArrayIndexOutOfBoundsException이 발생하는 문제 수정
response.setDateHeader()를 반복하여 호출할 경우 ArrayIndexOutOfBoundsException이 발생하는 문제를 수정하였다.
tmax와의 연결이 끊겼을 경우 무한히 reconnect 시도하는 문제 수정
tmax와의 연결이 끊겼을 경우 reconnect를 시도하다가 reconnect가 실패하였을 경우 backup server로 다시 reconnect를 시도한다. 이때 tmax backup server의 설정이 없을 경우 local로 backup server를 설정하는 버그로 인해 reconnect를 무한히 시도하는 문제를 수정하였다.
ejb, web application 등의 여러 모듈이 각각의 파일로 deploy되었을 경우 SHARED옵션이 적용되지 않는 문제 수정
ejb, web 등의 모듈이 ear로 deploy되지 않고 각각의 파일로 deploy되었을 경우 SHARED옵션을 지정해도 클래스가 공유되지 않는 문제를 수정하였다.
web.xml에 401코드에 대해 <error-code>가 적용되지 않는 문제 수정
web.xml에 401코드에 대해 <error-code>가 적용되지 않는 문제를 수정하였다.
2개 이상의 service channel이 원포트로 설정된 경우, 클라이언트가 접속되지 않는 문제 수정
2개 이상의 service channel이 원포트로 설정되어 있을 경우, 클라이언트가 접속할 때 ConnectorException이 발생하는 문제를 수정하였다.
reconnect를 시도하는 클라이언트 프로세스가 <CTRL> + C로 종료되지 않는 문제 수정
JEUS가 종료되어 접속 중인 클라이언트가 reconnect를 시도할 경우, 해당 클라이언트가 <CTRL> + C 로 프로세스 종료가 되지 않는 문제를 수정하였다. 해당 현상은 JEUS 6.0 Fix#6 버전에서만 발생하는 현상이다.
Tibero Storage 사용하여 64K 이상의 Message를 송신할 때 TbSQLException 발생하는 문제 수정(Tibero 드라이버 문제)
Tibero 3.0 sp2 r38551 하위 버전을 사용하여 64K 이상의 Message를 송신할 때 TbSQLException이 발생하는 문제를 수정하였다. 해당 현상은 Tibero 드라이버 문제로 Tibero 3.0 sp2 r38551 상위 버전에서 수정되었으며, r38551 하위 버전에 대해 workaround로 제공하기 위함이다.
JEUS내부적으로 JNDI context를 생성할 때 JNSContextFactory가 아닌 다른 InitialContextFactory를 사용하는 문제 수정
JEUS내부적으로 정의한 JNSContextFactory가 아닌 다른 InitialContextFactory를 시스템 프로퍼티로 설정한 애플리케이션을 수행 한 경우, 이후에 jeus container에서 context를 생성하여 jndi operation을 수행할 때 JNSContextFactory가 아닌 다른 시스템의 context를 생성하려고 하는 문제가 수정되었다.
연결이 끊어진 JNSSLocal 아닌 다른 JNSLocal이 지워지는 문제 수정
클라이언트에서 여러 JEUS에 JNDI 연결을 맺었을 때, 연결이 끊어진 JEUS에 대한 JNSLocal이 아니라 다른 JNSLocal의 정보가 지워지는 문제를 수정하였다.
JNDI에서 lookup 해온 Reference에서 objectfactory를 통해 object를 생성하는 과정에서 JNDI와 관련없는 exception이 발생할 경우에도 JNDI failover를 시도하는 문제 수정
lookup 해온 Reference에서 objectfactory를 통해 object를 생성하는 과정에서 JNDI와 관련없는 exception이 발생할 경우에는 JNDI failover(connection을 끊고 cache를 삭제하고 다시 connection을 맺어서 lookup을 retry)를 해줄 필요가 없지만 failover를 해주는 문제를 수정하였다.
servlet이나 ejb에서 thread를 생성하여 java:comp/env namespace에 접근하려고 할 때 NameNotFoundException이 발생하는 현상 수정
servlet이나 ejb에서 thread를 생성하여 java:comp/env namespace에 접근하려고 할 때 NameNotFoundException이 발생하는 현상이 있었다. 이를 수정하여 servlet이나 ejb에서 생성한 thread에서도 java:comp namespace에 접근할 수 있도록 하였다.
getConnection할 때 getAutoCommit에서 exception이 발생하면 invalid Connection이 active 상태로 pool에 영원히 남게 되는 현상 수정
getConnection할 때 getAutoCommit에서 exception이 발생하면 invalid Connection이 active 상태로 pool에 영원히 남게 되는 현상을 수정하였다. 이 문제로 인하여 dsinfo, dsconinfo 명령을 실행할 때 결과가 다른 현상이 있었다.
<db-vendor>에 지정한 vendor 이외의 값이 입력될 경우, 무조건 Exception이 발생하는 현상 수정
db-vendor 에서 지정한 Vendor와 실제 db vendor가 다를 경우, 좀 더 defensive하게 체크해서 캐스팅하도록 수정하였다.
non-validation-interval이 check-query-period 보다 긴 경우, check-query가 실행되지 않는 문제 수정
non-validation-interval이 check-query-period 보다 긴 경우, check-query가 실행되지 않아 유효하지 않은 connection을 사용할 수 있는 문제를 수정하였다.
트랜잭션의 unique성을 판단할 때, format id + gtid의 형태로 판단하도록 수정
외부에서 시작된 Transaction의 unique여부를 판단할 때 기존에는 format id를 무시하였다. 이를 변경하여 format을 함께 고려하도록 변경하였다.
RootCoordinator, SubCoordinator 사이의 동작 수정
RootCoordinator와 SubCoordinator 사이에 발생할 수 있는 문제에 대처하기 위하여 다음의 사항들을 수정하였다.
RootCoordinator에 registration 메시지를 전송하지 못했다면 기다리지 않고(원래는 120초 기다림) 바로 종료한다.
checkRegistration이 실패한 뒤 transaction이 Rollback된 다음, SubCoordinator를 destroy한다.
ServerContextSenderReceiver.checkRegistration() method 이름을 checkTransaction으로 변경하고, EJB에서 call했을 때 트랜잭션과 관련해서 문제가 있으면 exception을 던지고 그렇지 않으면 정상적으로 진행한다.
SubCoordinator.checkRegistration()에서 결국 registration이 실패하여 트랜잭션을 rollback 했다면 TMException을 던진다.
다른 WAS제품과 트랜잭션 연동이 정상적으로 이루어지지 않는 문제 수정
OTS 설정을 이용하여 다른 WAS와 트랜잭션을 연동할 경우, 트랜잭션 전파가 제대로 되지 않아 연동이 정상적으로 이루어지지않는 문제가 있어서 이를 수정하였다.
중앙식 세션 서버에서 세션을 passivation을 했음에도 메모리가 감소하지 않는 문제 수정
중앙식 세션 서버를 사용할 때 세션을 passivation 했음에도 메모리에서 세션정보가 없어지지 않는 문제를 수정하였다.
jeus-application-dd.xml에 <path>가 없는 경우, deploy할 때 NullPointerException이 발생하는 문제 수정
jeus-application-dd.xml에 <path>가 없는 경우에도 정상적으로 deploy 되도록 수정하였다.
ti -con 정보를 확인할 때 The ObjectName object is null 발생하는 문제 수정
하나의 엔진 컨테이너에 하나의 서블릿 엔진만 존재할 경우, ti -con 정보를 확인할 때 The ObjectName object is null이 발생하는 문제를 수정하였다.
upgradetool5to6에서 jeus-web-dd.xml의 잘못 변환되는 문제 수정
upgradetool5to6에서 jeus-web-dd.xml의 <url-rewriting>, <enable-default-login>, <jndi-properties>이 잘못 변환되는 문제를 수정하였다.
<url-rewriting>은 <session-config><url-rewriting>으로 변환되도록 수정하였다.
<enable-default-login>, <jndi-properties>는 삭제되도록 수정하였다.
upgradeTool5to6에서 node backup 기능이 반대로 동작하는 문제 수정
upgradeTool5to6에서 node backup 동작의 overwrite와 backup 기능이 반대로 동작하는 문제를 수정하였다.
또한 node backup을 할 때 혼란을 예방하기 위해 "overwrite( y) or rename( n)?" 라는 물음을 "overwrite( y) or backup( n)?"으로 수정하였다.
upgradetool5to6에서 app 명령어를 사용할 때 NullPointerException이 발생하는 문제 수정
upgradetool5to6에서 app 명령어를 사용할 때 필수 옵션인 src와 target을 설정하지 않으면 NullPointerException이 발생하는 문제를 수정하였다.
이에 따라 upgradetool5to6 의 툴 도움말에 src와 target 옵션이 필수 옵션임을 명시하였다.
appcompiler를 수행할 때 컴파일을 실패할 경우 NullPointerException이 발생하는 문제 수정
appcompiler을 수행할 때 컴파일을 실패할 경우 NullPointerException이 발생하는 문제를 수정하였다. 해당 현상은 JEUS 6.0 Fix#6 버전에서만 발생하는 현상이다.
세션을 모니터링할 때 갱신이 안 되는 현상을 수정
웹 관리자에서 Session 개수를 모니터링할 때 새로고침 버튼을 클릭해도 갱신이 안 되는 문제를 수정하였다.
wsdl2java 콘솔툴에서 -nowrapped 옵션과 -ns2pkg 옵션이 동작하지 않던 문제 수정
wsdl2java 콘솔툴에서 -nowrapped 옵션과 -ns2pkg 옵션이 동작하지 않던 버그를 수정하였다.
Array argument를 가진 SEI에 대하여 java2wsdl 수행후 deploy되지 않던 문제 수정
Array에 대한 namespace가 정의되지 않아 deploy할 때 발생하던 오류를 namespace를 업데이트하여 수정하였다.
Standalone 클라이언트에서는 getHandlerRegistry 메소드를 사용할 수 없었던 문제 수정
jsr109 enterprise webservice 1.2 사항을 Standalone 클라이언트에 적용하지 않고 getHandlerRegistry 메소드를 사용할 수 있도록 수정하였다.
Security Repository로 DB를 사용할 때 templet 내의 값의 순서가 잘못되어 있는 문제 수정
dbrealm.sql에서 jeus_group_members table의 값의 순서가 잘못되어 있는 버그를 수정하였다.
jeusadmin에서 password file을 통해 로그인을 시도했을 때 로그인 실패하는 문제 수정
접속하려는 노드가 virtual host로 매핑되어 있을 때 jeusadmin에서 password file을 통해 로그인을 시도하려 하면 로그인에 실패하는 버그를 수정하였다.
webcommon.xml에 설정된 security-constraint가 적용되지 않는 문제 수정
webcommon.xml에 설정된 security-constraint가 전체 애플리케이션에 적용되지 않는 문제를 수정하였다.
container JVM option 지정 방법을 개선
Container JVM option을 좀 더 상세하게 받을 수 있도록 개선하였다.
공백이 있는 옵션도 지정할 수 있도록 하였다(e.g. IBM JDK -XX:OnError="dbx %p" option).
<command-option>에 묶어서 적용하던 JVM 옵션을 다음과 같이 의미 단위로 분류해서 적용할 수 있다.
<jvm-config> <jvm-option>-XX:MaxPermSize=128M</jvm-option> <jvm-option>-Xmx256M</jvm-option> </jvm-config>
<jvm-option>은 기존의 <command-option>와 동일하게 동작한다. 즉, <command-option>의 내용을 그대로 <jvm-option>으로 옮겨서 사용해도 된다.
JVM 옵션 우선 순위의 경우 기존에 제공하던 <command-option>을 먼저 적용하며, <jvm-option>에 있는 것들은 XML에 나열한 순서로 적용한다.
패치 파일 적용 방법 개선
기존의 $JEUS_HOME/lib/system/jext.jar 외 패치 파일 적용을 위한 디렉터리를 별도로 사용할 수 있도록 한다($JEUS_HOME/lib/jext/). 단, $JEUS_HOME/lib/jext/는 필요할 경우 사용자가 직접 생성해야 한다.
JEUS root class loader의 classpath 설정의 적용 순서는 다음과 같다.
prepend classpath
$JEUS_HOME/lib/jext/jext*.jar
$JEUS_HOME/lib/system/jext.jar
상기 classpath 에서 동일한 클래스에 대해 상이한 패치가 발견되면 warning 메시지를 출력한다.
interrupt에 해당 thread의 stack trace가 로그에 출력되는 기능 추가
Active Management 기능에 의해 worker thread들이 max-thread-active-time을 넘게 되면 interrupt가 걸린다. 이때 해당 thread의 stack trace가 출력되는 기능을 추가하였다.
[2010.03.24 19:31:31][2][b240] [container1-43] [WEB-3972] http1:29:1 notifying long active thread (http1-w43), active time = 1599, uri = /examples/index.jsp
accesslog에 특정 확장자를 가진 파일의 기록을 남기지 않는 기능 추가
accesslog에 특정 확장자를 가진 파일의 기록을 남기지 않는 기능이 추가되었다.
[ WEBMain.xml 설정 예 ]
<logging> <access-log> <exclude-ext> bmp,jpg,jsp </exclude-ext> </access-log> </logging>
애플리케이션별로 적용된 세션 타임아웃을 출력하는 기능 추가
st -s 명령을 통해서 세션 정보를 확인할 때 애플리케이션별로 세션 타임아웃을 출력하는 기능이 추가되었다.
WebAdmin에서 JMS 메시지 관리 기능 추가
WebAdmin을 통해 Destination에 쌓여 있는 메시지의 정보를 확인하고 삭제할 수 있는 기능이 추가되었다.
Destination에 쌓여 있는 메시지의 정보를 확인할 수 있다(Header / Property / Body 정보).
Destination에 쌓여 있는 메시지를 모두 또는 개별적으로 삭제할 수 있다.
Altibase persistence store 지원
JEUS MQ에서 지원하는 persistence store는 journal store와 jdbc store가 있다. 이 중에서 Oracle, Tibero를 지원하던 jdbc store에 Altibase도 지원하도록 하였다. 지원 가능한 버전은 Altibase4 이다.
설정 방법은 기존 방식과 동일하게 JEUSMain.xml에 설정한 Altibase data source의 이름을 다음과 같이 JMSMain.xml에 설정한다.
[ JMSMain.xml 설정 예 ]
<persistence-store> <jdbc> <data-source>altibaseds</data-source> </jdbc> </persistence-store>
자세한 설명은 “JEUS MQ 안내서”의 “5.3. 기본 설정(JMSMain.xml)” 부분을 참조한다.
JMS Clustering 지원
JEUS MQ에서 JMS Clustering으로 ConnectionFactory Clustering과 Destination Clustering을 지원한다.
ConnectionFactory Clustering은 JMS 클라이언트가 JEUS MQ 서버로의 connection을 맺을 때 부하를 분산시키는 기능이다.
Destination Clustering은 ConnectionFactory Clustering에 의해서 적절하게 분산된 JMS 클라이언트들이 메시지 서비스를 받을 수 있도록 JEUS MQ 서버 간의 메시지 이동을 조정하는 기능을 말한다.
Clustering에 참여하는 JEUS MQ 서버들의 ConnectionFactory, Destination, Durable Subscriber 설정은 모두 동일해야 하며 다음과 같이 <jms-cluster-server>에 Cluster 설정을 한다.
[ JMSMain.xml 설정 예 ] - A서버
<?xml version="1.0" encoding="UTF-8"?> <jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <broker-name>jmscluster1</broker-name> . . . <jms-server-cluster> <jms-server-info> <broker-name>jmscluster1</broker-name> <jms-server-info> <jms-server-info> <broker-name>jmscluster2</broker-name> <jms-server-info> </jms-server-cluster> </jms-server>
[ JMSMain.xml 설정 예 ] - B서버
<?xml version="1.0" encoding="UTF-8"?> <jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <broker-name>jmscluster2</broker-name> . . . <jms-server-cluster> <jms-server-info> <broker-name>jmscluster1</broker-name> <jms-server-info> <jms-server-info> <broker-name>jmscluster2</broker-name> <jms-server-info> </jms-server-cluster> </jms-server>
자세한 설명은 “JEUS MQ 안내서”의 “제4장 JEUS MQ 클러스터링” 부분을 참조한다.
JMS FailOver 지원
장애(네트워크 장애, 서버 장애)로 인해 메시징 서비스를 할 수 없을 때, 대기 중이던 백업 서버가 장애 극복을 하는 기능을 지원한다.
Active 서버와 Standby 서버가 위치하는 JEUS 노드들이 JEUSMain.xml에 Clustering 설정이 되어야 한다. 또한 ConnectionFactory, Destination, Durable Subscriber 설정은 모두 동일해야 하며 다음과 같이 <fail-over>에 Failover 설정을 한다.
Active 서버는 <active>의 <listen-transport-url>에 gms를 설정한다.
Standby 서버는 <standby>의 <active-transport-url>에 Active 서버의 broker-name을 설정한다.
[ JMSMain.xml 설정 예 ] - Active 서버
<?xml version="1.0" encoding="UTF-8"?>
<jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<broker-name>active</brocker-name>
. . .
<fail-over>
<active>
<listen-transport-url>gms</listen-transport-url>
</active>
</fail-over>
</jms-server>
[ JMSMain.xml 설정 예 ] - Standby 서버
<?xml version="1.0" encoding="UTF-8"?>
<jms-server xmlns="http://www.tmaxsoft.com/xml/ns/jeus">
<broker-name>standby</brocker-name>
. . .
<fail-over>
<standby>
<active-transport-url>gms://active</active-transport-url>
</standby>
</fail-over>
</jms-server>
자세한 설명은 “JEUS MQ 안내서”의 “제3장 JEUS MQ 장애 극복” 부분을 참조한다.
JNDI의 DynamicLinkRef를 사용하는 객체(EJB, JMS)에 대해서 사용자가 link policy를 설정할 수 있는 기능 추가
클러스터링된 ejb나 jms connection factory, destination과 같은 리소스를 lookup할 때, 사용자가 지정한 설정에 따라 어떤 JEUS 노드에서 가져올지 선택할 수 있다. 이때 사용하는 프로퍼티는 jeus.jndi.clusterlink.selection-policy 이다. 클라이언트에서 InitialContext를 생성할 때 사용하는 environment로 설정이 가능하고, 시스템 프로퍼티로 설정할 수도 있다. 기본값은 로컬 노드에서 가져오도록 한다. 단, jeus.jndi.clusterlink.prefer-local-node가 false로 설정되어 있으면 선택되는 노드는 랜덤으로 변경된다.
jeus.jndi.clusterlink.selection-policy=locallinkPreference(기본값)
jeus.jndi.clusterlink.selection-policy=roundrobin
jeus.jndi.clusterlink.selection-policy=random
이 값이 설정되어 있지 않은 경우에는 jeus.jndi.clusterlink.prefer-local-node에 설정된 값의 영향을 받는다. jeus.jndi.clusterlink.prefer-local-node는 manager나 container에 설정하는 프로퍼티이며, 기본값은 true 이다.
jeus.jndi.clusterlink.prefer-local-node=true
Local 노드의 링크를 우선 선택한다( jeus.jndi.clusterlink.selection-policy=locallinkPreference).
jeus.jndi.clusterlink.prefer-local-node=false
랜덤으로 선택한다(jeus.jndi.clusterlink.selection-policy=random).
DataSource를 engine-container별로 지정할 수 있는 기능 추가
JEUSMain.xml에서 <database>를 정의할 때 target를 지정하여, 지정된 container에서만 DataSource를 사용할 수 있게 하는 기능을 추가하였다. 이와 관련하여 기존의 <database> 태그 하위에 다음의 설정이 추가되었다
<data-source-id> <data-source-target>
이 설정들을 사용할 때, 다음과 같은 사항을 알고 있어야 한다.
<data-source-target>에는 JEUSMain.xml의 <engine-container><name>의 값을 사용한다
<data-source-target>를 지정한 경우에는 지정된 container에서만 DataSource를 사용할 수 있다
<data-source-target>를 지정하지 않은 경우에는 모든 container에서 DataSource를 사용할 수 있다
<data-source-id>, <export-name> 둘 중 하나는 반드시 사용해야 한다
<export-name>을 사용하지 않고 <data-source-id>만 사용한 경우, DataSource의 JNDI 등록 이름은 <data-source-id>이며 사용자는 이 이름을 사용해야 한다
<data-source-id>, <export-name>을 모두 사용한 경우, 사용자는 <export-name>에 지정된 값을 사용해야 한다
자세한 설명은 “JEUS Server 안내서”의 “제8장 DB Connection Pool과 JDBC” 부분을 참조한다.
Cluster datasource 설정에서 load balancing 기능 지원
다음과 같이 <load-balance>태그를 사용하여 cluster datasource에서 load balancing 기능을 사용할 수 있도록 하였다.
<cluster-ds> <export-name>tac_loadbalance</export-name> <load-balance>true</load-balance> <data-source>tibero1</data-source> <data-source>tibero2</data-source> </cluster-ds>
자세한 설명은 “JEUS Server 안내서”의 “제8장 DB Connection Pool과 JDBC” 부분을 참조한다.
data-source 설정에서 java.util.Properties의 'value'에 쉼표(,)의 입력이 불가능한 문제 수정
data-source 설정에서 java.util.Properties에 대한 value는 'key'='value','key'='value' 형식으로 사용되는데 이것을 'key'='value' ,'value','value'와 같은 형식으로 표현하려는 경우에 쉼표(,)의 입력이 불가능한 문제를 개선하여 ","가 value에 포함된 경우에도 제대로 parsing하도록 수정하였다.
setAutoCommit, getConnection 호출할 때 trace를 조회할 수 있는 기능을 추가
다음과 같이 JEUSMain.xml에서 auto-commit-trace를 true로 설정하고 jeus.jdbc.connection-trace 로거의 log level을 FINE 이상으로 설정할 경우, setAutoCommit을 호출할 때 서버 로그에서 해당 trace를 조회할 수 있는 기능을 추가하였다. 또한 get-connection-trace를 true로 설정한 경우, jeusadmin에서 dsconinfo 명령을 사용할 때 -id 옵션을 사용하여 connection의 id를 지정하면 getConnection을 사용하고 있을 때 해당 Connection의 trace를 jeusadmin에서 조회할 수 있는 기능도 추가하였다.
<database> .... <connection-pool> .... <connection-trace> <enabled>true</enabled> <get-connection-trace>true</get-connection-trace> <auto-commit-trace>true</auto-commit-trace> </connection-trace> </connection-pool> </database>
onnectionPool에서 얻어온 Connection의 auto-commit이 false로 설정된 경우, 로그를 출력하는 기능 추가
ConnectionPool에서 얻어온 JDBC Connection의 auto-commit이 false로 설정된 경우 다음과 같은 로그를 출력하도록 하였다. 이때 Connection은 JDBC 드라이버의 Connection 객체이며, auto-commit 기본 설정값은 JDBC 드라이버에 따라 다르다.
[2009.09.24 20:29:40][4][b240] [container1-13] [JDBC-0382] auto-commit value of Connection is False. this may cause unintended result. dataSourceId : [datasource1]
물리적 커넥션을 생성할 때 timeout하는 기능 추가
물리적 커넥션을 생성할 때 계속 대기하게 될 경우 이를 끊을 수 있는 <login-timeout> 기능이 추가되었다. 단위는 second 이다.
SubCoordinator에서 RootCoordinator로의 연결이 실패할 경우, RootCoordinator의 IP 주소를 로그에 남기는 기능 추가
SubCoordinator가 RootCoordinator로 연결을 시도하다가 실패하여 TMException이 발생할 경우, 다음과 같이 RootCoordinator의 IP 정보를 함께 출력하도록 하였다.
jeus.transaction.TMException: SubCoordinator associated with transaction [JEUS GTID=007F000001048D730F2490F60000000000000015] failed to register to RootCoordinator[127.0.0.1]; transaction must be rolled back
또한 INFO 이상의 로그 레벨에서 다음과 같은 로그가 남도록 하였다.
please check your network interfaces and their IP configurations of RootCoordinator[127.0.0.1]
중앙식 세션 서버에서 maxInactiveInterval이 되지 않았음에도 removal-to로 세션을 제거하는 경우, 이에 대한 정보를 출력하는 로그 추가
중앙식 세션 서버에서 maxInactiveInterval이 되지 않았음에도 removal-to로 세션을 제거하는 경우, 이에 대한 정보를 출력하는 로그를 추가하였다.
<SessionManager>this session will be removed according to <removal-to> even though time is remained until maxInactiveInterval. id: sesid lastAccessedTime: 3000 removal-to: 5000 millisecs maxInactiveInterval: 3000 secs
모듈의 MANIFEST.MF의 ClassPath에서 디렉터리 지원
EJB 모듈에서 MANIFEST.MF의 Class-Path 설정을 이용하여 모듈 내의 library jar파일을 참조하는 기능을 디렉터리도 지원하게 확장하였다.
ti -con 명령에 대한 모니터링 로그를 파일로 남기는 기능 추가
jeusadmin을 실행할 때마다 리소스가 낭비되는 현상을 개선하고자 jeusadmin의 모니터링 명령에 대해서 console 로그를 파일로 남기는 기능이 추가되었다.
사용법은 다음과 같다.
jeusadmin>ti -con tmaxh4_container1 -i 간격 -k 반복횟수 -o 파일명
로그 파일은 jeusadmin 파일이 존재하는 위치의 monitor 디렉터리 하위에 생성된 jeusadmin을 종료하면 로그 생성도 중지된다.
ejbddinit 툴을 사용할 때, ejb의 export-name을 생성하는 규칙을 모듈 파일 단위로 지정할 수 있는 기능 추가
ejbddinit 툴을 사용할 때 모듈 파일 단위로 export name을 생성하는 규칙을 지정할 수 있는 기능을 추가하였다. 다음과 같은 패턴을 사용할 수 있으며, ejbddinit 툴을 이용한 경우 ejbddinit ant task를 사용한 경우 모두 사용이 가능하다.
%{module-name} : EJB 모듈 이름. jar 파일인 경우 .jar 확장자를 제거한 파일 이름
%{ejb-name} : EJB 컴포넌트 이름. ejb-jar.xml에 정의된 해당 EJB 컴포넌트의 <ejb-name> 태그의 값
%{ejb-fqn} : EJB 컴포넌트의 EJB 클래스의 fully qualified name. ejb-jar.xml에 정의된 해당 EJB 컴포넌트의 <ejb-class> 태그의 값
%{ejb-class} : %{ejb-fqn} 값에서 패키지 이름을 제외한 클래스 이름
사용예는 다음과 같다.
ejb.properties 파일에 다음과 같이 지정한다.
export-name=%{ejb-fqn}
ejbddinit 툴을 사용할 때 -property 옵션에 앞에서 생성한 파일을 지정한다.
ejbddinit 툴을 사용한다.
자세한 설명은 “JEUS Reference Book”의 “4.5. ejbddinit” 부분을 참조한다.
JCA 리소스 모니터링 페이지 변경
엔진 컨테이너 > 리소스 > JCA 리소스 > Connection Pool 모니터링 페이지를 다음과 같이 수정하였다.
리소스 명을 클릭했을 때 재구성/비활성화/Pool 크기 재조정/XA 트랜잭션 재시작 기능 제공
connection을 클릭했을 때 통계/연결 페이지를 통해 모니터링과 제어 가능
연결-리스트 페이지에서 특정 connection을 클릭했을 때 get-connection trace기능 제공
logger name 입력할 때 선택 가능한 이름을 가이드하는 기능 제공
에러 로그 > 로거 추가 Name 항목의 text box 옆의 "?"를 클릭한 경우 입력 가능한 logger name을 tree dialog로 표시한다.
tree의 각 노드를 선택했을 때 logger name에 해당 이름이 입력된다.
tree dialog는 포커스가 dialog에서 벗어나거나 "?"를 다시 클릭하면 닫힌다.
ContextMenu를 통해 command-option과 jvm-option에 GC / Memory Option을 추가하는 기능 제공
gc관련 옵션, 메모리 설정은 사용자들이 많이 변경하는 옵션이므로, 사용자 편의성 강화 측면에서 ContextMenu를 통해 입력할 수 있도록 수정하였다.
command-option / jvm-option에서 마우스 오른쪽 버튼을 클릭한 후 ContextMenu를 선택하면 해당 값을 마지막에 추가한다.
LOG_FILE_NAME은 사용자가 적당한 값으로 변경해야 한다.
기본값을 ContextMenu로 입력하고 사용자가 세부적으로 변경한다.
jaxws, jaxrpc(sun-ri) 기반의 WebService 모니터링 기능 제공
jaxws, jaxrpc(sun-ri) 기반의 WebService 또한 모니터링 기능이 정상적으로 동작하도록 개선하였다.
EcliseLink 지원
엔진 컨테이너에 시스템 프로퍼티로 jeus.persistence.defaultProvider=org.eclipse.persistence.jpa.PersistenceProvider로 설정하면 EclipseLink를 default로 사용하게 된다. 이와 관련하여 eclipselink.jar, jeus-eclipselink.jar 파일이 추가되었다.
JCA Pool을 모니터링, 관리하기 위한 명령을 추가
JCA Pool을 모니터링, 관리하기 위하여 control-connection-pool(controlcp 또는 clcp), list-connection-pool(lscp)을 추가하였다.
list-connection-pool(혹은 lscp)
지정한 조건에 따라서 jca, jdbc connection pool의 목록을 출력한다.
lscp : JDBC 풀도 포함하여 모든 리스트를 보여줌 lscp -jdbc : JDBC 풀만 보여줌. lscp -jca : JCA 풀만 보여줌 lscp -jca -active : JCA 풀 중 active 상태인 것만 보여줌.
control-connection-pool(controlcp 또는 clcp)
container를 지정하여 JCA Pool을 생성하거나 갱신한다.
controlcp -con dvt_container1 -create jdbc/DB1 controlcp -con dvt_container1 -refresh jca/resource1
자세한 설명은 “JEUS Reference Book”의 “4.2.6. Connection Pool 모니터링과 제어 명령어” 부분을 참조한다.
리소스 어댑터 undeploy의 경우 Connection Pool을 닫을 때, 일정 시간만큼 기다리고 이후에는 무조건 undeploy를 진행하는 기능 추가
jeus-connector-dd.xml에 <pool-destroy-timeout> 설정을 추가하여, 리소스 모듈을 Undeploy하면서 Pool을 destroy할 때 일정 시간 동안 기다리고 이후에는 무조건 undeploy를 진행하도록 하는 기능을 추가하였다.
<jeus-connector-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <module-name>ra-cpds</module-name> <connection-pool> <export-name>jca/oracle</export-name> <pool-management> <pool-destroy-timeout>20000</pool-destroy-timeout> </pool-management> </connection-pool> </jeus-connector-dd
deprecated된 시스템 프로퍼티를 설정할 경우, 부팅 과정에서 관련 로그를 출력하도록 수정
deprecated된 시스템 프로퍼티를 설정할 경우, 부팅 과정에서 관련 로그를 출력하도록 수정하였다. 프로퍼티가 삭제된 경우 혹은 설정 방법이 달라진 경우에 대해서도 로그를 통해서 알 수 있도록 하였다.
[2010.03.04 14:11:08][0][b240] [jeus6-1] [MGR-0003] The system property [jeus.container.autorestart] is deprecated, please set <auto-restart> below <node> or <engine-container> in JEUSMain.xml
jeus.container.autorestart 삭제 및 <auto-restart> 설정 추가
jeus.container.autorestart 시스템 프로퍼티를 삭제하고, <node>와 <engine-container>설정에 <auto-restart>를 추가하였다.
<auto-restart>의 기본값은 true이다.
<engine-container>에 설정이 없을 경우에는 <node>의 설정을 따른다.
<auto-restart>가 true이면 컨테이너를 재부팅하고, false일 경우에는 재부팅하지 않는다. 재부팅하지 않을 때는 다음과 같은 로그가 출력된다.
[2010.03.15 14:57:00][0][b239] [jeus6-68] [MGR-0307] Container jeus6_container2 is dead unexpectedly. Restarting it ... [2010.03.15 14:57:00][2][b239] [jeus6-68] [MGR-0567] trying to start engine container[jeus6_container2] [2010.03.15 14:57:00][2][b239] [jeus6-68] [MGR-0571] container jeus6_container2 cannot restart because <auto-restart> is false
jeus 스크립트에 jeus.log.home 프로퍼티 추가
사용자가 로그 위치를 쉽게 변경할 수 있도록 jeus 스크립트에 jeus.log.home 프로퍼티를 다음과 같이 추가하였다.
-Djeus.log.home="${JEUS_HOME}/logs"
JEUS 로그 매니저를 java.util.logging.manager로 변경
기존의 JEUS 로그 매니저는 JVM 에서 제공하는 디폴트 로그 매니저를 사용하고 있었다. jeus 실행 스크립트에 다음과 같이 명시하여 JEUS 로그 매니저를 사용하도록 수정하였다.
-Djava.util.logging.manager=jeus.util.logging.JeusLogManager
Engine Container Process의 thread dump가 engine container에 별도로 설정한 파일 로그에 나오지 않는 문제를 수정
engine container를 실행하기 위한 <jvm option>을 설정하는 부분에 다음과 같이 옵션을 추가한다.
<jvm-config> <jvm-option>-XX:+UnlockDiagnosticVMOptions</jvm-option> <jvm-option>-XX:+LogVMOutput</jvm-option> <jvm-option>-XX:LogFile=${jeus.log.home}/logs/container1/jvm.log</jvm-option> </jvm-config>
이 파일은 jvm을 새로 실행할 때마다 기존 정보는 삭제되고 덮어쓰기 때문에 간단한 rotation지원한다(only time),
file size가 20KB보다 작으면 파일을 덮어씀
file size가 20KB보다 크면 다음과 같이 기존 파일 이름에 last modified time을 붙여주도록 변경
jvm.log -> jvm_20100315143423.log
JEUSMain.xml의 <command-option>이나 <jvm-option>에 이 설정이 있다면 설정한 파일 이름으로 동작
EngineContainer를 실행할 때 -client 옵션을 설정하면 적용되도록 수정
hotspot의 경우 JEUS 내부에서 자동으로 붙여주던 -server나 -classic은 붙여주지 않도록 하고 <command-option> 또는 <jvm-option>에 -client 옵션을 설정하면 적용되도록 수정하였다.
<command-option>-client</command-option>
<jvm-config> <jvm-option>-client</jvm-option> </jvm-config>
<sequential-start>의 기본값을 true로 변경
<node>하위에 존재하는 <sequential-start>의 기본값을 false에서 true로 변경하였다.
부팅할 때 JVM 정보, 매니저의 포트, 프로세스 ID, 시스템 타임존 정보를 남기도록 변경
JEUS를 부팅할 때, 다음과 같이 JVM 정보, 매니저의 포트, 프로세스 ID, 시스템 타임존 정보를 출력하도록 하였다
[2009.12.07 10:44:03][0][b240] [jeus6-1] [MGR-0000] JEUS Server is starting - JEUS 6.0 (Fix#7) (6.0.0.7-b240) [2009.12.22 21:27:18][0][b240] [jeus6-1] [MGR-0001] java.specification.version= [1.5], java.runtime.version=[pxi32dev-20090707 (SR10 )], vendor=[IBM Corporation] [2009.12.07 10:44:03][2][b240] [jeus6-1] [MGR-0534] JEUS Manager=[cts], baseport= [9736], pid=[3273] [2009.12.07 10:44:03][2][b240] [jeus6-1] [MGR-0259] current system time zone : sun.util.calendar.ZoneInfo[id="ROK",offset=32400000,dstSavings=0,useDaylight=false, transitions=14,lastRule=null]
Native library가 glibc 2.3을 지원하도록 변경
JEUS Native library를 glibc 2.3에서도 사용할 수 있도록 하였다.
RMI/IIOP Interop. 설정에 따라 IIOP Export 설정된 EJB Bean 디플로이 처리 방식 개선
jeus-ejb-dd.xml에서 expot-iiop 설정을 사용한 bean deploy할 때, cos-naming-server 존재 여부에 따라 디플로이 방법을 다음과 같이 변경한다.
<export-iiop><only-iiop>가 true인 bean은 cos-naming-server가 기동되지 않은 경우에는 디플로이 자체를 시도하지 않도록 한다.
<export-iiop><only-iiop>가 false인 bean은 cos-naming-server가 기동되지 않은 경우에는 JNDI 에만 디플로이한다
<enable-interop> 설정이 사용된 Engine container를 시작할 때, cos-namgin-server가 없으면 Waring 메시지를 출력하고 container는 그대로 부팅한다.
EJB 호환성 및 Local call 관련 기능 정리
EJB 2.x 의 하위 호환성 및 Local call 관련 기능의 개선점 적용 및 문제점 개선을 위한 작업을 진행하고, 이와 관련하여 다음과 같이 옵션들을 정리하였다.
시스템 프로퍼티 중 jeus.ejb.client.latest.version과 jeus-ejb-dd.xml의 <lates-client>를 제거하고 EJBMain.xml과 jeus-ejb-dd.xml에 <use-dynamic-proxy-for-ejb2>를 추가하였다. 기본값은 true이며, 하위 버전과의 호환성을 보장하기 위해서는 이 값을 false로 설정해야 한다. 또한 EJBMain.xml에 <use-dynamic-proxy-for-ejb2>이 false로 설정된 경우에는 jeus-ejb-dd.xml에 설정된 내용에 우선한다.
jeus-ejb-dd.xml에서 <local-invoke-optimize>, <local-invoke-only>를 삭제하고, EJB의 클래스로딩 모드에 상관없이 local invoke optimization을 지원하도록 하였다.
jeus-ejb-dd.xml의 <jeus-ejb-dd><beanlist><jeus-bean><call-by- value>를 <preferred-call-by-reference>로 이름을 변경하였다. 기본값은 false이며, 이 설정을 true로 설정하여도 경우에 따라(isolated class loading mode, EJB2.x dynamic proxy 방식이 사용되지 않는 경우) call-by-value로 동작할 수 있으므로 이를 가정하고 애플리케이션을 개발해서는 안 된다.
thread의 상태를 남기는 로그 기능 개선
Active Management 기능에 의해 worker thread들이 max-thread-active-time을 넘게 되면 interrupt가 걸리게 된다. 이때 해당 thread의 stack trace가 나오도록 하는 기능을 추가하였다.
thread pool을 체크할 때 thread 로그 변경 : active ->long active 로 수정하였으며 thread의 변경 사항이 있을 때만 로그를 남기도록 하였다. 로그 레벨은 info->warning으로 변경되었다.
[2010.03.24 19:31:31][2][b240] [container1-43] [WEB-3972] http1:29:1 notifying long active thread (http1-w43), active time = 1599, uri = /examples/index.jsp
destination별 high-mark와 limit의 디폴트값 변경
JMS의 destination별 high-mark와 limit의 디폴트값이 변경되었다(high-mark 는 0.75G 로, limit 는 1G 로 변경).
트랜잭션을 사용할 때, Connection에 이상이 있을 경우 트랜잭션 종료 후 close 처리하도록 변경
트랜잭션을 사용할 때 Connection에 이상이 생기면 기존에는 즉시 Connection을 close하였다. 이를 변경하여 문제점이 발생한 시점에서는 close 대상이라는 표시만 하고, 트랜잭션이 종료된 후 해당 Connection의 close작업을 처리하도록 변경하였다.
ResourceLeakManager logger 이름을 "jeus"에서 "jeus.service.resourceleak"로 변경
invocation-manager 설정 후에 Connection 누수가 발생했을 때 로거의 이름을 "jeus"에서 "jeus.service.resourceleak"로 변경하였다.
removal-to의 기본값 변경
중앙식 세션 서버에서 세션 timeout의 경우에 세션을 제거하는 방법을 다음과 같이 변경하였다.
removal-to값과 관계없이 maxInactiveInterval을 비교해서 작은 값을 가지고 제거
passivation의 설정 여부와 관계없이 timeout이 되면 메모리에서 세션을 제거
기존에는 passivation이 발생하고 removal-to 시점에서 제거가 되었으며, removal-to가 -1인 경우 제거되지 않았다.
deploy ant task에 classloading mode를 지정할 수 있도록 변경
ant task에 classloading mode를 shared, isolated로 지정하여 디플로이할 수 있도록 변경되었다. 기존에는 지정할 수 없이 shared mode로 디플로이되었다.
build.xml의 <target>, <deploy>에 classloading을 다음과 같이 설정한다.
ISOLATED 인 경우
classloading="isolated"
SHARED 인 경우
classloading="shared"
application.xml에서 <library-directory> 가 절대 경로일 경우, EAR 애플리케이션의 상대 경로로 인식하도록 변경
application.xml에서 <library-directory>가 절대 경로로 작성된 경우, 시스템의 절대 경로로 인식하여 디플로이가 실패하는 현상을 수정하였다. 즉, <library-directory>의 설정값이 '/'로 시작하는 경우에 '/'가 없을 때와 똑같이 동작하게 된다.
ti 명령어 수행할 때, thread pool명이 알파벳순으로 정렬되도록 변경
jeusadmin에서 ti (Thread Info) 명령을 수행할 때마다 정렬 순서가 일정하지 않기 때문에 사용적 측면에서의 불편함을 개선하고자 thread pool명이 알파벳순으로 정렬되도록 변경하였다.
applist 사용할 때 EAR 애플리케이션에 포함된 모듈 정보가 출력되도록 변경
jeusadmin에서 applist 사용할 때, EAR 애플리케이션의 경우에도 EAR 애플리케이션에 포함된 모듈 정보가 출력되도록 변경하였다.
EAR 애플리케이션에 포함된 ejb 모듈에 대해 moduleinfo가 실행되도록 변경
jeusadmin에서 EAR 애플리케이션에 포함된 ejb 모듈에 대해서도 moduleinfo가 실행되도록 변경하였다.
MS-SQL datasource명 변경
새 JDBC 데이터 소스 생성 - 데이터 소스 목록의 MS-SQL을 MSSQL 2000 Datasource에 대해 MS-SQL 2000 DataSource, MSSQL 2005 및 상위 버전에 대해 MS-SQL 2005 and above DataSource와 같이 변경하였다.
webservice 모니터링이 정상적으로 동작하도록 변경
과거 axis 기반의 webservice만을 지원하였으나 jaxws, jaxrpc(sun-ri) 기반의 webservice 모니터링 기능이 정상적으로 동작하도록 개선되었다.
WebAdmin의 공식 브라우저 대상 변경
공식 브라우저로 추가 : IE8, Firefox 3.5
비공식 브라우저로 변경 : IE6, Firefox 2
WebAdmin에서 Container의 상태를 jeusadmin과 동일하도록 수정
WebAdmin에서 Container의 상태는 SHUTDOWN, STOPPING, STARTING, READY의 4가지로 표현한다.
Container의 상태에 따라 시작/종료 명령 버튼의 활성/비활성 수정
각각의 버튼은 다음의 경우 활성화된다.
시작 : SHUTDOWN
종료 : READY
모두 시작 : SHUTDOWN 상태가 존재할 경우
모두 종료 : READY 상태가 존재할 경우
모두 시작/모두 종료 : SHUTDOWN ,READY 모두 존재 할 경우
온라인 도움말 검색 기능 강화
기존의 온라인 도움말 검색 기능을 강화하여 한글 검색 지원 및 조사, 띄어쓰기를 고려하여 검색어를 다양하게 입력하여도 정상적으로 검색되도록 수정하였다.
디플로이된 모듈은 다시 디플로이할 수 없었던 기능 제거
디플로이 된 모듈의 체크박스를 비활성화하여 더 이상 디플로이가 불가능하던 것을 수정하여 이미 디플로이 된 모듈도 다른 container에 디플로이할 수 있도록 수정하였다.
스키마 추가
세션 서버 기능에 대한 누락된 스키마 추가
엔진 컨테이너 > 서블릿 엔진-세션 화면(WEBMain.xml)에 세션 서버 페이지 추가
엔진 컨테이너 > 서블릿 엔진-세션 > 기본 설정 화면에 [재설정] 버튼 추가
엔진 컨테이너 > 컨텍스트 그룹-세션 > 기본 설정 화면에 [재설정] 버튼 추가
엔진 컨테이너 > 중앙 세션 서버-기본 설정 > 기본 설정 화면(JEUSMain.xml)에 replicated-server 항목 추가
JMS Cluster, Failover 추가 기능에 대한 스키마 추가
엔진 컨테이너 > JMS 엔진 - 클러스터 페이지에서 Cluster 관련 설정 추가
엔진 컨테이너 > JMS 엔진 - Fail Over 페이지에서 Failover 관련 설정 추가
JDBC 추가 기능에 대한 스키마 추가
JEUS 매니저 리소스 > JDBC > 새 JDBC 데이터 소스 생성 - 속성 페이지에서 Login Timeout 항목 추가
JEUS 매니저 리소스 > JDBC > 새 JDBC 데이터 소스 생성 - 연결 풀 페이지에서 Auto Commit Trace 항목 추가
wsdl2java 콘솔툴 default package name 변경
JEUS 5와의 일관성을 위해 변경 전에 생성되던 default package name인 [wsdl 파일명+"_pkg"] 을 wsdl의 namespace를 detect 하여 생성하도록 수정하였다.
disposable Connection 수를 얻어갈 수 있는 MBean 추가
javax.management.j2ee.statistics.JDBCConnectionPoolStats MBean을 통해서 현재 active한 disposable Connection 수를 얻어갈 수 있는 MBean이 추가 되었다. 해당 샘플은 {JEUS_HOME}/samples/jmx/monitoring을 참고한다.
jeus-connector-dd.xsd에 <connectionfactory-interface>추가
ra.xml에 <connection-definition> 설정이 2개 이상 있을 경우에는 반드시 <connectionfactory-interface>값을 jeus-connector-dd.xml에 <connection-pool><connectionfactory-interface>로 설정해야만 디플로이가 가능하다. 이것은 ra.xml에 <connection-definition> 설정에 맞춰서 JEUS에 Connection Pool을 설정할 수 있도록 하기 위해서이다. 단, ra.xml에 <connection-definition>이 하나만 있을 경우에는 jeus-connector-dd.xml에 <connectionfactory-interface> 값이 없어도 디플로이가 가능하다.
webtJCA를 위한 JCA Connection Pool 개선
JEUS JCA Connection Pool을 다음과 같이 개선하였다.
JCA 스펙에서 언급하는 connection sharing을 정식으로 지원한다.
JCA 스펙의 여러 가지 optimization 중에서 현실성이 없다고 판단되는 lazy connection association을 제공하지 않으며, lazy transaction enlistment는 제공한다.
local transaction optimization 제공하지 않는다.
기타 Connection Pool과 관련해서 부가적인 기능들을 지원한다.
자세한 설명은 “JEUS JCA 안내서”의 “제2장 아웃바운드 관리” 부분을 참조한다.
디플로이할 때 필요한 jeus-connector-dd.xml의 경우, DB Connection Pool과 유사한 방향으로 조정하였다. 그러므로 더 이상 사용하지 않는 설정값들이 있다.
derby 버전 변경
JEUS 6.0 릴리즈할 때 포함되는 Apache Derby의 버전이 10.4.2로 업그레이드 되었다.
ant 버전 변경
ant 버전이 1.6.5 에서 1.7.1로 업그레이드 되었다.
파일 변경 내역
JEUS_HOME\lib\licenses
- 추가 : eclipselink-license.html, shoal.txt
JEUS_HOME\lib\system
- 추가 : eclipselink.jar,grizzly-framework.jar, grizzly-utils.jar, jeus-eclipselink.jar, jeus-gms.jar, jxta.jar, shoal.jar
JEUS_HOME\endorsed
- 추가 : xml-apis.jar, xmlsec.jar
- 삭제 : jaxp-api.jar
환경설정 변경
JEUSMain.xml 에 file-handler 설정 추가
JEUS_HOME/config/{vhost}/JEUSMain.xml 에 file-handler 설정을 다음과 같이 추가하였다.
<system-logging> <level>INFO</level> <handler> <console-handler> <name/> </console-handler> <file-handler> <name>fileHandler</name> <enable-rotation>true</enable-rotation> <append>false</append> <valid-day>1</valid-day> </file-handler> </handler> </system-logging>
exploded 샘플 모듈에 WorkerServlet 예제 추가
JEUS_HOME/webhome/app_home/exploded 모듈의 web.xml에 WorkerServlet 예제를 다음과 같이 추가하였다.
<servlet> <servlet-name>WorkerServlet</servlet-name> <servlet-class>jeus.servlet.servlets.WorkerServlet</servlet-class> <init-param> <param-name>PackageSeparator</param-name> <param-value>.</param-value> </init-param> <load-on-startup>-1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>WorkerServlet</servlet-name> <url-pattern>/servlets/*</url-pattern> </servlet-mapping>