Ressourcendefinition für Datenquellen in Anwendungen
Anwendungen können Datenquellen in Annotationen oder im Implementierungsdeskriptor definieren. Dieser Artikel enthält eine Übersicht über die Ähnlichkeiten und die Kompatibilität mit Datenquellen von WebSphere Application Server, die auf Server-, Knoten-, Cluster- oder Zellenebene definiert sind. Optionale Features in den Datenquellendefinitionen werden ebenfalls erläutert.
Standardeigenschaften für die Datenquellendefinition
Annotationselement | Deskriptorelement | Kommentare |
---|---|---|
name | name | JNDI-Name für die Datenquelle. Bei dem Namen muss es sich um einen der Namespaces "java:global", "java:app", "java:module" oder "java:comp" handeln. |
className | class-name | Vollständig qualifizierter Klassenname aus dem JDBC-Treiber, der "javax.sql.XADataSource", "javax.sql.ConnectionPoolDataSource" oder "javax.sql.DataSource" implementiert. |
databaseName | database-name | Der Wert wird für den JDBC-Treiber bereitgestellt. |
description | description | Der Wert wird für die MBean "DataSource" bereitgestellt. |
initialPoolSize | initial-pool-size | Der Wert der Eigenschaft wird ignoriert. In WebSphere Application Server beträgt die Anfangspoolgröße immer 0. |
isolationLevel | isolation-level | Äquivalent zur angepassten Eigenschaft "webSphereDefaultIsolationLevel" von WebSphere Application Server. Dies ist eine standardmäßig festgelegte Transaktionsisolationsstufe für neue Verbindungen. |
loginTimeout | login-timeout | Der Wert wird für den JDBC-Treiber bereitgestellt. |
maxIdleTime | max-idle-time | Äquivalent zur Eigenschaft für Verbindungspooling "unusedTimeout" von WebSphere Application Server. Diese Eigenschaft wird in dem Client-Container, in dem das Verbindungspooling bereitgestellt wird, ignoriert. |
maxPoolSize | max-pool-size | Äquivalent zur Eigenschaft für Verbindungspooling "maxConnections" von WebSphere Application Server. Diese Eigenschaft wird in dem Client-Container, in dem das Verbindungspooling bereitgestellt wird, ignoriert. |
maxStatements | max-statements | Definiert die maximale Anzahl der Anweisungen für den Verbindungspool. In WebSphere Application Server verfügt jede gepoolte Verbindung über einen eigenen Anweisungscache. Folglich wird "maxStatements" (gleichmäßig und mit Abrunden) auf "maxPoolSize" für den Pool aufgeteilt. Wenn "maxPoolSize" unbegrenzt ("unlimited") ist, wird das Anweisungspooling inaktiviert. |
minPoolSize | min-pool-size | Äquivalent zur Eigenschaft für Verbindungspooling "minConnections" von WebSphere Application Server. Diese Eigenschaft wird in dem Client-Container, in dem das Verbindungspooling bereitgestellt wird, ignoriert. |
password | password | Standardkennwort für Verbindungsanforderungen, die kein Kennwort angeben. Sie sollten die Verwendung eines Authentifizierungsalias in Erwägung ziehen, anstatt den Benutzernamen und das Kennwort in der Anwendung fest zu codieren. |
portNumber | port-number | Der Wert wird für den JDBC-Treiber bereitgestellt. |
serverName | server-name | Der Wert wird für den JDBC-Treiber bereitgestellt. |
transactional | transactional | In WebSphere Application Server steuert die Eigenschaft "transactional", ob die Verbindung an JTA-Transaktionen beteiligt ist. Wenn die Einstellung "transactional=false" festgelegt ist, sind Verbindungen nicht an JTA-Transaktionen beteiligt, aber sie können trotzdem Transaktionen für die Datenbank ausführen, indem sie "autocommit=true" oder "connection.commit/rollback" mit "autocommit=false" verwenden. Bildet den Gegensatz zur angepassten Datenquelleneigenschaft "nonTransactionalDataSource" von WebSphere Application Server. |
url | url | Der Wert wird für den JDBC-Treiber bereitgestellt.Wenn die URL angegeben ist, werden Werte für "databaseName", "serverName" und "portNumber" ignoriert. |
user | user | Standardbenutzername für Verbindungsanforderungen, die keinen Benutzername angeben. Sie sollten die Verwendung eines Authentifizierungsalias in Erwägung ziehen, anstatt den Benutzernamen und das Kennwort in der Anwendung fest zu codieren. |
Anbieterspezifische Eigenschaften und angepasste Eigenschaften
In die Datenquellendefinition können anbieterspezifische Eigenschaften für den JDBC-Treiber aufgenommen werden. Außerdem können die meisten angepassten Eigenschaften für WebSphere Application Server in die Datenquellendefinition aufgenommen werden.
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Anbieterspezifische Eigenschaften für den Derby Embedded JDBC Driver:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Angepasste Eigenschaften für WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
Das folgende Beispiel zeigt, wie die Datenquellendefinition in den Implementierungsdeskriptor aufgenommen wird:
<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>
Nachfolgend ist eine Liste der angepassten
Eigenschaften für
WebSphere Application
Server aufgeführt, die auf diese Art und Weise konfiguriert werden können: - Eigenschaften für Verbindungspooling:
- agedTimeout
- authDataAlias
- authMechanismPreference
- connectionTimeout
- defaultConnectionTypeOverride
- globalConnectionTypeOverride
- mappingConfigAlias
- purgePolicy
- reapTime
- stuckThreshold
- stuckTime
- stuckTimerTime
- surgeCreationInterval
- surgeThreshold
- testConnection
- testConnectionInterval
- XA_RECOVERY_AUTH_ALIAS
- Angepasste Eigenschaften für Datenquellen:
- beginTranForResultSetScrollingAPIs
- beginTranForVendorAPIs
- connectionSharing
- enableMultithreadedAccessDetection
- errorDetectionModel
- freeResourcesOnClose
- oracleRACXARecoveryDelay (nur Oracle)
- preTestSQLString
- userDefinedErrorMap
- validateNewConnection
- validateNewConnectionRetryCount
- validateNewConnectionRetryInterval
- validateNewConnectionTimeout
Ressourcenreferenzen
Es wird empfohlen, dass die Anwendungen beim Zugriff auf Datenquellen immer Ressourcenreferenzen verwenden, da diese von der Implementierungsfunktion einfacher überschrieben werden können.
Gemeinsame Nutzung von Verbindungen
Standardmäßig gilt für eine Datenquellendefinition, dass eine Verbindungsanforderung eine vorhandene und bereits verwendete Verbindung dann ebenfalls nutzen kann, wenn sie mit den ursprünglich angeforderten Einstellungen für diese Verbindung übereinstimmt ("connectionSharing=MatchOriginalRequest"). Alternativ dazu kann eine gemeinsame Nutzung von Verbindungen ermöglicht werden, indem die Verbindungsanforderung dem aktuellen Status der Verbindung zugeordnet wird ("connectionSharing=MatchCurrentState").
Lebenszyklus
Der Lebenszyklus einer Datenquellendefinition ist an den Lebenszyklus der Anwendungen gebunden, von denen sie definiert wird. Daher können Sie Ihre Anwendung aktualisieren, um die Datenquellendefinition zu ändern, ohne dass ein Serverneustart erforderlich ist. Wenn mehrere Anwendungen dieselbe Datenquellendefinition enthalten, z. B. wenn beide Datenquellendefinitionen identische "java:global"-Namen haben, für beide identische Eigenschaften und identische Werte für diese Eigenschaften konfiguriert sind, müssen zunächst alle Anwendungen deinstalliert und anschließend die Datenquellendefinition aktualisiert und die Anwendungen erneut installiert werden.
Konflikte zwischen Datenquellendefinitionen
In Anwendungen, Modulen und Komponenten sollte darauf geachtet werden, dass keine Datenquellen mit identischen "java:global"-Namen definiert werden, da der Prozess eine Koexistenz von Anwendungen unmöglich macht. Innerhalb einer Anwendung und innerhalb von Modulen und Komponenten sollten keine Datenquellen definiert werden, deren "java:app"-Name identisch ist mit dem eines anderen Moduls oder einer anderen Komponente. Ein solcher Konflikt würde dazu führen, dass die Anwendungsinstallation scheitert. Innerhalb eines Moduls sollten Komponenten keine Datenquellen definieren, deren "java:module"-Name identisch ist mit dem anderer Komponenten. Ein solcher Konflikt würde dazu führen, dass die Anwendungsinstallation scheitert. Innerhalb des Webmoduls, sollten Komponenten keine Datenquellen definieren, deren "java:comp"-Name identisch ist mit dem anderer Komponenten. Ein solcher Konflikt würde dazu führen, dass die Anwendungsinstallation scheitert.