애플리케이션 정의 데이터 소스
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에서
정의될 수 있는 특성은 애플리케이션 정의 데이터 소스에서 지정될 수도 있습니다.
이에 대한 두 가지 예외는 connectionManagerRef 및 jdbcDriverRef이며,
애플리케이션 정의 데이터 소스가 암시적으로 연결 관리자 및 JDBC 드라이버를 정의하기 때문에
이를 지정할 수 없습니다. 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"
)
})