Real Alternative DBMS ALTIBASE, Since 1999 ALTIBASE & JBOSS 연동가이드 2010. 06 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved.
Document Control Change Record Date Author Change Reference 2010-06 Swj0701 Created Reviews Date Name (Position) Distribution Name Location ALTIBASE & JBOSS 연동가이드 2 page of 21
목차 개요... 4 JBOSS 설치... 5 설치전준비사항... 5 기본설치... 5 JBOSS 디렉토리구조... 6 JBOSS 구동... 7 바인딩 IP 주소... 8 JBOSS 종료... 9 JBOSS 구동및종료시유의사항... 9 ALTIBASE 와 JBOSS 의연동... 11 JDBC 드라이버... 11 JDBC 드라이버설정... 11 데이터소스파라미터... 11 데이터소스설정 ( 콘솔환경 )... 12 샘플예제... 17 JSP 샘플예제... 17 실행방법... 18 ALTIBASE & JBOSS 연동가이드 3 page of 21
개요 본문서는 ALTIBASE 와 JBOSS 를연동하여운영하기위한가이드문서로써 JBOSS 를설치하는방법및환경변수설정방법, ALTIBASE 와 JBOSS 를연동하는방법에대해서기술한다. 본문서는 ALTIBASE 5.3.3 과 JBOSS 5.1 버전에대해기술한문서이다. ALTIBASE & JBOSS 연동가이드 4 page of 21
JBOSS 설치 본장에서는 JBOSS 를설치하고구동하는방법, 환경변수를설정하는방법, IP 주소바인딩하는방법, 디렉토리구조등에대해서설명한다. 설치전준비사항 JBOSS 는 Java EE 5 표준인증을받은 application server 이기때문에 JBOSS 를사용하기위해서는 JDK 1.5 이상을설치해야한다. 기본설치 JBOSS 를설치하기위해서해당버전의패키지를 JBOSS 홈페이지에서다운로드받는다 (http://www.jboss.org/jbossas/downloads). 패키지를다운로드받은후, 윈도우환경에서는알집등의압축도구를이용하여압축을풀고, 유닉스환경에서는 unzip 명령어를통하여압축을푼다. # unzip jboss-5.1.0.ga.zip 생략 inflating: jboss-5.1.0.ga/server/web/deployers/jboss-jca.deployer/jboss-jca-deployer.jar inflating: jboss-5.1.0.ga/server/web/deployers/jbossweb.deployer/web.xml inflating: jboss-5.1.0.ga/server/web/deployers/metadata-deployer-jboss-beans.xml inflating: jboss-5.1.0.ga/server/web/deployers/security-deployer-jboss-beans.xml # 패키지압축을푸는것으로 JBOSS 의설치는완료되며, JDK 를설정한후에구동시키면된다. 패키지압축을풀면해당패키지와동일한이름의디렉토리가생기게되며, 디렉토리하위에는 JBOSS 구동및종료, 테스트에대한모든파일과디렉토리가있다. 본문서에는압축을풀어서생기는 jboss-5.1.0.ga 디렉토리를 JBOSS_HOME 으로명칭한다. 윈도우환경 JDK 설정 윈도우환경에서 JDK 를설정하는방법은다음과같으며, 두가지방법중한가지를선택하여설정한다. 시스템환경변수에 JAVA_HOME 변수를추가 JBOSS 구동스크립트인 JBOSS_HOME/bin/run.bat 파일에추가 <run.bat> @echo off rem ------------------------------------------------------------------------- rem JBoss Bootstrap Script for Windows ALTIBASE & JBOSS 연동가이드 5 page of 21
rem ------------------------------------------------------------------------- rem $Id: run.bat 88978 2009-05-16 18:18:45Z alex.loubyansky@jboss.com $ set JAVA_HOME=C:\Program Files\java\jdk1.5.0 JDK 경로를추가 @if not "%ECHO%" == "" echo %ECHO% @if "%OS%" == "Windows_NT" setlocal if "%OS%" == "Windows_NT" ( set "DIRNAME=%~dp0%" ) else ( set DIRNAME=.\ ) 생략 유닉스환경 JDK 설정 유닉스환경에서 JDK 를설정하는방법은다음과같으며, 네가지방법중한가지를선택하여설정한다. 시스템환경변수에 JAVA_HOME 변수를추가 JBOSS 구동스크립트인 JBOSS_HOME/bin/run.sh 파일에추가 JBOSS_HOME/bin/run.conf 구동설정파일에추가 JBOSS_HOME/server/<Configuration>/run.conf 구동설정파일에추가 <run.sh> #!/bin/sh ======================================================= ## JBoss Bootstrap Script ======================================================= ### $Id: run.sh 88978 2009-05-16 18:18:45Z alex.loubyansky@jboss.com $ ### JAVA_HOME=/usr/jdk/jdk1.5.0 JDK 경로를추가 DIRNAME=`dirname $0` PROGNAME=`basename $0` GREP="grep" 생략 JBOSS 디렉토리구조 JBOSS 를설치하면다음과같은디렉토리들이생성된다. ALTIBASE & JBOSS 연동가이드 6 page of 21
JBOSS 구동 JBOSS 를설치하고 JDK 설정을하면 JBOSS 를구동할수있다. 유닉스환경에서는 JBOSS_HOME/bin/run.sh 스크립트를실행시켜서구동할수있으며, 윈도우환경에서는 JBOSS_HOME/bin/run.bat 배치파일을실행시켜서구동할수있다. # sh run.sh 생략 13:54:55,994 INFO [TomcatDeployment] deploy, ctxpath=/ 13:54:56,032 INFO [TomcatDeployment] deploy, ctxpath=/jmx-console 13:54:56,083 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-192.168.1.35-8180 ALTIBASE & JBOSS 연동가이드 7 page of 21
13:54:56,103 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-192.168.1.35-8109 13:54:56,111 INFO [ServerImpl] JBoss (Microcontainer) [5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221053)] Started in 51s:458ms JBOSS 가정상적으로구동이되면가장마지막로그메시지에 Started 라는문구가출력되며, 웹콘솔로접근하여정상적으로 JBOSS 가구동되었는지확인할수있다 (http://server_ip: 포트번호 ). Administration Console 에 admin 계정 ( 패스워드 admin) 으로접속하여현재구동중인 JBOSS 에대한운영이가능하다. 바인딩 IP 주소 바인딩 IP 주소는 JBOSS 를구동하는장비의네트워크인터페이스카드에할당되어있는 IP 주소로 JBOSS 가사용하는포트를바인딩하는 IP 주소를의미한다. JBOSS 는바인딩 IP 주소를구동스크립트의옵션으로지정할수있다. 바인딩 IP 주소를사용할경우, 웹콘솔에접속할때해당바인딩 IP 를입력해야한다. # sh run.sh b 바인딩 IP 주소 http:// 바인딩 IP 주소 : 포트번호 웹콘솔접속시 ALTIBASE & JBOSS 연동가이드 8 page of 21
JBOSS 종료 JBOSS 를종료하기위해서는 JBOSS_HOME/bin/shutdown.sh 또는 shutdown.bat 스크립트를실행한다. # sh shutdown.sh S localhost 로구동한경우 Shutdown message has been posted to the server. Server shutdown may take a while - check logfiles for completion # JBOSS 구동및종료시유의사항 JBOSS 를구동하고종료할때유의사항은다음과같다. 구동시포트중복으로인한에러 JBOSS 는기본으로설정되어있는 Connection Port 가 8080 이다. 하지만이 Port 를다른프로그램에서사용하고있을경우 JBOSS 구동시에다음과같은에러가발생하기때문에 Port 변경이필요하다. DEPLOYMENTS IN ERROR: Deployment "WebServer" is in error due to the following reason(s): LifecycleException: Protocol handler initialization failed: java.net.bindexception: Address already in use /127.0.0.1:8080 JBOSS 의기본 Port 를변경하기위해서는 JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/server.xml 파일에서 Connector port 를수정한다. <Connector port="8080" address="${jboss.bind.address}" maxthreads="250" strategy="ms" maxhttpheadersize="8192" emptysessionpath="true" enablelookups="false" redirectport="8443" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true"/> JBOSS 종료시 IP 지정으로인한에러 JBOSS 구동시에 Localhost 로접속을한경우에는위에서언급한 shutdown 구문을사용하면되지만 IP 를바인딩해서구동한경우동일한구문으로종료하면다음과같은에러가발생한다. Exception in thread "main" javax.naming.communicationexception: Could not obtain connection to any of these urls: localhost:1099 [Root exception is javax.naming.communicationexception: Failed to connect to server localhost/127.0.0.1:1099 [Root exception is ALTIBASE & JBOSS 연동가이드 9 page of 21
javax.naming.serviceunavailableexception: Failed to connect to server localhost/127.0.0.1:1099 [Root exception is java.net.connectexception: Connection refused]]] at org.jnp.interfaces.namingcontext.checkref(namingcontext.java:1763) at org.jnp.interfaces.namingcontext.lookup(namingcontext.java:693) at org.jnp.interfaces.namingcontext.lookup(namingcontext.java:686) at javax.naming.initialcontext.lookup(initialcontext.java:351) at org.jboss.shutdown.main(shutdown.java:219) IP 를바인딩해서구동한경우종료시에해당 IP 를지정하여 shutdown 해야한다. # sh shutdown.sh s 바인딩 _IP IP 바인딩해서구동한경우 ALTIBASE & JBOSS 연동가이드 10 page of 21
ALTIBASE 와 JBOSS 의연동 본장에서는 ALTIBASE 와 JBOSS 를연동하여사용하기위한설정방법에대해서설명한다. 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 드라이버설정 어플리케이션에서직접구현하여커넥션풀을사용하는경우에는어플리케이션과 JDBC 드라이버를같이패키징하면되지만 JBOSS 의 JNDI 를통해데이터소스에접근하고자한다면 JDBC 드라이버를모든 server configuration 에서접근이가능한곳에위치시켜야한다. JBOSS 에서는 JBOSS_HOME/common/lib 디렉토리에 JDBC 드라이버 (Altibase.jar) 를위치시키면모든 server configuration 에서접근이가능하다. 해당디렉토리는동적으로반영되지않기때문에 JDBC 드라이버를위치시킨후, 반드시 JBOSS 를재기동시켜야한다. 데이터소스파라미터 다음은 ALTIBASE 와 JBOSS 를연동하여사용하기위한데이터소스설정파라미터이며, 데이터소스설정시사용할수있는거의모든설정정보를포함하고있다. 나열된파라미터들의정의를확인한후, 필요로하는파라미터들을조합하여데이터소스파일에설정한다. 문서편집기를이용하여데이터소스파일을직접생성할수있으며, xx-ds.xml 의형태로 JBOSS_HOME/server/default/deploy 디렉토리에위치시킨다. 파라미터 내용 <jndi-name> 사용할데이터소스의이름을설정 어플리케이션에서 jndi-name 을 lookup ALTIBASE & JBOSS 연동가이드 11 page of 21
시켜서사용 <connection-url> <driver-class> <user-name> <password> <new-connection-sql> <check-valid-connection-sql> <valid-connection-checker-class-name> <exception-sorter-class-name> <track-statements> <prepared-statement-cache-size> <shared-prepared-statements> <query-timeout> <background-validation> <idle-timeout-minutes> 접속할 DBMS 의 url 을설정 DBMS 와연동시사용할 JDBC 드라이버를설정 사용자설정 패스워드설정 커넥션생성시호출할 SQL 지정 커넥션풀에서커넥션을얻었을때호출할 SQL 지정 커넥션풀에서커넥션을호출하기전에유효한커넥션인지확인함 에러발생시 DBMS 의에러코드와메시지를확인 Statement 와 Resultset 이 unclosed 되는경우추적하는모니터링옵션 커넥션당캐싱할 preparestatement 의수로써다음호출때재사용함 Preparestatement 캐싱여부를지정하는것으로동일트랜잭션에서여러번호출하는경우 statement 를반환함. 기본값은 false. SQL 의 Timeout 값을설정 커넥션이유효한지검사하는과정의오버헤드를줄이기위해서사용하는옵션. 기본값은 false. 커넥션이닫히기전까지 idle 상태의최대시간. 기본값은 15 분 <background-validation-minutes> Connectionvalidator 가실행하는주기. 기본값은 10 분. <min-pool-size> <max-pool-size> <transaction-isolation> <metadata> 커넥션풀의최소개수 커넥션풀의최대개수 Transaction Isolation Level 을지정하지않으면 DBMS 의기본값을사용함 Standardjbosscmp-jdbc.xml 파일에정의되어있는 type-mapping 데이터소스설정 ALTIBASE 와 JBOSS 를연동하여사용하기위해데이터소스를설정하는방법에대하여기술한다. ALTIBASE & JBOSS 연동가이드 12 page of 21
로컬트랜잭션 분산트랜잭션을지원하지않고로컬트랜잭션만사용하는경우다음과같이데이터소스를설정할수있다. ALTIBASE 와 JBOSS 를연동하기위한최소한의데이터소스설정이므로추가적인항목이필요한경우위에서언급한항목을적절하게사용하도록한다. 파일명은 xx-ds.xml 의형태로저장하며, JBOSS 를재구동하지않아도자동으로데이터소스파일을감지하여바인딩한다. #altibase-ds.xml <datasources> <local-tx-datasource> <jndi-name>altitest</jndi-name> <connection-url>jdbc:altibase://127.0.0.1:20300/mydb</connection-url> <driver-class>altibase.jdbc.driver.altibasedriver</driver-class> <user-name>sys</user-name> <password>manager</password> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <metadata> <type-mapping>altibase</type-mapping> </metadata> </local-tx-datasource> </datasources> 분산트랜잭션 다음은분산트랜잭션을사용하는경우의데이터소스파일의설정예이다. JBOSS_HOME/docs/jca 디렉토리에는 DBMS 별로로컬 / 분산트랜잭션에대한데이터소스설정예제파일이있으므로참고하여설정하도록한다. 파일은 xx-xa-ds.xml 의형태로저장한다. #altibase-xa-ds.xml <datasource> ALTIBASE & JBOSS 연동가이드 13 page of 21
<xa-datasource> <jndi-name>altibaseds</jndi-name> <track-connection-by-tx /> <issamerm-override-value>false</issamerm-override-value> <xa-datasourceclass>altibase.jdbc.driver.abxadatasource</xadatasource-class> <xa-datasource-property name="servername">127.0.0.1</xadatasource-property> <xa-datasource-property name="portnumber">20300</xadatasource-property> <xa-datasource-property name="user">sys</xa-datasourceproperty> <xa-datasource-property name="password">manager</xadatasource-property> <metadata> <type-mapping>altibase</type-mapping> </metadata> <!--pooling parameters--> <min-pool-size>5</min-pool-size> <max-pool-size>250</max-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>5</idle-timeout-minutes> <check-valid-connection-sql>select * from system_.sys_database_</check-valid-connection-sql> </xa-datasource> </datasources> Failover Failover 는 DBMS 의장애로인해서비스가중단되는것을방지하기위해사용중인 DBMS 의장애시에이를감지하고다른 DBMS 로절체하여계속적인서비스를제공하기위한기능이다. Failover 기능은 JBOSS 에서제공하는구문을이용하는방법과 ALTIBASE 에서제공하는구문을이용하는방법이있다. ALTIBASE 에서는 5.3.3 이상버전에서만 Failover 기능을제공하기때문에하위버전을사용시 JBOSS 의구문을이용해야한다. 다음은 ALTIBASE 에서제공하는구문을통한 Failover 이다. 데이터소스파일을수정한다음첫번째 url 의 DBMS 를종료시키고테스트해보면두번째 url 의 DBMS 로 Failover 가되는것을확인할수있다. ALTIBASE 에서제공하는구문을사용하면 CTF(Connection Time Failover) 와 STF(Session Time Failover) 가가능하다. #altibase-ds.xml <datasources> <local-tx-datasource> <jndi-name>altitest</jndi-name> ALTIBASE & JBOSS 연동가이드 14 page of 21
<connection-url>jdbc:altibase://127.0.0.1:20911/mydb? AlternateServers=(192.168.1.76:20911)& ConnectionRetryCount=3& ConnectionRetryDelay=3&LoadBalance=off& SessionFailOver=on </connection-url> <driver-class>altibase.jdbc.driver.altibasedriver</driver-class> <user-name>sys</user-name> <password>manager</password> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <metadata> <type-mapping>altibase</type-mapping> </metadata> </local-tx-datasource> </datasources> 다음은 JBOSS 에서제공하는 Failover 구문이다. Failover 할 DBMS 의 connectionurl 을추가해주고, 두 url 을구분하는구분자를 <url-delimiter> 로지정해준다. JBOSS 에서제공하는구문을사용하면 CTF(Connection Time Failover) 만가능하다. 테스트하는방법은위의내용과동일하다. <datasources> <local-tx-datasource> <jndi-name>altitest</jndi-name> <connection-url> jdbc:altibase://127.0.0.1:20911/mydb, jdbc:altibase://192.168.1.76:20911/mydb</connection-url> <url-delimiter>,</url-delimiter> <driver-class>altibase.jdbc.driver.altibasedriver</driver-class> <user-name>sys</user-name> <password>manager</password> <min-pool-size>10</min-pool-size> ALTIBASE & JBOSS 연동가이드 15 page of 21
<max-pool-size>100</max-pool-size> <blocking-timeout-millis>5000</blocking-timeout-millis> <idle-timeout-minutes>15</idle-timeout-minutes> <metadata> <type-mapping>altibase</type-mapping> </metadata> </local-tx-datasource> </datasources> ALTIBASE & JBOSS 연동가이드 16 page of 21
샘플예제 위에서 ALTIBASE 와 JBOSS 의연동방법에대해서알아봤다면, 본장에서는위의설정을이용하여 ALTIBASE 에접속및쿼리를수행함으로써 ALTIBASE 와 JBOSS 의연동을확인해본다. JSP 샘플예제 <%@ 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("java:/AltiTest"); con=ds.getconnection(); st=con.createstatement(); rs=st.executequery("select * from dual"); while(rs.next()) { out.println("result :" + 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 & JBOSS 연동가이드 17 page of 21
} %> 실행방법 ALTIBASE 와 JBOSS 의연동테스트를하기위해두가지방법을사용할수있다. 기존에배포되어있는 WAR 에테스트하고자하는 JSP 파일을생성하는방법과 WAR 를직접생성하고 JBOSS 에디플로이한후테스트하는방법이있다. 기존 WAR 이용 JBOSS_HOME/server/default/deploy 디렉토리에는 JBOSS 에서기본적으로제공하는 WAR 가있다. 제공되는 WAR 에 JSP 예제파일을생성한후, 테스트해본다. 본문서에서테스트할때는 jmx-console.war 에 JSP 파일을생성하여사용했다. JSP 파일을생성한후에는주소창에 JBOSS 가구동중인서버 IP 와포트번호, JSP 파일이생성된 WAR 이름, JSP 파일이름을차례대로입력한다. http://server_ip: 포트번호 /WAR 이름 /jsp 파일이름 예 ) http://192.168.1.35:8180/jmx-console/test.jsp WAR 생성 JBOSS 웹콘솔을사용하여 JSP 파일을디플로이한후에테스트하는방법에대해서설명한다. 디플로이는어플리케이션의서비스들을시작하기위해서 JBOSS 에모듈파일을올리고제어하는모든동작을일컫는작업을의미한다. 샘플테스트에서는위에서제공한샘플예제를이용하여 WAR 를작성하고, JBOSS 서버에디플로이하여실행시키는방법에대하여설명한다. 샘플테스트에서사용하는 WAR 는이클립스를사용하여생성하였다. ALTIBASE & JBOSS 연동가이드 18 page of 21
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 가생성되면, JBOSS 웹콘솔에서 Web Application Add a new resource 를클릭하여 WAR 를업로드한다. ALTIBASE & JBOSS 연동가이드 19 page of 21
클릭 Web Application 선택 5. 생성한 WAR 를업로드하면자동적으로디플로이가되며, 디플로이가성공했다는메시지가출력된다. 디플로이된 WAR 도리스트에서확인할수있다. 6. 디플로이가완료되면인터넷창을띄워서다음과같은 URL 을입력하여실행시키면된다. http://server_ip: 포트번호 /WAR 이름 /jsp 파일이름예 ) http://192.168.1.35:8180/altitest/test.jsp ALTIBASE & JBOSS 연동가이드 20 page of 21
알티베이스 서울특별시구로구구로 3 동 182-13 대륭포스트 2 차 1008 호 02-2082-1000 http://www.altibase.com 대전사무소대전광역시서구둔산동 921 주은리더스텔 901 호 042-489-0330 기술지원본부서울특별시구로구구로 3 동 182-13 대륭포스트 2 차 908 호 02-2082-1000 기술지원센터 02-2082-1114 http://support.altibase.com Copyright c 2000~2013 ALTIBASE Corporation. All Rights Reserved. 이문서는정보제공을목적으로제공되며, 사전에예고없이변경될수있습니다. 이문서는오류가있을수있으며, 상업적또는특정목적에부합하는명시적, 묵시적인책임이일체없습니다. 이문서에포함된 ALTIBASE 제품의특징이나기능의개발, 발표등의시기는 ALTIBASE 재량입니다. ALTIBASE 는이문서에대하여관련된특허권, 상표권, 저작권또는기타지적재산권을보유할수있습니다. ALTIBASE & JBOSS 연동가이드 21 page of 21