애플리케이션 정의 데이터 소스
Java™ EE 스펙에서 정의한 대로 어노테이션 또는 배치 디스크립터를 통해 애플리케이션 내에 데이터 소스를 정의할 수 있습니다.
참고: commonLibraryRef 클래스 로더 속성은
애플리케이션 정의 데이터 소스에 대해 권장됩니다.
privateLibraryRef 속성은 java:global 네임스페이스에 사용할 수 없으며
다른 범위에 사용하지 못합니다. 여러 애플리케이션이 데이터 소스를 지정하기 위해
동일한 java:global 네임스페이스를 선언하는 경우, 애플리케이션의
server.xml 파일은 모두 동일한 공유 라이브러리에 commonLibraryRef 속성을
지정해야 합니다.
데이터 소스를 애플리케이션에서 정의하는 경우, JDBC 드라이버는 애플리케이션에 사용 가능하도록 작성해야 합니다. 애플리케이션의 server.xml에서 공유 라이브러리를 구성하여 완성됩니다.
예를 들면 다음과 같은 경우가 있습니다.
<application id="myApp" name="myApp" location="myApp.war" type="war">
<classloader commonLibraryRef="DB2Lib"/>
</application>
<library id="DB2Lib">
<fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/>
</library>
그런 다음, 어노테이션 또는 배치 디스크립터를 통해 애플리케이션에서 데이터 소스를 정의할 수 있습니다.
- 다음 예제처럼 어노테이션을 사용하십시오.
@DataSourceDefinition( name = "java:comp/env/jdbc/db2", className = "com.ibm.db2.jcc.DB2DataSource", databaseName = "SAMPLEDB", serverName = "localhost", portNumber = 50000, properties = { "driverType=4" }, user = "user1", password = "pwd1" ) public class MyServlet extends HttpServlet { @Resource(lookup="java:comp/env/jdbc/db2") DataSource ds;
- 예를 들어, web.xml 파일의 경우 다음 예제처럼 배치 디스크립터를 사용하십시오.
<data-source> <name>java:comp/env/jdbc/db2</name> <class-name>com.ibm.db2.jcc.DB2DataSource</class-name> <server-name>localhost</server-name> <port-number>50000</port-number> <database-name>SAMPLEDB</database-name> <user>user1</user> <password>pwd1</password> <property><name>driverType</name><value>4</value></property> </data-source>
일반적으로, server.xml 파일의 dataSource 또는 connectionManager에서
정의될 수 있는 특성은 애플리케이션 정의 데이터 소스에서 지정될 수도 있습니다. 그러나, 애플리케이션 정의 데이터 소스가 내재적으로 연결 관리자 및 JDBC 드라이버를 정의하기 때문에
connectionManagerRef 및 jdbcDriverRef와 같은 기타 요소를 참조하는 특성을 지정할 수 없습니다. 2단계 커미트에 대해 애플리케이션 정의
데이터 소스를 사용하는 경우, recoveryAuthDataRef 특성을 지정하여
트랜잭션 복구에 사용되는 인증 데이터를 선택할 수 있습니다.
그러나, 트랜잭션 복구가 애플리케이션이 실행 중인 경우에만 가능하다는 것을
아는 것이 중요합니다. 변수, 인코드된 비밀번호, 지속 기간 구문을
애플리케이션 정의 데이터 소스에서 사용할 수 있습니다.
참고: 지속 기간 구문은
loginTimeout 또는 maxIdleTime과 같은 어노테이션에 명시적으로 정의된 특성에 적용되지 않습니다.
다음은 연결 관리자 특성, 변수, 인코드된 비밀번호, 지속기간 구문을 사용한 두 데이터 소스의 예제입니다.
@DataSourceDefinitions(value = {
@DataSourceDefinition(
name = "java:comp/env/jdbc/derby",
className = "org.apache.derby.jdbc.EmbeddedDataSource40",
databaseName = "${shared.resource.dir}/data/SAMPLEDB",
minPoolSize = 1,
maxPoolSize = 10,
maxIdleTime = 180,
properties = { "agedTimeout=10m", "connectionTimeout=30s", "createDatabase=create" }
),
@DataSourceDefinition(
name = "java:comp/env/jdbc/oracle",
className = "oracle.jdbc.pool.OracleDataSource",
url = "jdbc:oracle:thin:@//localhost:1521/SAMPLEDB",
user = "user1",
password = "{xor}Oz0vKDtt"
)
})