본 장에서는 JEUS6 Fix#5에서의 버그패치, 기능추가, 변경사항에 대해서 설명한다.
5개 이상의 container가 비정상 종료 후 2분 안에 재시작될 때 발생했던 문제 수정
여러 개의 container가 비정상적으로 죽어서 다시 시작될 때 2분 안에 5개 이상의 container가 재시작할 경우 5번째부터 재시작 되지 않던 현상을 해결하였다. 2분 안에 manager당 5개가 아닌 container당 5개를 시작할 때 무한 루프로 판정하여 더 이상 container를 재시작하지 않게 수정하였다.
JMX remote 통신할 때 client에서 "jmx.remote.x.request.timeout"로 설정한 시간만큼 wait할 수 있도록 수정
JMX remote 통신할 때 server에서 응답이 없으면, client에서 무한 wait하는 현상이 존재하였던 문제를 수정하였다. jmx.remote.x.request.timeout 옵션을 system property로 넣어 사용한다. 단위는 밀리초(mili-second)이다.
JEUS_HOME/jeus 스크립트에 -Djmx.remote.x.request.timeout=120000 JEUS_HOME/jeusadmin 스크립트에 다음을 설정 -Djmx.remote.x.request.timeout=20000
IBM JDK 에서 IIOP를 설정할 때 디플로이가 제대로 되지 않는 문제 수정
IBM JDK 에서 IIOP 설정이 사용된 EJB를 디플로이하려고 할 때 IBM JDK에는 존재하지 않는 클래스를 찾는 현상이 있었다. 이를 수정하기 위해서 일부 파일에 대하여 패키징 변경이 이루어졌다.
peorb.jar, orblib.jar, optorbcomp.jar, peord_add.jar를 peorb.jar 하나로 통합하고 나머지 파일은 삭제하였다.
jsse14_repack.jar를 추가하였다.
IBM JDK 1.5.0 SR7에서 IIOP stub file 생성이 제대로 되지 않는 문제 수정
SR7에서 EJB의 IIOP Stub을 생성하는 과정에서 컴파일 에러가 발생하였다. 이를 해결하기 위해 다음의 두 가지 옵션을 추가하였으며 SR7의 경우 jeus.ejb.compiler.rmic.fork를 true로 주어야 한다. SR6에서는 별도의 설정이 필요 없다
jeus.ejb.compiler.rmic.fork = true/false jeus.ejb.compiler.rmic.verbose = true/false
Standalone Java 프로그램에서 jeus.client.interop=true 시스템 프로퍼티를 설정하고 EJB를 설정할 때 에러가 발생하는 현상 수정
Standalone Java 프로그램에서 JEUS에서 제공하는 라이브러리들을 이용해 JEUS에 디플로이된 EJB를 RMI-IIOP로 호출할 때, jeus.client.interop=true 를 시스템 프로퍼티로 지정해야 하는데 이때 에러가 발생하는 현상을 수정하였다.
CMP에서 cloudscape을 사용할 때 에러가 발생하는 문제 수정
CMP에서 DB Vendor로 cloudscape를 사용할 경우 디플로이 과정에서
EJBSQLGeneratorException
이 발생하는 현상을 수정하였다.
auto-reload에 실패했을 때 reload를 재시도 하지 않는 문제 수정
timeout 등의 문제로 auto-reload 실패할 때 기존에는 reload를 시도하지 않던 문제를 relaod하도록 수정하였다.
TmaxListener와 CLH의 reconnect 문제 수정
TmaxListener와 AnyLink CLH(client handler)의 연결이 끊긴 후 reconnect를 시도 하지 않는 문제를 수정하였다.
alias 설정이 동작하지 않는 문제 수정
jeus-web-dd.xml 파일에 설정한 alias가 동작하지 않았던 문제를 수정하였다.
struts2를 사용할 때 Action Mapping을 찾지 못하는 문제 수정
struts2를 사용할 때 Action Mapping된 파일을 include와 같은 방식으로 불러서 사용할 경우(ex, <%@ include file="/action.do"%>) "/"가 중복으로 적용되어 파일을 찾지 못하는 문제를 수정하였다.
jeus 설치 디렉터리에 공백이 있는 경우 stack overflow가 발생하는 문제 수정
Application에서 taglib를 사용할 때 jeus가 설치된 디렉터리에 공백이 있으면 taglib를 찾는 과정에서 공백이 있는 directory를 인식하지 못하고 무한루프에 빠지게 되어 stack overflow가 발생 하는 문제를 수정하였다.
security-constraint의 "*.jsp" url-pattern 적용 문제 수정
security-constraint의 url-pattern을 *.jsp로 설정할 경우 extension matching으로 검색하지 않고 prefix로 검색하는 문제를 수정하였다.
ResourceServlet을 수행할 때 ClassCastException발생 하는 문제 수정
ResourceServlet을 수행할 때 file이 없는 경우 ClassCastException이 발생하는 문제를 수정하였다.
TmaxListener를 사용할 때 NIO 와 BIO request 객체가 달라 ClassCastException이 발생하는 문제 수정
NIO와 BIO의 경우 request 객체가 달라 ClassCastException이 발생하는 문제가 있었는데, TmaxServletRequest 에 getServerGroupName()을 추가하여 이를 수정하였다.
TCP, TmaxListener 에서 postdata clear방식 문제로 OutOfMemoryException이 발생 하는 문제 수정
TCP, TMAXListener 에서 postdata를 clear할 때 content-length가 큰 경우 OutOfMemoryException이 발생할 수 있는 문제가 있었는데, postdata를 clear하는 방법을 getBody를 사용하여 한번에 모두 읽는 방식에서 1024 byte씩 읽도록 하는 방식으로 수정하여 해결하였다.
windows 환경에서 파일명의 대소문자가 구별이 안 되는 문제 수정
windows 환경에서 최초 접속할 때 대소문자를 구별하여 호출하도록 수정하였다.
TmaxListener를 사용할 때 servlet 수행 전 exception이 발생한 경우 응답 에러 문제 수정
TmaxListener를 사용할 때 servlet 수행 전 exception이 발생하면 response의 header가 세팅되지 않아서 NullPointerException이 발생하는 문제를 수정하였다.
Spring 태그와 JSTL 태그를 동시에 사용할 경우 ClassCastException이 발생하는 문제 수정
Springframework의 ExpressionEvaluationUtils를 이용해 EL 의 값을 가져오는 부분에서 두 개의 EL 구현체가 동시에 사용되어 ClassCastException이 발생하는 문제를 수정하였다.
액션 include 방식으로 jsp를 include할 때 class file이 __2e 하위에 생성되는 문제 수정
상대경로에 있는 jsp file을 액션 include 방식으로 include할 때 파일 경로에 "./"이 포함되어 있으면 generate 되는 java file과 class file이 실제 생성되어야 할 경로 하위에 바로 생성되지 않고 "__2e" 라는 디렉터리를 만들고 그 아래에 생성되는 문제를 수정하였다.
servlet version에 따른 jsf library 로딩 문제 수정
servlet version이 2.4인 경우 JEUS6에서 JSF library가 로딩되지 않는 문제를 옵션을 추가해 수정하였다.
해당 옵션은 -Djeus.servlet.enforce.jeusjsflib으로 default가 false이고 true인 경우 application의 servlet version이 2.4 인 경우에도 jsf 1.2 library가 loading 된다.
-Djeus.servlet.enforce.jeusjsflib = true/false
Reverse Proxy (Rewrite Filter)를 통과할 때 "'를 정상적으로 치환 하지 못하는 문제 수정
Reverse Proxy(Rewrite Filter)를 사용할 때 Application의 "' 부분을 replace 해야 하는 url(링크) 로 인식해서 정상치환하지 못하고 rewrite하는 문제를 수정하였다.
JSF listener가 먼저 초기화 되지 않는 문제 수정
JSF에 의존적인 Dynamic JSF 같은 경우 JSF listener가 먼저 초기화 되지 않아서 발생하는 NullPointerException이 발생하는 문제를 수정하였다.
config directory를 지정한 경우 https keystore 위치를 찾지 못하는 문제 수정
-Djeus.config.home을 지정하여 별도의 directory를 config home으로 지정했음에도 불구하고, web container를 부팅할 때 https 관련 keystore를 JEUS_HOME/config 밑에서 무조건 찾으려고 하는 문제를 수정하였다.
NIO Http Listener에서 request line을 한번에 읽지 못하는 문제 수정
NIO Http Listener에서 request line을 한번에 읽지 못하는 경우 먼저 읽혀진 request line이 무시 되어 처리될 수 있는 문제를 수정하였다.
webtob listener를 사용할 때 context가 null인 경우에도 contextPath가 설정되는 문제 수정
webtob listener에서 context가 null임에도 불구하고 request의 contextPath가 설정되어 잘못된 URL 정보가 설정되는 문제를 수정하였다.
클러스터링 된 EJB와 같은 JNDI 이름을 가지는 EJB를 lookup 할 때 다른 EJB를 가져오는 문제 수정
EJB JNDI 이름을 클라이언트에서 static하게 관리하여 클러스터링 domain이 다른 경우에도 EJB JNDI 이름이 같게 되면 하나의 link로 관리되어 엉뚱한 EJB를 찾는 문제가 있었다. Static caching을 하던 방식을 제거하여 수정하였다.
JMS 클라이언트가 connection failover를 시도할 때 새로운 entry가 생성되는 문제 수정
JMS 서버와 클라이언트 간에 네트워크가 단절되었을 경우, 초기 connection할 때 entry 정보와 reconnection 후의 entry 정보가 서로 일치하지 않아서 connection failover가 이루어지지 않던 문제를 수정하였다.
두 개 이상의 thread 클라이언트가 reconnect를 시도하다가 실패할 경우, reconnect를 시도하지 않도록 수정
Shutdown 중인 JMS 서버에 클라이언트가 reconnect를 시도하고 실패하면서 두 개 이상의 thread가 같은 entry에 대해 reconnect를 시도하여 ResourceAllocationException이 발생하는 문제를 수정하였다.
DLQ에 있는 메시지를 복구하지 못하는 문제 수정
DLQ (Dead letter queue)의 경우, JMS 서버를 재기동 할 때마다 새로운 destination을 생성하여 기존의 메시지를 복구하지 못하는 문제를 수정하였다.
use-count가 check-query-period에 의해 증가되는 문제 수정
use-count가 check-query-period 설정에 의해 주기적으로 커넥션 체크를 하는 경우에도 증가되는 문제를 수정하였다.
OTS를 사용할 때 Recovery가 제대로 이루어지지 않은 문제 수정
기존에 타제품과 Transaction을 연동하면서 OTS를 사용할 때, 사용중 recovery가 제대로 동작하지 않아서 한쪽은 commit되고 한쪽은 rollback 처리됨으로 인해서 transaction의 consistency가 깨지는 문제를 수정하였다.
Recovery 과정에서 여러 개의 indout transaction이 복구될 때, 특정 Resource가 공유되는 문제 수정.
Recovery 과정에서 외부 요청에 의해 같은 XA Resource를 사용하는 다수의 indoubt transaction이 복구 될 경우 해당 Resource가 공유되는 현상을 수정하였다.
transaction timeout발생 후 commit이 될 수 있는 문제 수정
transaction timeout발생 후에 JDBC connection을 계속 사용하거나, EJB transaction propagation이 이루어질 때 commit이 될 수 있는 문제를 수정하였다.
중앙식 세션서버를 사용할 때 로컬의 세션 invalidation 검사를 하지않는 문제 수정
중앙식 세션 서버를 설정하고 shard 옵션을 ture로 사용하고 컨텍스트가 2개 이상일 경우 컨테이너에서 timeout이 지난 session을 invalidation시키지 않는 문제를 수정하였다.
다른 context를 include할 때 각 context의 세션이 공유되지 않는 문제 수정
세션 서버를 설정하고 shard 설정이 true일때 include 된 servlet에서 세션을 먼저 생성하고 include한 servlet에서 getsession을 할 경우 다른 세션이 생성되어 세션 공유가 되지 않는 문제를 수정하였다.
application이 autodeploy로 설정된 경우에 classloading 모드가 무조건 SHARED로 로딩 되는 문제 수정
application이 exploded인 경우 autodeploy 하려는 application에 대해 설정된 classloading 설정을 반영하지 못하고 SHARED가 적용되던 현상을 수정하였다.
jeusadmin의 refreshds 명령이 무조건 fail 되었다고 나오는 문제 수정
refreshds 명령을 수행하면 refresh가 성공했음에도 불구하고 jeusadmin에서 refresh가 실패했다고 출력되는 문제를 수정하였다.
jeusadmin의 deploy 명령을 수행할 때 JEUS가 수행된 위치의 모듈을 찾는 문제 수정
jeusadmin의 deploy 명령에서 Application을 상대 경로로 deploy할 경우, APP_HOME에 존재하는 모듈과 JEUS를 실행한 위치에 같은 이름의 모듈이 존재하면 JEUS를 실행한 위치의 모듈을 deploy하는 문제를 수정하였다.
appcompiler를 수행할 때 작업 디렉터리가 남는 문제 수정
exploded EAR 모듈의 application.xml에 정의된 모듈이 존재하지 않을 경우에 appcompiler로 이를 수행하면 NullPointerException이 발생하고 작업 디렉터리가 남는 문제를 수정하였다.
appcompiler가 fast-deploy가 true로 설정된 모듈을 compile 하지 않는 문제 수정
appcompiler를 수행한다는 것은 compile하는 것이 목적이므로 jeus-ejb-dd.xml에 fast-deploy가 true로 설정이 되어 있어도 compile을 하도록 수정하였다.
물리적 커넥션 닫음 통계가 잘못 나오는 문제 수정
물리적 커넥션을 닫을 때 WebAdmin에서 그 통계를 잘못 보여주는 문제를 수정하였다.
GET방식으로 로그인 할 경우 에러 발생되었던 문제 수정
WebAdmin 에서 GET방식으로 로그인할때 올바른 로그인 정보를 입력하는 것과 상관없이 password에 숫자가 들어갈 경우 exception 발생했던 문제를 수정하였다.
IBM JDK에서 https를 설정할 때 Exception이 발생하는 문제 수정
IBM JDK 에서는 default로 Key/Trust Management Algorithm을 IBMX509로 사용하도록 수정하였다.
Authorization Repository를 DB로 사용할 경우 비정상적으로 권한 체크를 하는 문제 수정
Timeout이 발생 했을때, PolicyManager의 Cache에 저장된 security 값들을 정상적으로 얻어오지 못하던 문제를 수정하였다.
(Axis-based)EJB webservice에서 request message의 soap body에 큰(2MB 이상) message가 들어 있을 때 server side에서 응답이 오래 걸리는 문제 수정
전체 request SOAP message를 DOM 으로 parsing 하지 않고 SOAP body 아래의 첫 번째 element 까지만 해석하여 operation qname을 얻는 방식으로 수정하였다.
array argument를 가진 SEI 에 대하여 (axis based)java2wsdl을 수행할 때 오류가 발생하는 문제 수정
java2wsdl에서 array argument에 대한 complex type의 schema type을 생성할 때 schema type namespace가 누락되던 문제를 수정하였다.
Container의 command-option은 java 이후에 바로 붙도록 하며, 공백이 들어간 옵션도 지원
JEUSMain.xml의 command-option의 경우 java 이후에 바로 위치하여야 정상적으로 동작하는 경우가 있어서 이를 지원한다. 또한, 특정 옵션의 경우 공백이 포함된 문자열 형태가 올 수 있어서 이도 함께 지원된다.
<command-option>-XX:OnError="gdb %p" -Xmx256m</command-option> JEUSMain.xml에 위와 같은 command-option을 설정한 경우의 로그는 다음과 같다. /opt/java1.5/jre/bin/java -XX:OnError=gdb %p -Xmx256m -server -Xbootclasspath/p:/data1/powflash/jeus6/lib/system/extension.jar -classpath /data1/powflash/jeus6/lib/system/bootstrap.jar -Djava.security.policy=/data1/powflash/jeus6/config/security/policy -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djava.library.path=/data1/powflash/jeus6/lib/system -Djava.endorsed.dirs=/data1/powflash/jeus6/lib/endorsed -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net -Djeus.net.reuseAddress=true -Djeus.jvm.version=hotspot -Djava.util.logging.config.file=/data1/powflash/jeus6/bin/logging.properties -Dsun.rmi.dgc.server.gcInterval=3600000 -Djeus.home=/data1/powflash/jeus6 -Djava.net.preferIPv4Stack=true -Djeus.baseport=9736 -Djeus.ejb.operationTimeout=300000 -Djeus.tm.checkReg=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Djeus.tool.webadmin.locale.language=ko -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djeus.server.protectmode=false jeus.server.enginecontainer.EngineContainerBootstrapper johan_container1 johan_jms_engine1 johan_servlet_engine1 johan_ejb_engine1
기본적으로 생성되는 설정 value를 위한 template 파일 추가
WebAdmin이나 여러 admin tool에서 configuration을 생성할 때 기본적으로 들어가야 하는 value를 설정하는 template 파일을 추가하였다. template file은 JEUS_HOME\config\config-template.properties이며 다음과 같은 형태가 된다.
#============================================================================= # [Default configuration template] # This template will be used when generating default configurations via admin # tool(e.g. web manager) # # System admin can modify this to change the default template if needed. #============================================================================= engine-container.command-option=-Xmx256m -XX:MaxPermSize=128m
인스톨러 기본 설정에도 JEUSMain.xml의 command-option에 MaxPermSize설정을 128m로 추가하였다.
JEUSContext를 생성할 때 COS Naming Server에 바로 연결할 수 있는 기능 추가
기존에는 InitialContext를 생성하여 JEUS JNDI 서버에 연결한 후, lookup 단계에서 COS
Naming Server에 연결하는 방식만을 지원하였다. 사용상의 편의를 위해서 이 방법 이외에
InitialContext를 생성할 때 Context.PROVIDER_URL
을 이용하여 바로 COS
Naming Server에 연결할 수 있는 기능을 추가하였다.
예) Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "jeus.jndi.JNSContextFactory"); env.put(Context.PROVIDER_URL, "iiop://localhost:9740"); InitialContext ctx = new InitialContext(env); Object obj = ctx.lookup("ejb/Hello"); HelloHome home = (HelloHome)PortableRemoteObject.narrow(obj, HelloHome.class); Hello helloRef = home.create();
AJP13 listener의 chunked 방식 기능 지원
AJP13 listener에서 Transfer-Encoding : Chunked Request를 처리하는 기능이 추가되었다.
HTTP listener의 ip 설정 기능 추가
한 대의 서버에 두 개 이상의 IP가 있는 경우 리스너별로 IP를 설정할 수 있는 기능이 추가되었다. BIO인 경우만 작동하며 설정하지 않은 경우 기본 IP가 설정된다.
<WEBMain.xml 예>
<http-listener> <listener-id>http1</listener-id> <ip>192.168.11.201</ip> <port>8088</port> <thread-pool> <min>10</min> <max>20</max> <step>1</step> </thread-pool> </http-listener>
자세한 설명은 “JEUS Web Container 안내서”의 “4.3.1. HTTP, TCP, HTTPS 리스너 설정” 부분을 참조한다.
JSP 컴파일 지연 기능 추가
JSP 파일이 컴파일되고 실제 적용되는 시간을 지연하는 기능을 추가하였다.
jeus.jsp.compile.delay 옵션이 추가되었으며, 시간을 millisecond단위로 설정할 수 있다.
<JEUSMain.xml 예>
<command-option>-Djeus.jsp.compile.delay=10000</command-option>
jspc로 pre-compile할 때 특정 directory를 pre-compile에서 제외하는 기능 추가
pre-compile할 때 jsp파일 뿐만 아니라 모든 directory를 검색해 directory, file을 list에 포함시켜 compile 과정에서 제외하는 옵션이 추가되었다.
<사용예>
jspc -e johan_servlet_engine1 -g MyGroup -c Examples -ep /image
자세한 설명은 “JEUS Reference Book”의 “4.7. jspc” 부분을 참조한다.
persistence store 추가
JEUS MQ에서는 journal log persistence store와 JDBC persistence store를 지원한다.
journal log persistence store는 이번 버전에서 추가된 기능으로 file에 정보를 저장하고 복구하게 된다. JDBC persistence store 보다 성능이 우수한 특징이 있다. 기본 디렉터리는 JEUS_HOME\logs\store 이다.
jdbc persistence store는 기존의 DB Storage 기능이 재구현 되었으며 기존 설정은 Deprecated 되었다.
persistence store가 전체적으로 재구현 되면서 Transaction 내부 동작도 함께 재구현되었다.
자세한 설명은 “JEUS MQ 안내서”의 “Appendix A. 저널 스토어 추가 속성들” 부분을 참조한다.
journal log persistence store는 다음과 같이 설정한다.
<JMSMain.xml 예>
<persistence-store> <journal/> </persistence-store>
jdbc persistence store는 다음 같이 설정한다.
<JMSMain.xml 예>
<persistence-store> <jdbc> <data-source>datasource1</data-source> </jdbc> </persistence-store>
jmsadmin console tool에 durable명령 옵션 및 XA 관련 명령어 추가
jmsadmin console tool의 durable명령어에 옵션이 추가되었고 XA 관련 명령어가 추가되었다.
durable subscription들에 쌓여 있는 모든 메시지를 삭제할 수 있는 옵션 추가(durable -ra)
사용법 : durable durable_name -ra
특정 durable subscription을 unsubscribe할 수 있는 옵션 추가(durable -u)
사용법 : durable durable_name -u
pending transaction 목록을 확인하는 명령어 추가(ptall)
사용법 : ptall
johan_container1>ptall ====================== PENDING TRANSACTIONS ====================== --------+------------+------------+---------------------------------------- ID |TYPE |NAME |VALUE --------+------------+------------+---------------------------------------- 1024|PRODUCTION |MESSSAGE ID |ID:0:2:1:1[24] | |DESTINATION |ExamplesQueue --------+------------+------------+----------------------------------------
pending transaction을 강제로 commit, rollback할 수 있는 명령어 추가(commit, rollback)
사용법 : commit id, rollback id
johan_container1>commit 1024 1024 is commited. johan_container1>rollback 1024 1024 is rolled back.
자세한 설명은 “JEUS Reference Book”의 “4.3. jmsadmin” 부분을 참조한다.
action-on-connection-leak 설정 추가
기존의 container별로 동작하는 invocation manager의 기능을 data source별로도 설정할 수 있도록 하였다. 아무런 설정을 하지 않았을 경우에는 엔진 컨네이너의 invocation-manager의 동작을 따르지만 그렇지 않을 경우에는 datasource의 설정값을 따른다.
<database> <action-on-connection-leak>Warning</action-on-connection-leak> </database>
위와 같이 설정하며, NoAction, Warning, AutoClose 로 설정할 수 있다.
자세한 설명은 “JEUS Server 안내서”의 “8.3.2. 기본 설정” 부분을 참조한다.
check-query-timeout 설정 추가
기본적으로 check query를 할 때 stmt-query-timeout 값에 따라 timeout이 동작하도록 되어 있는데, Fix#4에서부터 stmt-query-timeout이 0으로 바뀌었으므로, check query를 할 때 timeout을 위한 적절한 설정이 필요하게 되었다. 이를 위해 check-query-timeout이라는 기능이 추가되었다.
<data-source> <database> <connection-pool> <check-query-timeout>15000</check-query-timeout> </connection-pool> </database> </data-source>
위와 같이 설정하며, 단위는 milisecond 이다. 물론 check query 가 설정되어 있을 때만 의미가 있다.
자세한 설명은 “JEUS Server 안내서”의 절 8.3.4. “커넥션 점검(Connection Validation or Check Query)” 부분을 참조한다.
destroy-policy-on-check-query , check-query-retrial-count 설정 추가
check-query가 실패했을 경우, 해당 커넥션이 속한 풀에 있는 커넥션들을 어떻게 처리할지에 대한 정책을 설정하는 기능이 추가되었다. check-query가 실패했을 경우 실패한 커넥션만 버리는 것이 기본 정책(FailedConnectionOnly)이며, 모든 커넥션을 버리는 정책(AllConnections)을 선택할 수 있다. 만약 정책이 AllConnections라면, check-query가 실패했을 때 바로 버리는 것이 아니라 check-query를 한 번 더 수행한 결과에 따라 모든 커넥션을 버릴지를 결정한다. 이와 같은 상황에서 check-query를 더 수행하고 싶다면 check-query-retrial-count 설정을 통해 check-query를 더 수행하도록 할 수 있다.
<connection-pool> <check-query>select 1 from dual</check-query> <destroy-policy-on-check-query>AllConnections</destroy-policy-on-check-query> <check-query-retrial-count>3</check-query-retrial-count> </connection-pool>
자세한 설명은 “JEUS Server 안내서”의 절 8.3.4. “커넥션 점검(Connection Validation or Check Query)” 부분을 참조한다.
세션 서버에서 getting session failed. key is null과 같은 로그가 발생했을 때 원인 분석 기능 추가
세션 서버에서 [SESSION-2013]<ServiceHandler-28470> getting session failed. key is null와 같은 로그는 세션 요청 패킷에 세션의 key 값이 없거나 key 값의 길이가 0일 경우(empty string) 발생한다. 이때 어느 부분에서 문제가 발생했는지 확인할 수 있는 기능을 추가하였다.
<WEBMain.xml 예>
<web-container>
...
<logging>
<access-log>
<format>
[%{yyyy.MM.ddHH:mm:ss}t] %a %m %U%q %s %Dms %{JSESSIONID}c %S
</format>
</access-log>
</logging>
...
</web-container>
이와 같이 설정하여 access log에 %{JSESSIONID}c 부분의 값으로 판별이 가능한데, "-" 와 같이 나오면 JSESSIONID의 값이 없는 것이고, "" 와 같이 나오면 브라우저에서 empty string을 보낸 경우이다.
autodeploy directory에 있는 application들을 alphabet 순서로 deploy하는 기능 추가
deploy 우선순위는 "숫자 > 기호 > 영문 > 한글" 순서 이며 영문의 경우 대소문자의 구분은 하지 않는다.
appcompiler에 -deloldgen 옵션 추가
JEUS 4.x, JEUS 5에서 Stub, Skel, Impl Class의 이름을 생성하던 방식과 JEUS 6에서 생성하는 방식이 다르다. 따라서 이전 버전에서 appcompiler를 수행하여 Stub, Skel이 남아 있을 경우 JEUS 6에서 appcompiler를 수행하면 이를 삭제하지 않고 다른 이름으로 생성되기 때문에 deploy를 수행할 경우 fail이 발생하게 된다. 이런 문제를 피하기 위해서 -deloldgen 옵션이 추가되었다. 이 옵션을 사용하면 이전 버전의 Stub, Skel, Impl를 삭제한다.
appcompiler에 -q 옵션 추가
여러 모듈을 포함한 EAR application을 appcompiler로 compile을 수행할 때, 특정 web 모듈 compile이 실패할 경우, 다음 web 모듈을 compile할지 여부를 결정하는 옵션(-q)을 추가하였다. -q 옵션이 없을 경우, compile error가 발생하여도 다음 모듈 compile을 수행하도록 한다. 참고로 EAR 내의 EJB 모듈의 compile이 실패할 경우는 항상 종료한다.
jeusadmin의 dsconinfo 명령어에 -t 옵션(스레드의 이름을 볼 수 있는 기능) 추가
JDBC 커넥션을 사용중인 스레드의 이름을 볼 수 있는 기능을 추가하였다. jeusadmin의 dsconinfo 명령을 -t 옵션과 함께 사용할 경우에 thread name 컬럼이 나오게 된다. 이때 커넥션이 active 상태이면 가장 최근에 getConnection한 스레드의 이름을 보여준다.
johan_container1>dsconinfo -t datasource1 =============================================================================== Connection information list for the engine container[johan_container1] ------------------------------------------------------------------------------- | id | state | state-time(s) | use-count | type | thread name | ------------------------------------------------------------------------------- | datasource1-1 | active | 5.873 | 0 | pooled | http1-w11 | | datasource1-2 | idle | 37.158 | 0 | pooled | | ------------------------------------------------------------------------------- ===============================================================================
자세한 설명은 “JEUS Reference Book”의 “4.2.7. DB Connection Pool 관련 명령어” 부분을 참조한다.
jeusadmin의 dsinfo 명령어 반복기능 향상
jeusadmin의 dsinfo 명령을 반복하여 모니터링 하고자 할 때, -i 옵션만 사용하면 무한히 출력하게 하고, 이때 <Enter> 키를 2번 반복하면 멈출 수 있도록 하였다. 만약 기존과 같이 -i 옵션이 -k 옵션과 함께 사용할 경우는 무조건 지정된 횟수만큼 반복한다.
ejbddinit 스크립트 추가
EJB를 작성할 때 ejb-jar.xml에 대응하는 jeus-ejb-dd.xml 파일을 만들어 주는 기능을 추가하였다. 이는 JAR 파일로 묶인 module 및 exploded 형태로 존재하는 module에 대해서 사용이 가능하다. 자세한 사용법은 다음과 같으며 이 스크립트를 사용한 후 목적에 따라서 수정이 필요한 경우도 있다.
ejbddinit sample.jar -> 해당 module file안에 포함된 ejb-jar.xml 을 읽어와서 사용하며 sample.jar.new 라는 이름의 파일을 동일한 디렉터리에 생성한다. ejbddinit sample_dir -> exploed 형태로 존재하는 module은 해당 디렉터리 이름을 그대로 사용하면 된다. 단 META-INF 디렉터리에 ejb-jar.xml 파일이 존재해야 하며 jeus-ejb-dd.xml 파일이 ejb-jar.xml 과 동일한 디렉터리에 생성된다.
upgradetool 스크립트 추가
JEUS 4.x에서 사용하던 환경을 JEUS 6로 변환하는 작업을 도와주는 upgradetool 스크립트가 추가되었다. 이 스크립트는 JEUS 4.x에서 사용하던 서버 설정 파일, 모듈 파일들을 JEUS 6 에서 사용할 수 있는 형태로 변환하는 작업을 실행하며 사용자는 스크립트 실행 후 그 결과를 검토하고 수정할 수 있다.
close되지 않은 JDBC connection을 강제 반환하는 기능 추가
WebAdmin을 통해서 close 되지 않은 active상태의 JDBC 커넥션들을 선택적으로 반환시킬 수 있는 기능이 추가되었다. 단, 다음과 같은 제약 사항이 있으므로 주의한다.
글로벌 트랜잭션이 진행중인 커넥션은 반환되지 않는다. 서버 로그 상에는 SQLException이 출력될 수 있다.
로컬 트랜잭션이 진행중이거나 SQL 작업이 진행 중인 커넥션은 예상치 못한 오류가 발생할 수 있으므로 강제로 반환할 경우에 유의해야 한다.
https를 통하여 WebAdmin에 접속할 수 있는 기능추가
클라이언트와 서버 사이에 전송되는 데이터의 보안을 위해서 SSL을 이용해서 접근할 수 있는 기능이 추가되었다. 다음의 사항을 참고한다.
SSL을 이용해서 WebAdmin에 접속하기 위해서는 인증서를 발급받아야 한다. 인증서 발급에 관한 자세한 사항은“JEUS Web Container 안내서”의 “4.6. 보안(SSL) 리스너 사용” 부분을 참조한다.
접속방법 : JEUS매니저 > 설정 > WebAdmin에서 SSL을 Enabled > SSL port 설정 > JEUS 재부팅 > 지정한 port로 접속한다(예 : https://ip:port/webadmin).
web module의 context-path를 확인할 수 있는 기능추가
deploy할 때 설정한 web module의 context-path를 확인할 수 있는 기능을 추가하였다.
엔진 컨테이너 > 애플리케이션 모듈 > deploy 된 module 선택 > 통계 > Context Path
WebToB를 모니터링할 수 있는 기능추가
WebtoB Listener에 등록된 WebtoB의 wsracd Port 를 통해 WebAdmin에서 WebtoB의 상태를 모니터링할 수 있는 기능을 추가하였다. 단, WebtoB 4.1 SP2 Fix#0 이상 버전만 모니터링 가능하다.
노드 트리 > JEUS 모니터링 > WebtoB 모니터링
SSL 관련 password 설정값을 암호화할 수 있는 기능 추가
기존에는 ssl 관련(keystore, truststore) password를 평문으로만 입력이 가능했으나, encryption tool을 통해 암호화된 값을 사용할 수 있도록 하였다.
> encryption aes jeus [aes] : [jeus] --> [encode:kM0NkUWIVvNDcwCfBUuZWQ==] [aes] : [kM0NkUWIVvNDcwCfBUuZWQ==] --> [decode:jeus]
<command-option> -Djeus.ssl.keystore.password={aes}kM0NkUWIVvNDcwCfBUuZWQ== -Djeus.ssl.truststore.password={aes}kM0NkUWIVvNDcwCfBUuZWQ== </command-option>
WS-Trust 구현 방식에서 From Java 방식의 추가
WS-Trust를 위한 Server Side WebService의 구성방식에 'From WSDL' 방식만 지원했었으나 'From Java' 방식이 추가 되었다.
EJB를 디플로이할 때 발생하는 메시지의 Log Level 변경
EJB 디플로이 과정에서 generating... 으로 시작하는 메시지들이 반복적으로 출력되는데 이런 메시지들의 log level을 FINE 이상으로 조정하였다.
클라이언트를 실행하는 JDK의 버전이 Server의 JDK 버전보다 이전 버전인 경우에도 EJB 호출을 할 수 있도록 변경
JEUS 6.0 Fix#4 까지는 클라이언트의 JDK가 Server의 JDK보다 이전 버전일 경우에는 stub, skeleton이 호환되지 않아서 EJB 호출을 할 수 없었다. JEUS6.0 Fix#5 부터는 stub, skeleton을 생성할 때 하위 버전의 JDK에서도 EJB를 호출할 수 있게 하였다. 이는 stub, skeleton을 생성하는 Java class 버전를 지정할 수 있게하여 해결되었으며 다음의 옵션으로 지정이 가능하다. 별도의 설정이 없을 경우 JDK 1.4를 기준으로 stub, skeleton을 생성한다.
jeus.ejb.compiler.class.version = 1.1/1.2/1.3/1.4/1.5/5
ejb-jar.xml 파일에 resource-ref, resource-env-ref를 사용하고 jeus-ejb-dd.xml에서 이와 관련된 설정을 생략할 경우 dd exception을 발생시키도록 변경
ejb-jar.xml 파일에서는 resource-ref, resource-env-ref 태그를 이용하여 resource를 설정할 수 있다. jeus-ejb-dd.xml에서는 이에 대응하는 태그를 이용하여 resource설정을 해야 한다. 이때 jeus-ejb-dd.xml 파일에서 해당 설정을 생략할 경우 기존에는 NullPointException이 발생했으나, dd xml flle과 관련된 exception을 출력하도록 변경하였다.
로그 포맷 :
EJBDescriptorValidationException("cannot find the export name for " +
<reference-name> + " of " + <ejb-name> + " bean in jeus-ejb-dd.xml")
COS Naming Server를 Manager JVM 안에서 작동하도록 변경
기존에는 COS Naming Server가 별도의 JVM으로 동작하였지만, 이것을 JEUS Manager JVM 안에서 동작하도록 변경하였다.
Invocation manager의 기본값 변경
Invocation manager의 기본값을 NoAction에서 Warning으로 변경하였다. 따라서 리소스가 반환되지 않는 경우에 항상 로그가 출력된다.
<enable-interop><use-OTS>를 더 이상 사용하지 않도록 수정
interop를 사용할 경우 OTS를 사용하기 위해서 <use-OTS>를 true 로 지정해야 했지만, 이것을 설정하지 않아도 OTS를 사용할 수 있게 수정하였다. <use-OTS>에 true/false 어느것을 지정해도 기존의 true인 경우로 동작한다.
Tranasaction Manager 설정 중 <recovery-log-file> 설정을 더 이상 사용하지 않도록 수정
이 태그는 transaction 관련 로그 중 jeus.transaction.recovery 관련 로그만 별도로 파일에 기록할 수 있도록 하는 설정이지만, <system-logging>의 <file-handler>설정을 이용해서 대체가 가능하다. 따라서 <recovery-log-file> 설정을 추가하더라도 더 이상 작동하지 않도록 수정하였다. 사용자는 이 설정을 할 경우 로그 메시지에서 다음을 볼 수 있다.
[2008.11.06 13:56:25][2][b189] [exia-10] <recovery-log-file> is deprecated, so it will be ignored. You can use <system-logging> with file-handler instead of <recovery-log-file> similarly if you would like to use same function
타 JEUS에서 생성한 session ID가 왔을때 stack trace 대신 로그메시지 출력으로 변경
로컬 세션 서버를 사용할 때 다른 JEUS에서 생성한 session ID가 들어 왔을 경우 기존에는 stack Trace 메시지를 보여줬으나 이를 간단한 로그 메시지 출력으로 변경하였다,
세션 서버에서 passivation 기능을 할 때 사용하는 sessiondb 파일 위치 변경
중앙식 세션 서버나 분산식 세션 서버에서 세션을 파일로 내리는 passivation 기능을 할 때 생성되는 파일의 위치를 변경하였다.
<shared> true일 경우
로컬 세션의 경우 JEUS_HOME\logs\sessiondb\<engine-name>_1 JEUS_HOME\logs\sessiondb\<engine-name>_2 백업 세션의 경우 JEUS_HOME\logs\sessiondb\<engine-name>_backup_1 JEUS_HOME\logs\sessiondb\<engine-name>_backup_2
<shared> false 일 경우
로컬 세션의 경우 JEUS_HOME\logs\sessiondb\<context-name>_<context-path>_1 JEUS_HOME\logs\sessiondb\<context-name>_<context-path>_2 백업 세션의 경우 JEUS_HOME\logs\sessiondb\<context-name>_<context-path>_backup_1 JEUS_HOME\logs\sessiondb\<context-name>_<context-path>_backup_2
자세한 설명은 “JEUS Server 안내서”의 “제10장 세션 서버” 부분을 참조한다.
reboot 후에 application을 deploy할 때 generated directory를 삭제하지 않도록 변경
reboot 후 deploy할 때 application file(archived)이나 directory(exploded)의 시간이 변경되지 않은 경우, 기존 generated directory를 유지 함으로서 이전에 compile된 JSP 결과가 유지되도록 수정하였다.
deploy할 때 application의 날짜가 변경되었거나, 명시적으로 undeploy/redeploy를 수행하는 경우에는 generated directory가 삭제된다.
jeusadmin의 dsinfo 명령을 사용할 때 생성되지 않은 pool 정보도 보여지도록 변경
jeusadmin에서 dsinfo 명령을 사용하면 JEUSMain.xml에 설정된 모든 커넥션 풀에 대한 정보를 항상 보여주도록 수정하였다. 기존과 같이 생성된 커넥션 풀의 정보만 보기 위해서는 -active 옵션을 사용한다.
jeusadmin의 jeusexit 명령이 down과 jeusexit를 모두 수행하도록 변경
JEUS가 down 상태가 아니라면, jeusadmin의 jeusexit 명령을 수행할 때 down(엔진컨테이너 종료)을 수행한 후 jeusexit(JEUS Manager종료)를 수행하도록 수정하였다.
WebAdmin 로그인 페이지 및 전체 레이아웃 변경
로그인 페이지와 메인 페이지의 Node cluster 및 Node Tree 프레임 타이틀 바 디자인이 새로운 이미지로 변경되었으며, 엔진을 비롯한 각 모듈, 기타 아이콘들을 좀 더 쉽게 식별할 수 있도록 변경하였다.
Tibero DataSource 설정사항 변경
DataSource 설정의 vendor 항목에서 Tibero가 제일 위에 자리하도록 변경하였고, Tibero DataSource를 설정할 때 default port도 8629로 변경하였다.
새로 고침을 Contextmenu를 통해서 하도록 변경
기존의 새로고침 버튼을 삭제하고, Refresh 하고자 하는 영역에서 오른쪽 마우스를 클릭하여 나타나는 Contextmenu에서 새로고침을 클릭하는 방식으로 변경하였다.
MBean 모니터링 트리 구조 변경
기존 MBean 트리의 노드 이름 형태에서 jeustype이 길어질 경우, 노드 이름 또한 길어지는 문제점을 개선하여 비슷한 특성을 갖는 노드를 하나의 노드로 그룹화하였다.
애플리케이션 Deploy 페이지 변경
애플리케이션을 Deploy할 때 선택 사항 1,2 로 구분되어 있던 화면이 하나의 페이지로 통합되어 모듈 리스트가 테이블 형태로 보여지며, 각 모듈에 대한 선택 사항을 아이콘으로 표현하는 방식으로 변경하였다.
JMS persistence store 추가로 인한 WebAdmin의 JMS 엔진 페이지 변경
퍼지스턴스 스토어 페이지에서 journal과 jdbc persistence store를 선택하여 설정할 수 있도록 변경하였다.
encryption tool을 이용해서 생성되는 암호값의 Format 변경
보안 강화를 위해서 encryption tool을 이용해서 생성되는 암호값의 Format이 변경되었다. 따라서 하위의 Version에서 Upgrade를 할 경우, 암호화된 값의 Converting 작업이 필요하다.
JEUS6 Fix#5부터는 Converting 작업의 편의성을 위해서 encryption tool을 이용하여 Converting을 할 수 있는 Option(-convert)을 제공한다.
사용법) encryption -convert <encryption algorithm> <encrypted text> # encryption -convert des pfuekB0Zeso3TtZiAfEGRg== [2008.11.10 12:59:00][2][b189] [client-10] Loading secret keys from "C:\TmaxSoft\jeus6\config\johan\security\security.key" Decryption succeed. [before:pfuekB0Zeso3TtZiAfEGRg==] --> [after:LNymrHi8yOZ2gpMNKb/h/A==]