애플리케이션에서 데이터 소스 자원 정의
애플리케이션은 어노테이션 또는 배치 디스크립터에서 데이터 소스를 정의할 수 있습니다. 이 주제는 서버, 노드, 클러스터 또는 셀 레벨에 정의된 WebSphere® Application Server 데이터 소스와 유사성 및 호환성을 검토합니다. 데이터 소스 정의의 선택적 기능도 설명됩니다.
데이터 소스 정의에 대한 표준 특성
어노테이션 요소 | 디스크립터 요소 | 주석 |
---|---|---|
이름 | 이름 | 데이터 소스의 JNDI 이름. 이름은 java:global, java:app, java:module 또는 java:comp 네임스페이스 중 하나여야 합니다. |
className | class-name | javax.sql.XADataSource, javax.sql.ConnectionPoolDataSource 또는 javax.sql.DataSource를 구현하는 JDBC 드라이버의 완전한 클래스 이름입니다. |
databaseName | database-name | 값은 JDBC 드라이버에 제공됩니다. |
설명 | 설명 | 값은 DataSource MBean에 제공됩니다. |
initialPoolSize | initial-pool-size | 특성 값은 무시됩니다. WebSphere Application Server에서 초기 풀 크기는 항상 0입니다. |
isolationLevel | isolation-level | WebSphere Application Server 데이터 소스 사용자 정의 특성 webSphereDefaultIsolationLevel과 동등합니다. 이는 새 연결에 대한 기본 트랜잭션 격리 레벨입니다. |
loginTimeout | login-timeout | 값은 JDBC 드라이버에 제공됩니다. |
maxIdleTime | max-idle-time | WebSphere Application Server 연결 풀 특성 unusedTimeout과 동등합니다. 이 특성은 연결 풀이 제공되지 않은 클라이언트 컨테이너에서 무시됩니다. |
maxPoolSize | max-pool-size | WebSphere Application Server 연결 풀 특성 maxConnections와 동등합니다. 이 특성은 연결 풀이 제공되지 않은 클라이언트 컨테이너에서 무시됩니다. |
maxStatements | max-statements | 연결 풀에 대한 최대 명령문 수를 정의합니다. WebSphere Application Server에서 각 풀된 연결에는 자체 명령문 캐시가 있습니다. 따라서 maxStatements는 풀에 대한 maxPoolSize 사이에서 분할(균등, 버림)됩니다. maxPoolSize가 무제한인 경우 명령문 풀은 사용되지 않습니다. |
minPoolSize | min-pool-size | WebSphere Application Server 연결 풀 특성 minConnections과 동등합니다. 이 특성은 연결 풀이 제공되지 않은 클라이언트 컨테이너에서 무시됩니다. |
비밀번호 | 비밀번호 | 비밀번호를 지정하지 않는 연결 요청에 대한 기본 비밀번호입니다. 애플리케이션에 대해 하드코드된 사용자 이름 및 비밀번호 대신 인증 별명 사용을 고려하십시오. |
portNumber | port-number | 값은 JDBC 드라이버에 제공됩니다. |
serverName | server-name | 값은 JDBC 드라이버에 제공됩니다. |
transactional | transactional | WebSphere Application Server에서 특성, 트랜잭션은 연결이 JTA 트랜잭션에 요청되는지를 제어합니다. transactional=false인 경우 연결은 JTA 트랜잭션에서 요청되지 않지만 autocommit=true 또는 autocommit=false가 포함된 connection.commit/rollback으로 여전히 데이터베이스에 대해 트랜잭션을 실행할 수 있습니다. WebSphere Application Server 데이터 소스 사용자 정의 특성 nonTransactionalDataSource 반대에 동등합니다. |
url | url | 값은 JDBC 드라이버에 제공됩니다. URL이 지정되면 databaseName, serverName, portNumber 값은 무시됩니다. |
user | user | 사용자 이름을 지정하지 않는 연결 요청에 대한 기본 사용자 이름입니다. 애플리케이션에 대해 하드코드된 사용자 이름 및 비밀번호 대신 인증 별명 사용을 고려하십시오. |
벤더 특성 및 사용자 정의 특성
JDBC 드라이버 벤더 특성은 데이터 소스 정의에 포함할 수 있습니다. 대부분의 WebSphere Application Server 사용자 정의 특성도 데이터 소스 정의에 포함할 수 있습니다.
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Vendor properties for Derby Embedded JDBC driver:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Custom properties for WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
다음 예는 데이터 소스 정의가 배치 디스크립터에 포함되는
방법을 설명합니다. <data-source>
<name>java:app/env/myDataSource</name>
<class-name>org.apache.derby.jdbc.EmbeddedXADataSource40</class-name>
<database-name>myDB</database-name>
<property><name>createDatabase</name><value>create</value></property>
<property><name>connectionAttributes</name><value>upgrade=true</value></property>
<property><name>connectionTimeout</name><value>60</value></property>
<property><name>dataStoreHelperClass</name><value>com.ibm.websphere.rsadapter.DerbyDataStoreHelper</value></property>
<property><name>validateNewConnection</name><value>true</value></property>
<property><name>validateNewConnectionRetryCount</name><value>5</value></property>
<server-name/>
</data-source>
다음은 이런 방식으로 구성 가능한
WebSphere Application Server
사용자 정의 특성입니다. - 연결 풀 특성:
- agedTimeout
- authDataAlias
- authMechanismPreference
- connectionTimeout
- defaultConnectionTypeOverride
- globalConnectionTypeOverride
- mappingConfigAlias
- purgePolicy
- reapTime
- stuckThreshold
- stuckTime
- stuckTimerTime
- surgeCreationInterval
- surgeThreshold
- testConnection
- testConnectionInterval
- XA_RECOVERY_AUTH_ALIAS
- Data source custom properties:
- beginTranForResultSetScrollingAPIs
- beginTranForVendorAPIs
- connectionSharing
- enableMultithreadedAccessDetection
- errorDetectionModel
- freeResourcesOnClose
- oracleRACXARecoveryDelay (Oracle only)
- preTestSQLString
- userDefinedErrorMap
- validateNewConnection
- validateNewConnectionRetryCount
- validateNewConnectionRetryInterval
- validateNewConnectionTimeout
자원 참조
애플리케이션은 데이터 소스에 액세스할 때 항상 자원 참조를 사용하도록 권장됩니다. 이를 통해 배치자가 대체하기가 쉬워집니다.
연결 공유
기본적으로 데이터 소스 정의에 대해 연결 요청은 기존의 사용 중인 연결이 해당 연결에 대해 원래 요청된 설정과 일치하는 경우 이를 공유할 수 있습니다(connectionSharing=MatchOriginalRequest). 또는, 연결 공유는 연결 요청을 연결의 현재 상태에 일치시켜서도 수행할 수 있습니다(connectionSharing=MatchCurrentState).
라이프사이클
데이터 소스 정의의 라이프사이클은 이를 정의하는 애플리케이션의 라이프사이클과 묶입니다. 따라서 서버를 다시 시작하지 않고 데이터 소스 정의를 변경하도록 애플리케이션을 업데이트할 수 있습니다. 여러 개의 애플리케이션이 동일한 데이터 소스 정의을 포함하는 경우, 예를 들어, 두 데이터 소스 정의가 모두 동일한 java:global 이름, 구성된 동일한 특성 세트 및 동일한 특성 값을 가지는 경우 모든 애플리케이션은 데이터 소스 정의를 업데이트하고 애플리케이션을 다시 설치하기 전에 설치 제거해야 합니다.
데이터 소스 정의 사이의 충돌
애플리케이션 모듈 및 컴포넌트는 다른 애플리케이션과 동일한 java:global 이름의 데이터 소스를 정의하지 않도록 주의해야 합니다. 이는 해당 프로세스가 애플리케이션이 공존할 수 없도록 하기 때문입니다. 애플리케이션 내에서 모듈 및 컴포넌트는 다른 모듈 또는 컴포넌트와 동일한 java:app 이름의 데이터 소스를 정의하지 않도록 주의해야 합니다. 충돌로 인해 애플리케이션 설치가 실패합니다. 모듈 내에서 컴포넌트는 다른 컴포넌트와 동일한 java:module 이름의 데이터 소스를 정의하지 않도록 주의해야 합니다. 충돌로 인해 애플리케이션 설치가 실패합니다. 웹 모듈 내에서 컴포넌트는 다른 컴포넌트와 동일한 java:comp 이름의 데이터 소스를 정의하지 않도록 주의해야 합니다. 충돌로 인해 애플리케이션 설치가 실패합니다.