Real Alternative DBMS ALTIBASE, Since 1999 ALTIBASE & JEUS 연동가이드 ALTIBASE 6 2014. 10 Copyright c 2000~2010 ALTIBASE Corporation. All Rights Reserved.
Document Control Change Record Date Author Change Reference 2010-01-28 swj0701 Created 2014-10-01 Sungmin01.kim modify Reviews Date Name (Position) Distribution Name Location ALTIBASE & JEUS 연동가이드 2 page of 33
목차 개요... 4 JEUS 설치... 5 기본설치 ( 콘솔모드 )... 5 환경변수설정... 7 JEUS 디렉토리... 8 JEUS 기동확인... 8 설치시유의사항... 11 기본설치 (GUI 모드 )... 오류! 책갈피가정의되어있지않습니다. 환경변수설정... 오류! 책갈피가정의되어있지않습니다. JEUS 기동확인... 오류! 책갈피가정의되어있지않습니다. ALTIBASE 와 JEUS 의연동... 14 JDBC 드라이버... 14 JDBC 드라이버설정... 14 커넥션풀링... 14 데이터소스... 15 데이터소스구성... 15 데이터소스설정... 17 데이터소스설정시유의사항... 23 체크쿼리... 24 커넥션풀모니터링... 25 샘플예제... 28 Pool 사용샘플예제... 28 getconnection 사용샘플예제... 29 실행방법... 30 ALTIBASE & JEUS 연동가이드 3 page of 33
개요 본문서는 ALTIBASE 6.3.1 과 JEUS6.0 을연동하여운영하기위한가이드문서로써 JEUS6.0 을설치하는방법및환경변수설정에대해서가이드를제시한후, ALTIBASE 와연동하는방법에대해서기술하도록한다. ALTIBASE & JEUS 연동가이드 4 page of 33
JEUS 설치 JEUS 를설치하는방법에는콘솔모드를이용한설치방법과 GUI 모드에서설치하는두가지의방법이있으며, 본절에서는 Unix/Linux 콘솔모드에서 JEUS 를설치하는과정과 Windows GUI 모드에서 JEUS 를설치하는과정에대해서알아본다. JEUS6.0 은 JDK 5.0 Update 4(1.5.0_04) 이상이설치되어있어야하며, 300M 이상의하드디스크여유공간을필요로한다. 기본설치 ( 콘솔모드 ) 다음의하위절은텍스트기반쉘에서실행하는방법을설명한다. 1. 티맥스소프트홈페이지에서 Unix/Linux 버전의 JEUS 패키지를다운로드받는다. 2. JEUS 를설치할서버에업로드한후, jeus60_unix_generic_ko.bin 파일이있는곳으로이동한다. 3. 다른곳에있는설치콘솔인스톨러가실행이가능하도록 jeus60_unix_generic_ko.bin 파일의실행권한을준다 4. chmod +x jjeus60_unix_generic_ko.bin) 5. 콘솔로부터 jeus60_unix_generic_ko.bin 를실행시킨다 [tmax@dev ~]$./jeus60_unix_generic_ko.bin Preparing to install... 6. 해당파일을실행시키면나타나는 License 부분은확인하여동의한다. PRESS <ENTER> TO CONTINUE: DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? (Y/N): Y 7. 운영체제의종류를선택한다. Choose Platform --------------- Choose current system ( platform-architecture ) 1)HP-UX PA-RISC 2)HP-UX ITANIUM 3)Solaris Ultra-Sparc 4)Solaris x86 5)Solaris x64 6)AIX 5.x PowerPC 7)Linux ITANIUM 8)Linux x86 9)Linux x64 Quit) Quit Installer ALTIBASE & JEUS 연동가이드 5 page of 33
Choose Current System (DEFAULT: 9): 8. 설치디렉토리를선택한다. 기본값으로사용하려면 < 엔터 > 를누르고, 디렉토리변경을원하면설치경로를입력한다. Choose Install Folder --------------------- Where would you like to install? Default Install Folder: $HOME/jeus6 ENTER AN ABSOLUTE PATH, OR PRESS <ENTER> TO ACCEPT THE DEFAULT : /app/was/jeus6 9. JEUS 를설치할타입을결정한다. Choose Install Set ------------------ Please choose the Install Set to be installed by this installer. ->1- Full Install 2- Typical ENTER THE NUMBER FOR THE INSTALL SET, OR PRESS <ENTER> TO ACCEPT THE DEFAULT : 10. JDK의위치를입력한다. Choose JDK Folder ----------------- Please Choose a Folder: Input User JDK Folder (DEFAULT: /usr/jdk1.6.0_15): 11. 패스워드를입력한다. Enter the Password for the administrator account. This password will be registered in JEUS as the first user. Input Password:: Confirm Password:: ALTIBASE & JEUS 연동가이드 6 page of 33
12. 패스워드를입력하면 JEUS 를설치할기본정보에대해서요약해서보여준다. < 엔터 > 를치면설치가완료된다. Pre-Installation Summary ------------------------ Please Review the Following Before Continuing: Product Name: JEUS6.0 Install Folder: /app/was/jeus6 Install Set Full Install Disk Space Information (for Installation Target): Required: 308,147,759 bytes Available: 45,215,862,784 bytes PRESS <ENTER> TO CONTINUE: 환경변수설정 JEUS 는다음과같은시스템환경변수들을요구한다. 이변수들은설치시적용되며환경변수 PATH 는환경변수파일인.profile,.cshrc 등에기록하고나머지환경변수는 $JEUS_HOME /bin/jeus.properties 파일에설정된다. * 기본적으로설치시기본쉘에자동으로추가된다. 환경변수의미설정값 다음을포함하고있어야한다. PATH 시스템경로 $JEUS_HOME/bin $JEUS_HOME/webserver/bin $JEUS_HOME/lib/system JEUS_HOME JEUS 설치디렉토리 $HOME/jeus6/ JEUS_BASSPORT JEUS 가사용할네트워크포트가운데가장기본이 9763 ALTIBASE & JEUS 연동가이드 7 page of 33
되는포트 ( 기본 : 9763) JEUS_LIBPATH JEUS 라이브러리파일 $JEUS_HOME/lib/system JAVA_HOME JAVA2 설치디렉토리 $JAVA_HOME JEUS 디렉토리 다음의항목들은설치된 JEUS의홈디렉토리의하위디렉토리들이다. $ ~ /jeus6] ls bin docs logs ThirdPartyLicenses.txt webserver config lib readme.txt UninstallerData workspace derby license samples webhome Bin: JEUS 실행파일이포함된디렉토리 Config: XML 디스크립터파일, 노드설정파일, 보안설정파일이포함된디렉토리 Derby: 예제실행및테스트를위해사용하는데이터베이스 Docs: JEUS 매뉴얼과 API 파일이포함된폴더 Lib: JEUS 에서사용하는라이브러리파일의폴더. JEUS 클래스라이브러리아카이브가 jeus.jar 에포함되어있다. License: JEUS 라이선스파일의폴더 Logs: 로그파일의폴더 Samples: 예제가있는폴더 Sessiondb: JEUS 에서 session server 사용시생성되는폴더. 설치과정에서생성되지않고 JEUS 를 1 회이상부팅한후에생성된다. UninstallerData: Unistall 을위한폴더 Webhome: EJB, Servlet, JSP 어플리케이션의배치폴더 Webserver: Servlet Engine 리스너인 JEUS 웹서버폴더 Workspace: JEUS 가사용하는임시폴더. Sessiondb 폴더와마찬가지로 JEUS 1 회이상부팅후에생성된다. JEUS 기동확인 JEUS 설치가정상적으로완료되었음을확인하기위해서다음단계들을수행한다. 콘솔프롬프트에 jeus 를입력한다. [tmax@dev ~]$ jeus *************************************************************** ALTIBASE & JEUS 연동가이드 8 page of 33
- JEUS Home : /app/was/jeus6 - JEUS Base Port : 9736 - Java Vendor : Sun - Added Java Option : ***************************************************************... [2014.10.22 11:01:21][0][b396] [dev-1] [MGR-0248] JEUS Manager is READY 1. JEUS Manager is READY 라는메시지가출력이되면 JEUS Manager 가정상적으로로딩되어 JEUS 가대기상태임을나타낸다. 2. 다른콘솔창에서 jeusadmin <node name> 을실행한다. 여기서, <node name> 은호스트머신명이다. 로그인시의패스워드는 JEUS 설치할때지정을해준패스워드로접속하면된다. [tmax@dev jeus6]$ jeusadmin dev Login name>administrator Password> JEUS 6.0 (Fix#9) administration tool dev> 3. jeusadmin 툴에로그인을한후에 boot 와 down 같은명령으로 JEUS 서버를제어할수있다. dev>boot dev boot done dev_container1 dev> [2014.10.27 14:36:15][2][b396] [dev-18] [MGR-0205] command : boot() [2014.10.27 14:36:15][2][b396] [dev-18] [MGR-0567] trying to start engine container[dev_container1] [2014.10.27 14:36:15][2][b396] [dev-18] [MGR-0128] start engine container[dev_container1] with command [2014.10.27 14:36:36][2][b396] [container1-83] [WEB-3384] WebtoB connection[unix(hth-0:9900:139)] established [2014.10.27 14:36:36][2][b396] [container1-84] [WEB-3384] WebtoB connection[unix(hth-0:9900:138)] established [2014.10.27 14:36:36][2][b396] [container1-85] [WEB-3384] WebtoB ALTIBASE & JEUS 연동가이드 9 page of 33
connection[unix(hth-0:9900:140)] established [2014.10.27 14:36:36][2][b396] [container1-87] [WEB-3384] WebtoB connection[unix(hth-0:9900:135)] established [2014.10.27 14:36:36][2][b396] [container1-86] [WEB-3384] WebtoB connection[unix(hth-0:9900:141)] established [2014.10.27 14:36:36][0][b396] [dev-67] [MGR-0303] engine container[dev_container1] initialization successfully done [pid : 1891] connect successful 메시지가출력이되면정상적으로 JEUS 가부팅된것이다. dev>down Do you really want to shutdown the node [dev]? (y : n):>y The JEUS node [dev] is down. dev> [2014.10.27 14:38:17][0][b396] [dev-18] [MGR-0207] command : down() [2014.10.27 14:38:17][2][b396] [dev-18] [MGR-0261] shutting down the jeus server... [2014.10.27 14:38:17][2][b396] [dev-18] [MGR-0566] attempt to shutdown all running container [2014.10.27 14:38:17][2][b396] [dev-18] [MGR-0568] trying to shutdown container dev_container1 [2014.10.27 14:38:17][2][b396] [container1-18] [MGR-0103] engine container[dev_container1] is STOPPING [2014.10.27 14:38:17][2][b396] [container1-18] [JMXR-0102] JMXConnector is shutting down [2014.10.27 14:38:17][1][b396] [container1-18] [Network-1023] OnePortServer virtual listener /JEUSMP_dev_container1 unregistered [2014.10.27 14:38:17][1][b396] [container1-11] [Network-1009] OnePortServer unknown virtual listener(/jeusmp_dev_container1). socket discarded. [2014.10.27 14:38:17][2][b396] [container1-18] [MGR-0097] Container security manager uninstalled [2014.10.27 14:38:17][2][b396] [container1-18] [JNDI.Local-0012] Successfully stopped. (ID 127.0.0.1:9736(JNSServer)) [2014.10.27 14:38:17][2][b396] [container1-18] [MGR-0103] engine container[dev_container1] is SHUTDOWN [2014.10.27 14:38:17][0][b396] [container1-1] [MGR-0099] container dev_container1 shutdown [2014.10.27 14:38:17][0][b396] [container1-9] [MGR-0565] JVM process is shutting down [2014.10.27 14:38:17][0][b396] [container1-9] [MGR-0566] JVM process will be terminated [2014.10.27 14:38:18][0][b396] [dev-18] [MGR-0141] engine container[dev_container1] ALTIBASE & JEUS 연동가이드 10 page of 33
successfully stopped [2014.10.27 14:38:18][0][b396] [dev-18] [MGR-0558] all containers in the node shutdown successfully [2014.10.27 14:38:18][0][b396] [dev-18] [MGR-0262] all containers successfully shutdowned all containers successfully shutdowned 메시지가출력이되면 JEUS 가정상적으로 Down 된것이다. 4. JEUS 기동후, 프로세스확인 [tmax@dev ~]$ ps -ef grep jeus tmax 1729 1705 0 14:35 pts/0 00:00:00 /bin/sh /app/was/jeus6/bin/jeus tmax 1735 1729 8 14:35 pts/0 00:00:23 /app/java/jdk1.6/bin/java - server -Xmx512m -Xbootclasspath/p:/app/was/jeus6/lib/system/extension.jar - classpath /app/was/jeus6/lib/system/bootstrap.jar - Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 - Djava.library.path=/app/was/jeus6/lib/system - Djava.endorsed.dirs=/app/was/jeus6/lib/endorsed - Djava.naming.factory.initial=jeus.jndi.JNSContextFactory - Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djava.net.preferIPv4Stack=true - Djava.util.logging.config.file=/app/was/jeus6/bin/logging.properties - Djava.util.logging.manager=jeus.util.logging.JeusLogManager - Djeus.home=/app/was/jeus6 -Djeus.log.home=/app/was/jeus6/logs - Djeus.baseport=9736 -Djeus.jvm.version=hotspot -Djeus.tm.checkReg=true - Djeus.tool.webadmin.locale.language=ko -Djeus.net.reuseAddress=true - Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net jeus.server.jeusbootstrapper tmax 2016 1799 0 14:40 pts/1 00:00:00 grep jeus [tmax@dev ~]$ 설치시유의사항 JEUS 를설치할때의유의사항에대해서설명한다. 1. 운영체제선택을잘못하면에러발생 JEUS 설치시운영체제를선택하는단계에서서버의특성에맞지않는운영체제를선택할경우정상적인설치가안된다. 예 ) Linux x64 인장비에서 Linux x86 을선택한경우 java.lang.unsatisfiedlinkerror: $HOME /jeus6/lib/system/librunner.so: $HOME /jeus6/lib/system/librunner.so: cannot open shared object file: No such file or directory (Possible cause: architecture word width mismatch) at java.lang.classloader$nativelibrary.load(native Method) at java.lang.classloader.loadlibrary0(classloader.java:1751) at java.lang.classloader.loadlibrary(classloader.java:1676) at java.lang.runtime.loadlibrary0(runtime.java:822) at java.lang.system.loadlibrary(system.java:993) ALTIBASE & JEUS 연동가이드 11 page of 33
at jeus.util.runner.<clinit>(runner.java:31) at jeus.server.jeusserver.main(jeusserver.java:916) at sun.reflect.nativemethodaccessorimpl.invoke0(native Method) at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) at java.lang.reflect.method.invoke(method.java:585) at jeus.server.bootstrapper.callmainmethod(bootstrapper.java:299) at jeus.server.bootstrapper.callmain(bootstrapper.java:371) at jeus.server.bootstrapper.main(bootstrapper.java:365) at jeus.server.jeusbootstrapper.main(jeusbootstrapper.java:8) 2. GLIBC 버전이낮은경우 서버의 GLIBC 버전이 2.4 보다하위버전일경우에설치시에러가발생한다. GBLIC 의버전은다음의명령어를통해서확인할수있다. OS 가리눅스인경우에해당되며, 윈도우계열이나유닉스계열에서는해당되지않는다. $~ ] rpm -qa grep glibc compat-glibc-2.3.4-2.26 compat-glibc-2.3.4-2.26 glibc-2.5-34 glibc-devel-2.5-34 compat-glibc-headers-2.3.4-2.26 glibc-common-2.5-34 glibc-headers-2.5-34 glibc-2.5-34 glibc-devel-2.5-34 예 ) GLIBC 버전이 2.3 인경우 java.lang.unsatisfiedlinkerror: $HOME/jeus6/lib/system/libRunner.so: /lib64/tls/libc.so.6: version `GLIBC_2.4' not found (required by $HOME/jeus6/lib/system/libRunner.so) at java.lang.classloader$nativelibrary.load(native Method) at java.lang.classloader.loadlibrary0(classloader.java:1751) at java.lang.classloader.loadlibrary(classloader.java:1676) at java.lang.runtime.loadlibrary0(runtime.java:822) at java.lang.system.loadlibrary(system.java:993) at jeus.util.runner.<clinit>(runner.java:31) ALTIBASE & JEUS 연동가이드 12 page of 33
at jeus.server.jeusserver.main(jeusserver.java:916) at sun.reflect.nativemethodaccessorimpl.invoke0(native Method) at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:39) at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:25) at java.lang.reflect.method.invoke(method.java:585) at jeus.server.bootstrapper.callmainmethod(bootstrapper.java:299) at jeus.server.bootstrapper.callmain(bootstrapper.java:371) at jeus.server.bootstrapper.main(bootstrapper.java:365) at jeus.server.jeusbootstrapper.main(jeusbootstrapper.java:8) ALTIBASE & JEUS 연동가이드 13 page of 33
ALTIBASE 와 JEUS 의연동 ALTIBASE 와 JEUS 를연동하여사용하기위한설정방법에대해서설명한다. JDBC 드라이버 JDBC 란자바응용프로그램에서데이터베이스에연결하여여러 SQL 을실행할수있도록제공하는표준인터페이스를말한다. 이러한 JDBC 드라이버는각데이터베이스벤더사가제공하고있으며, ALTIBASE 에서는 Altibase.jar 파일로제공하고있다. 이 JDBC 드라이버는 $ALTIBASE_HOME/lib 디렉토리안에존재한다. ALTIBASE 5 버전부터는 $ALTIBASE_HOME/lib 디렉토리에 Altibase.jar 와 Altibase5.jar 파일이존재하는데, Altibase.jar 는일반 ALTIBASE JDBC 드라이버파일이며, Altibase5.jar 는 ALTIBASE 5 버전과그이하의버전을함께사용하고싶을때사용하는파일이다. 따라서하나이상의 ALTIBASE 와연동하기를원한다면일반적으로 Altibase5.jar 파일을사용한다. JDBC 드라이버설정 ALTIBASE 와 JEUS 를연동하기위해서는 ALIBASE 에서제공하는 JDBC 드라이버 (Altibase.jar) 를 $JEUS_HOME/lib/datasource 디렉토리에위치시켜야한다. 커넥션풀링 커넥션풀링 (Connection Pooling) 은 DB 커넥션의캐쉬를위한하나의프레임워크이다. 커넥션풀이시작될때특정한수의물리적커넥션을만들며이는어플리케이션실행중에커넥션생성을위한오버헤드를줄여준다. 커넥션풀의이점은다음과같다. 1. 보다높은성능 DB 커넥션생성은처리과정이느리다. 커넥션풀안에서의모든실제커넥션들은미리만들어져어플리케이션의요청처리를위한준비가되어있다. 커넥션을더이상사용하지않을때에는그것을풀에반환시켜서커넥션중단의오버헤드를감소시킬수있다. 2. 연결관리 동시커넥션들의수를제어할수있다. 동시커넥션들의최대수를구성함으로써 DB 의동시커넥션을제한하는작업을효율적으로할수있다. ALTIBASE & JEUS 연동가이드 14 page of 33
데이터소스 하나의 javax.sql.datasource 는어플리케이션과커넥션풀사이의인터페이스이다. javax.sql.datasource 객체는 DB 커넥션들의팩토리로볼수있으며 java.sql.drivermanager 보다많은이점을제공한다. 아래는데이터소스들의 4 가지타입들을간략하게정리하였다. 1. 기본데이터소스 사용자들을위해커넥션을반환한다. 커넥션풀링이이뤄지지않기때문에커넥션풀형식에비해추가적인오버헤드가있을수있다. 2. 커넥션풀데이터소스 커넥션풀에저장된커넥션을얻어응용프로그램등에반환한다. JEUS 에서제공하는커넥션풀링기능을이용하므로 DB 에매번접속하여커넥션을가져오는방식보다오버헤드가덜하다. Autocommit 을 False 로하고사용할경우어플리케이션이직접로컬트랜잭션을컨트롤할수있다. 3. XA 데이터소스 분산 / 전역트랜잭션에이용되는커넥션을관리한다. 이데이터소스형식은 2PC(2 Phase Commit) 를이용할경우에만사용하도록한다. EJB 나 Servlet 에서트랜잭션을시작한후, XA 데이터소스로부터얻어진두개이상의커넥션을이용하여작업을시작하면자동적으로 2PC-protocol 이시작되며, 이커넥션은트랜잭션이끝난이후에는다시사용할수없다. XADataSource 를사용할경우에는각각의데이터소스에대해트랜잭션복구기능이지원된다. XA 데이터소스를사용한 DB 연동에대해서는 ALTIBASE 5.3.3 API 매뉴얼을참고하면된다. 4. 로컬 XA 데이터소스 커넥션풀데이터소스에서얻은커넥션을 Autocommit 을꺼서로컬트랜잭션이항상켜진상태로사용하고커밋이나롤백을트랜잭션매니저가처리해준다. 이때문에로컬트랜잭션을 XA 에참여하도록에뮬레이션할수있다. 참고로로컬 XA 데이터소스는 JDBC 드라이버가 XA 데이터소스를지원하지않더라도 XA 에는참여시킬필요가있을때사용할수있다. 로컬 XA 데이터소스는기능상의제약으로제대로복구가되지않을경우가생길수있으며, 하나의글로벌트랜잭션내에서최대하나의로컬 XA 데이터소스만참여할수있다. 데이터소스구성 Altibase 와 JEUS 를연동하기위해서 JEUSMain.xml 에데이터소스를설정할수있다. Javax.sql.DataSource 의속성들은각드라이버별로다르기때문에사용하기원하는드라이버의특성을파악하고그특성에맞게설정해야한다. 다음의 XML 태그들은 <resource><data-source> <database> XML 태그의하위태그로사용할수있다. 태그 설명 ALTIBASE & JEUS 연동가이드 15 page of 33
Vender DB 벤더의이름 (oracle, mssql, db2, sybase, tibero, others). ALTIBASE 는 others 로설정하도록한다. Export-name JNDI 에바인딩될이름. 이이름으로데이터소스객체가바인드된다. 사용자가임의로지정해주면된다. Data-source-class-name JDBC 드라이버별데이터소스클래스이름. ABConnectionPoolDataSource, BlackboxConnectionPoolDataSource 등의설정방법을결정한다. Data-source-type DataSource, ConnectionPoolDataSource, XADataSource, LocalXAData- Source 값중에하나. 사용하려는데이터소스타입에맞게선택한다. Data-source-name Database-name Service-name 데이터소스의이름. 드라이버벤더에의존적이며일반적으로 DataSourceClass-Name 값과동일하다. DB 의이름 ( 예 : mydb) Oracle inet 드라이버사용시만사용하며 Oracle Database 의 SID 값. ALTIBASE 와연동시에는사용안함. description 데이터소스를설명하는내용의텍스트. Network-protocol Password User Port-number Server -name Driver-type Property DB에연결할때사용되는프로토콜사용자의암호사용자이름 DB 리스너의포트번호 DB 가운용중인서버의 DNS 이름이나 IP주소 Oracle의경우드라이버의타입 (ex. thin, oci) JDBC 커스텀프로퍼티지정 BlackboxConnectionPoolDataSource 로설정할경우에이항목에 DriverClassName 과 URL, USER, PASSWORD 를지정해준다. Connection-pool 커넥션풀링에특화된내용을설정해준다. Auto-commit Action-on-connectionleak 커넥션에지정될 auto commit 값을지정한다. true, false 로지정한다. 로컬 XA 데이터소스나 XA 데이터소스의경우에는커넥션이트랜잭션에연동되어있지않을경우에만적용한다. 컴포넌트 ( 주로 Stateless 컴포넌트 - Servlet/JSP, Stateless 세션빈, MDB) 에서사용한 JDBC 커넥션에대한로깅이나반환액션을설정한다. 설정하지않았을경우기본동작은엔진컨테이너에설정한 invocation-manager-action 을따른다. ALTIBASE & JEUS 연동가이드 16 page of 33
데이터소스설정 ALTIBASE 와 JEUS 를연동하여사용하기위해데이터소스를설정하는방법에는콘솔모드에서직접 XML 파일을수정하는방법과 WebAdmin 을이용한 GUI 모드에서설정하는두가지의방법을제공한다. 데이터소스설정시에커넥션풀을구성하여관리하는방법에는 ABConnectionPoolDataSource 방법과 BlackboxConnectionPoolDataSource 방법두가지가있다. ABConnectionPoolDataSource 는 JEUS 가아니라 ALTIBASE 의 JDBC 드라이버에서커넥션풀을관리하는방식이고, BlackboxConnectionPoolDataSource 는 JEUS 에서커넥션풀을관리하는방식이다. 데이터소스를설정하는두가지방법을이용하여 ABConnectionPoolDataSource 방법과 BlackboxConnectionPoolDataSource 방법으로커넥션풀을구성해보도록한다. 1. BlackboxConnectionPoolDataSource 방법으로설정 - JEUSMain.xml 파일을직접수정하여설정 <jeus-system> <resource> 파일편집기를이용하여 JEUSMain.xml 파일을열고, <resource> ~ </resource> 의내용을추가하여준다. <data-source> <database> <vendor>others</vendor> <export-name>datasource1</export-name> <data-source-classname>jeus.jdbc.driver.blackbox.blackboxconnectionpooldatasource</data-source-classname> <data-source-type>connectionpooldatasource</data-source-type> <property> <name>driverclassname</name> <type>java.lang.string</type> <value>altibase.jdbc.driver.altibasedriver</value> </property> <property> <name>url</name> <type>java.lang.string</type> <value>jdbc:altibase://127.0.0.1:20300/mydb</value> </property> <property> ALTIBASE & JEUS 연동가이드 17 page of 33
<name>user</name> <type>java.lang.string</type> <value>sys</value> </property> <property> <name>password</name> <type>java.lang.string</type> <value>manager</value> </property> <connection-pool> <pooling> <min>2</min> <max>30</max> <step>1</step> <period>3600000</period> </pooling> </connection-pool> </database> </data-source> </resource> </jeus-system> - WebAdmin 을이용하여설정 WebAdmin 을이용하여 BlackboxConnectionPoolDataSource 방법으로커넥션풀을구성하는방법을알아보도록한다. WebAdmin 은 http://localhost:9744/webadmin 로접속할수있으며, 기본적으로 USER 는 Administrator 이고, 패스워드는설치시에설정한값이된다. 여기서 9744 라는값은 JEUS_BASSPORT + 8 을한값이다. WebAdmin 의 JEUS 매니저메뉴에서는원하는노드를체크하여부트, 다운, 종료시키는기능을제공하고있다. ALTIBASE & JEUS 연동가이드 18 page of 33
WebAdmin 으로해당노드를부팅시킨후에, ALTIBASE 와의연동을위해 JEUS 매니저리소스 JDBC 메뉴를클릭하여새로운데이터소스를생성한다. DBMS 벤더를 Others 로선택하고, 데이터소스를 BlackboxConnectionPoolDataSource 로선택한후에다음단계로넘어간다. 새 JDBC 데이터소스생성을할때, 각각의속성값을설정해주면된다. 기본적으로 DBMS 벤더명과데이터소스를선택하면다음과같이 Vender, Data Source Class Name, Data Source Type, Export Name 이설정되어있다. 해당속성값의변경이필요한경우만수정하여사용하고그외에는그냥사용하면된다. Database Name, Port Name, Server Name 속성값은설정하지말고, 밑에나오는 Property 항목에설정하고다음단계로넘어간다. (ABConnectionPoolDataSource 나 XADataSource 로선택하여구성할시에는 Property 항목이아닌 Database Name, Port Name, Server Name 에값을설정해주면된다.) ALTIBASE & JEUS 연동가이드 19 page of 33
값을설정하지않는다. Property 속성값을다음과같이설정해주면된다. DriverClassName=Altibase.jdbc.driver.AltibaseDriver URL= jdbc:altibase://server_ip:server_port/dbname USER=sys PASSWORD=manager Property 항목에아래의값을설정해주지않거나, Database Name, Port Name, Server Name 의값들중하나의값이라도설정이되면에러가발생한다. 커넥션풀의 Min/Max 값을설정해주면기본적인설정이끝나게된다. ALTIBASE & JEUS 연동가이드 20 page of 33
생성이끝이난뒤테스트및바인드를할수있으며바인드를해줘야해당설정이반영이된다. 2. ABConnectionPoolDataSource 방법으로설정 - JEUSMain.xml 파일을직접수정하여설정 <jeus-system> <resource> 파일편집기를이용하여 JEUSMain.xml 파일을열고, <resource> ~ </resource> 의내용을추가하여준다. <data-source> <database> <vendor>others</vendor> <export-name>datasource1</export-name> <data-source-class-ame>altibase.jdbc.driver.abconnectionpooldatasource</datasource-class-name> <data-source-type>connectionpooldatasource</data-source-type> <database-name>mydb</database-name> <port-number>20300</port-number> <server-name>127.0.0.1</server-name> <user>sys</user> <password>manager</password> ALTIBASE & JEUS 연동가이드 21 page of 33
<auto-commit>true</auto-commit> <property> <name>encoding</name> <type>java.lang.string</type> <value>ksc5601</value> </property> <property> <name>maxpoolsize</name> <type>java.lang.integer</type> <value>30</value> </property> <connection-pool> <pooling> <min>2</min> <max>30</max> <step>1</step> <period>3600000</period> </pooling> </connection-pool> </database> </data-source> </resource> </jeus-system> - WebAdmin 을사용하여설정 JEUS 에서제공하는 WebAdmin 을통해서 JEUS 의구동, 종료및데이터소스설정이가능하다. WebAdmin 을통해서설정한속성값들은 JEUSMain.xml 에저장이된다. 속성값의설정이전과이후의 JEUSMain.xml 파일을비교해보면 <resource> ~ </resource> 사이에 ALTIBASE 의속성값이수정되어있는것을확인할수있다. ALTIBASE & JEUS 연동가이드 22 page of 33
새로운 JDBC 데이터소스를생성하기위해서 새 JDBC 데이터소스생성 을클릭한다. DBMS 를 Other 로선택한후에 Other DataSource 를선택한다. Data Source Class Name ~ Password 항목들을설정해준다. Data Source Class Name 를설정할때는 ABConnectionPoolDataSource 로입력하면안되고, JDBC 드라이버의데이터소스클래스의이름. 패키지명을포함하는완전한형태로입력해야한다 (Altibase.jdbc.dirver.ABConnectionPoolDataSource) 연결풀설정및바인드, 테스트는 BlackboxConnectionPoolDataSource 의설정을참고하면된다. 데이터소스설정시유의사항 1. ABConnectionPoolDataSource 사용시유의사항 - Data-Source-Class-Name 으로 ABConnectionPoolDataSource 를설정한경우에는 Encoding, maxpoolsize 등의프로퍼티를지정하여사용할수있지만, ALTIBASE & JEUS 연동가이드 23 page of 33
BlackboxConnectionPoolDataSource 사용시에는해당프로퍼티를사용할수없다. 2. Deadlock 발생 - ABConnectionPool 사용시 initialpoolsize 를사용하면 lock 이걸리는문제가발생하기도한다. 이문제는 JEUS 에서사용해야할 Pool 의값들을 ALTIBASE JDBC 드라이버에서사용하면서발생하는문제로해결하기위해서는 initialpoolsize 값을설정하지않고 MaxPoolSize 값만설정해서사용하면된다. <property> <name>encoding</name> <type>java.lang.string</type> <value>ksc5601</value> </property> <property> <name>maxpoolsize</name> <type>java.lang.integer</type> <value>10</value> </property> 체크쿼리 어플리케이션이 JDBC 커넥션요청을했을때, 특정 SELECT 쿼리를보내서커넥션의상태를점검하는기능이다. JDBC 커넥션의내부적인에러로인한끊김, 방화벽에의한소켓끊김현상등을체크할때유용하다. 점검이실패하면물리적커넥션을새로만들어서그에대한핸들을어플리케이션으로리턴해준다. 체크쿼리기능은크게두가지로설정할수있다. 첫째로단순히설정상의 <checkquery> 태그에쿼리문을넣는방법이있고, <check-query-class> 태그를이용하여기능을확장할수도있다. JEUSMain.xml 파일의 <database> ~ </database> 사이에직접추가해도되며, WebAdmin 을사용하는경우에는 Datasource 를생성하거나수정시에 [ 연결풀 ] [ 고급선택사항 ] 을클릭한후에해당값을설정하면된다. 1. Check-query 설정 체크쿼리를위한쿼리문은 DB 에업데이트를가하는명령이아닌단순히쿼리만을위한명령어를넣어야한다. <check-query>select 1 from dual</check-query> 2. Check-query-timeout 설정 (msec) ALTIBASE & JEUS 연동가이드 24 page of 33
check-query 를수행했을때 DB 서버의응답이없는경우무한정대기하는상황이발생할수도있다. 이런경우를피하기위해서 check-query-timeout 을설정할수있는데, 설정값은 msec 이며, 1000msec 보다적을경우에는 0 으로설정된다. < check-query-timeout>20000</check-query-timeout> 3. Non-validation-interval 설정 (msec) check-query 의잦은사용으로오버헤드가발생하게된다면 Non-validationinterval 을설정하여해결할수있다. check-query 를수행할때의시각과가장마지막에커넥션을사용한시각의차이가 Non-validation-interval 의설정값사이에있다면 check-query 를수행하지않도록한다. <non-validation-interval>10000</non-validation-interval> 4. check-query 에대한 destroy 정책설정 사용자는 check-query 가실패했을경우해당커넥션풀에있는나머지커넥션들에대한 destroy 정책을다음과같이결정할수있다. - FailedConnectionOnly: check-query 가실패한커넥션만버린다. 기본설정값. - AllConnections: 나머지커넥션들도모두버린다. <destroy-policy-on-check-query>allconnections</destroy-policy-on-check-query> 커넥션풀모니터링 커넥션풀을모니터링하는방법은 jeusadmin 을이용하는방법과 WebAdmin 을이용하는방법이있다. 이번절에서는 jeusadmin 을이용하여커넥션풀을모니터링하는방법에대해서설명한다. jeusadmin 에서는엔진컨테이너에구성된 JDBC 커넥션풀을모니터링하기위해서 dsinfo 라는명령어를사용한다. 컨테이너에구성된모든커넥션풀을모니터링하기위해서는컨테이너명을명시해주고, 하나의커넥션풀을모니터링하기위해서는컨테이너에생성한데이터소스명 (Export Name) 을명시해주면된다. Jeusadmin> Dsinfo con 컨테이너명데이터소스명 (export name) 컨테이너명 ALTIBASE & JEUS 연동가이드 25 page of 33
항목 설명 Name Min Max Act Idle Disp Tot Wait work DB 풀의 export name 풀안에서유지되는커넥션의최소크기 풀안에서유지되는커넥션의최대크기 어플리케이션이사용하고있는커넥션의수 현재풀에들어있는커넥션의수 한번사용하고버리는커넥션의총개수 DB 커넥션의총수 (active+idle+disposable connection) 풀에커넥션이비었을경우, 쓰레드를기다리게할것인지를결정한다. true 일경우기다리게하고, false 일경우풀과상관없는커넥션을만들어준다. 만약 DB 풀이활성화상태이면 true 이고비활성화이거나아직생성되지않은상태이면 false 이다. 또한, dsconinfo 명령어를사용해서각각의데이터소스별로현재커넥션의상태를파악하거나관련통계를볼수있다. Jeusadmin> dsconinfo con 컨테이너명데이터소스명 (export name) 2edcf6a9ba4d44b>dsconinfo -con 2edcf6a9ba4d44b_container1 datasource1 =============================================================== Connection information list for the engine container[2edcf6a9ba4d44b_container1] --------------------------------------------------------------- id state state-time(ms) use-count type --------------------------------------------------------------- datasource1-1 idle 10000 0 pooled --------------------------------------------------------------- =============================================================== 항목 설명 Id State 해당컨테이너의데이터소스내에서각 connection 별로붙인고유한값 커넥션의상태를나타내며 active 와 idle 로나뉜다. Active 일경우현재사용중인커넥션을의미한다. Usecount Open, close 짝이몇번일어났는가를의미한다. State time 커넥션이현재상태로바뀐후지속된시간을의미한다. ALTIBASE & JEUS 연동가이드 26 page of 33
type 풀링된커넥션인지 disposable 커넥션인지구분한다. 데이터소스의 Export Name 을알고있으면 jeusadmin 을통해서사용가능한풀인지설정테스트를해볼수있다. Jeusadmin> testdsconfig 데이터소스명 (export name) 2edcf6a9ba4d44b>testdsconfig datasource1 Configuration is valid. You can use it. ALTIBASE & JEUS 연동가이드 27 page of 33
샘플예제 위에서 ALTIBASE 와 JEUS 의연동방법에대해서알아봤다면, 본절에서는위 Node 설정을이용하여 Altibase 에접속및쿼리를수행함으로써 ALTIBASE 와 JEUS 의연동을확인해본다. Pool 사용샘플예제 <%@ page import="javax.naming.*" %> <%@ page import="java.sql.*" %> <%@ page import="javax.sql.*" %> <% Connection con=null; Statement ResultSet st=null; rs=null; try { InitialContext ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("DataSource1"); con=ds.getconnection(); st=con.createstatement(); rs=st.executequery("select * from dual"); while(rs.next()) { out.println("table_name :" + rs.getstring(1)+"<br>"); } } catch(exception e) { out.println("error:" + e.getmessage()); e.printstacktrace(); } finally { if(rs!=null)rs.close(); if(st!=null)st.close(); if(con!=null)con.close(); ALTIBASE & JEUS 연동가이드 28 page of 33
} %> getconnection 사용샘플예제 <%@ page import="java.util.*"%> <%@ page import="java.sql.*"%> <% Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; String db_url = "jdbc:altibase://127.0.0.1:20300/mydb"; String db_user = "sys"; String db_passwd = "manager"; String enc = "KO16KSC5601"; Properties props = new Properties(); props.put("user", db_user); props.put("password", db_passwd); props.put("encoding", enc); try { try { Class.forName("Altibase.jdbc.driver.AltibaseDriver"); conn = DriverManager.getConnection(db_url, props); out.print(" Connection ok" + "<br>" ); } catch (Exception e) { out.println("### CONN ERROR=>" + e.tostring() + "###" + "<br>"); } String Query = "select * from dual"; pstmt = conn.preparestatement(query); String get_1 = null; ALTIBASE & JEUS 연동가이드 29 page of 33
try { rs = pstmt.executequery(); while(rs.next()) { get_1 = rs.getstring(1); out.println(" get_1 = " + get_1 + "<br>"); } } catch (Exception e) { out.println("### SELECT ERROR=>" + e.tostring() + "###" + "<br>"); } } catch (Exception e) { out.println("### ERROR=>" + e.tostring() + "###" + "<br>"); try { conn.rollback(); } catch(exception ex) { out.println("### rollback ERROR=>" + ex.tostring() + "###" + "<br>"); } // end of try } finally { try { conn.close(); } catch(exception ex) { out.println("### close ERROR=>" + ex.tostring() + "###" + "<br>"); } // end of try } // end of try %> 실행방법 WebAdmin 을사용하여 JSP 파일을디플로이한후에테스트하는방법에대해서설명한다. 디플로이는어플리케이션의서비스들을시작하기위해서 JEUS 에모듈파일을올리고제어하는모든동작을일컫는작업을의미한다. JEUS 에는 EJB 모듈 (.jar 파일 ), 웹어플리케이션모듈 (.war 파일 ), 리소스어댑터모듈 (.rar 파일 ) 등을업로드하여디플로이할수있으며, 하나의모듈로구성된 Standalone 모듈도 Java EE 어플리케이션의한종류로디플로이할수있다. 샘플테스트에서는위에서제공한샘플예제를이용하여 WAR 파일을작성하고, JEUS 서버에디플로이하여실행시키는방법에대하여설명한다. 다른모듈들을업로드하여디플로이하는방법에대해서는 JEUS 매뉴얼중 Deployment 부분을참조하면된다. ALTIBASE & JEUS 연동가이드 30 page of 33
샘플테스트에서사용하는 WAR 파일은이클립스를사용하여생성하였다. 1. 이클립스를실행시켜서 [File] [New] [Project] 를선택한후에다음의 Wizard 에서 [Web] Dynamic Web Project 를선택하여프로젝트이름을설정한다. 2. 다음과같이프로젝트가생성이되면, 위의샘플예제를 JSP 파일로생성하여 WebContent 디렉토리밑에추가해준다. Lib 폴더에는 Altibase.jar 파일을추가해준다. 3. JSP 파일과 Altibase.jar 파일을추가했으면, [File] [Export] 를선택하고, [Web] War file 를선택하여생성할경로를지정해주면 WAR 파일이생성된다. 4. WAR 파일이생성되면, WebAdmin 노드트리에서 어플리케이션모듈디플로이 파일업로드탭을선택하여해당 WAR 파일을업로드한다. ALTIBASE & JEUS 연동가이드 31 page of 33
5. 파일이업로드된후에업로드한모듈을디플로이한다. 디플로이가된모듈의이름 (WAR 파일의이름 ) 이예제파일을실행시키는경로가된다. 6. 디플로이가완료되면인터넷창을띄워서다음과같은 URL 을입력하여실행시키면된다. http://server_ip:8088/ 모듈이름 /jsp 파일이름예 ) http://192.168.1.76:8088/altitest/test.jsp ALTIBASE & JEUS 연동가이드 32 page of 33
알티베이스 서울특별시구로구구로 3 동 182-13 대륭포스트 2 차 1008 호 02-2082-1000 http://www.altibase.com 대전사무소대전광역시서구둔산동 921 주은리더스텔 901 호 042-489-0330 기술본부서울특별시구로구구로동우림e-biz센터 11 층 1101 호 02-2082-1000 기술지원센터 02-2082-1114 support@altibase.com ATC (ALTIBASE Technical Center) http://atc.altibase.com Copyright c 2000~2010 ALTIBASE Corporation. All Rights Reserved. 이문서는정보제공을목적으로제공되며, 사전에예고없이변경될수있습니다. 이문서는오류가있을수있으며, 상업적또는특정목적에부합하는명시적, 묵시적인책임이일체없습니다. 이문서에포함된 ALTIBASE 제품의특징이나기능의개발, 발표등의시기는 ALTIBASE 재량입니다. ALTIBASE 는이문서에대하여관련된특허권, 상표권, 저작권또는기타지적재산권을보유할수있습니다. ALTIBASE & JEUS 연동가이드 33 page of 33