JBoss에서 DataSource 설정 절차
(1) JDBC 라이브러리 설치
해당 DB 벤더의 JDBC 라이브러리를 $JBOSS_HOME/server/<instance>/lib 디렉터리에 복사한다.
절대로 어플리케이션과 함께 패키징해서는 안된다. 예를 들어 ojdbc14.jar를 WEB-INF/lib에 두면 다양한 에러를 경험할 수 있다.
(2) xxx-ds.xml 작성 및 디플로이
JBoss에서 데이터소스 설정은 파일명이 -ds.xml로 끝나는 XML 파일을 작성해 deploy 디렉터리에 두면 된다. $JBOSS_HOME/docs/examples/jca 디렉터리를 보면 벤더별 데이터소스 설정 예제들을 볼 수 있다.
이제 예제를 통해 설정항목들을 살펴본다.
$JBOSS_HOME/server/default/deploy/example-ds.xml |
<?xml version="1.0" encoding="UTF-8"?>
|
먼저 root element가 <datasources>로 복수형인게 눈에 띄는데 글자 그대로 하나의 -ds.xml 파일 하나에 여러 개의 데이터소스를 설정할 수 있다.
그 하위에 <local-tx-datasource>가 선언되어 있는데 JBoss에서는 트랜잭션 유형에 따라 <local-tx-datasource>, <xa-datasource>, <no-tx-datasource>로 element 레벨에서 구분해서 데이터소스를 설정한다. 분산 트랜잭션 처리를 위해 XA를 사용한다면 <xa-datasource>를, 그렇지 않다면 <local-tx-datasource>를 사용하면 된다.
그러면 <local-tx-datasource>로 선언할 때의 기본 설정 항목부터 살펴본다.
기본 설정 항목
1) <driver-class>
위의 example-ds.xml에서와 같이 <local-tx-datasource>를 사용할 경우에는 java.sql.Driver 인터페이스를 구현한 드라이버 클래스를 <driver-class>에 설정한다.
Oracle 8i |
oracle.jdbc.driver.OracleDriver |
Oracle 9i/10g |
oracle.jdbc.OracleDriver |
Informix |
com.informix.jdbc.IfxDriver |
MS SQL |
com.microsoft.jdbc.sqlserver.SQLServerDriver |
MySQL |
com.mysql.jdbc.Driver |
2) <connection-url>
DB접속 URL을 명시한다.
Oracle thin |
jdbc:oracle:thin:@host:port:sid |
Oracle thin (description) |
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=port))(CONNECT_DATA=(SERVICE_NAME=sid))) |
Oracle oci |
jdbc:oracle:oci:@sid |
Informix |
jdbc:informix-sqli://host:port/dbname:INFORMIXSERVER=servername |
MS SQL |
jdbc:microsoft:sqlserver://host:port;DatabaseName=dbname |
MySQL |
jdbc:mysql://host:port/dbname |
3) <jndi-name>과 <use-java-context>
JNDI에서 데이터소스를 찾을 때 사용할 이름으로 jdbc/xxx 형식을 사용하는 것을 권장한다.
주의할 점은 데이터소스는 JNDI에 바인딩될 때 java: 네임스페이스로 바인딩된다는 점이다. 이때문에 Context.lookup()시에 java:/jdbc/xxx와 같이 명시해야 데이터소스를 찾을 수 있다.
만약 WebLogic에서 처럼 global하게 바인딩하려면 <use-java-context>false</use-java-context>로 설정하면 된다. 이 때는 Context.lookup()시에 jdbc/xxx로 명시한다.
4) <user-name>과 <password>
DB 접속 계정과 패스워드를 명시한다. 패스워드를 따로 암호화할 필요가 있다면 이전 포스트를 참고한다.
5) <transaction-isolation>
트랜잭션 격리 레벨을 설정한다. TRANSACTION_NONE, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ,
TRANSACTION_SERIALIZABLE 중에서 DB에서 지원하는 레벨을 설정할 수 있다.
Connection Pool 크기 설정
1) <min-pool-size>
Pool에 유지할 최소 connection 개수로 기본값은 0. 기본적으로 최초 getConnection() 호출전까지 물리적인 db connection은 만들어지지 않는다. 데이터소스 디플로이시에 <min-pool-size>만큼 connection을 만들고자 한다면 <prefill>true</prefill>을 추가로 설정해준다.
2) <max-pool-size>
최대 connection 개수를 설정한다. 기본값은 20.
각종 Timeout 설정
1) <blocking-timeout-millis>
모든 connection이 사용중일 때 getConnection()에서 connection이 반환될 때까지 기다릴 시간으로 ms 단위이다.
2) <idle-timeout-minute>
pool에서 일정 시간동안 사용되지 않고 있는 connection을 닫도록 설정할 수 있는데 그 시간을 분 단위로 설정한다.
3) <query-timeout>
query에 대한 응답을 기다리며 대기할 수 있는 시간을 초 단위로 설정한다. 트랜잭션 Timeout이 설정되어 있는 경우에는 <set-tx-query-timeout>true</set-tx-query-timeout>을 추가로 설정해 트랜잭션 timeout까지 남아 있는 시간을 query timeout으로 자동으로 설정할 수 있다.
Connection 에러 처리 설정
1) <check-valid-connection-sql>
getConnection()시 pool에서 어플리케이션에 connection을 반환하기 전에 connection 상태를 체크하는데 사용할 SQL을 명시한다.
ex) SELECT 1 FRORM DUAL
2) <valid-connection-checker-class-name>
getConnection()시 pool에서 어플리케이션에 connection을 반환하기 전에 connection 상태를 체크하는 DB 벤더별 클래스를 명시한다. Oracle, MySQL에 대한 구현체가 제공된다
Oracle |
org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker |
MySQL |
org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker |
3) <exception-sorter-class-name>
SQLException 발생시 connection error를 검출하는데 사용할 클래스를 명시한다. 예외가 Connection 문제로 발생한 경우 해당 connection을 close하게 된다.
Oracle |
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter |
MySQL |
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter |
Sybase |
org.jboss.resource.adapter.jdbc.vendor.SybaseExceptionSorter |
Informix |
org.jboss.resource.adapter.jdbc.vendor.InformixExceptionSorter |
4) <background-validation>
connection 상태를 매번 getConnection()시마다 체크하지 않고 일정주기로 백그라운드에서 체크할지 여부를 설정한다. 기본값은 false이다.
5) <background-validation-minutes>
connection 상태를 백그라운드로 체크하도록 설정한 경우 그 주기를 분 단위로 설정한다. 기본값은 10분
최적화 관련 설정 항목
1) <prepared-statement-cache-size>
PreparedStatement를 캐쉬해서 성능 향상을 꾀한다. 기본값은 0이다. 이 값이 Oracle에 설정된 open_cursor 값 보다 크면 ORA-01000 "maximum open cursors exceeded"가 발생할 수 있다.
Connection 초기 설정
1) <new-connection-sql>
새로 물리적인 connection을 생성할 때 마다 수행할 SQL을 설정한다. DB session 설정이 필요한 경우 유용하다.
ex) <new-connection-sql>ALTER SESSION SET nls_date_format="YYYY-MM-DD HH24:MI:ss"</new-connection-sql>
Connection 누수 검출
이전 포스트를 참조한다.
'SERVER > JBOSS' 카테고리의 다른 글
JBoss AS Administration Console User Guide (0) | 2014.08.27 |
---|---|
JBOSS 참조 블로그 (0) | 2014.04.12 |
JBOSS7에 사용자계정 추가하여 관리웹페이지 사용하기 (0) | 2014.02.03 |
JBoss Application Server 7에 Oracle Database Connection Pool 생성시 주의점.. (0) | 2014.02.03 |
JBoss Tips #1 - JBoss 어플리케이션 디플로이 경로 설정 (0) | 2014.02.02 |
JBoss Tech Tips #2 – 어플리케이션 수동 디플로이 / 언디플로이 / 리디플로이 (0) | 2014.02.02 |
JBoss Tech Tips #3 – Database Connection / Statement / ResultSet 누수 검출 (1) | 2014.02.02 |
JBoss Database Connection Pool (0) | 2014.02.02 |