Persistenzprovider und Datenquellen zuordnen
JPA-Anwendungen (Java™ Persistence API) bieten Ihnen die Möglichkeit, die zu Grunde liegende Datenquelle anzugeben, die der Persistenzprovider für den Zugriff auf die Datenbank verwendet.
Informationen zu diesem Vorgang
Vorgehensweise
- Geben Sie den JNDI-Namen (Java Naming and Directory Interface) explizit in der Datei
persistence.xml an, und die Anwendung wird die Datenquelle direkt referenzieren. Der Wechsel zu einer anderen Datenquelle erfordert eine Aktualisierung der Datei
persistence.xml. JPA verfügt über zwei transaktionsorientierte Muster für den Zugriff auf eine Datenquelle:
- Das JTA-Ressourcenmuster (Java Transaction API) ist von globalen Transaktionen abhängig. Das JTA-Ressourcenmuster wird in der Regel im Geltungsbereich einer EJB-Sitzungsfassade (Enterprise JavaBeans) eingesetzt. Es ermöglicht der Session-Bean die Steuerung der Transaktions- und Sicherheitskontexte, während JPA für die Persistenzzuordnungen zuständig ist. In diesem Fall verwendet die Anwendung nicht die Schnittstelle "EntityTransaction", sondern verwendet den für die globale Transaktion registrierten EntityManager.
- Das Nicht-JTA-Ressourcenmuster wird dann eingesetzt, wenn eine einzelne Ressource
verwendet wird und keine globalen Transaktionen existieren.
Das Nicht-JTA-Ressourcenmuster wird in der Regel im Geltungsbereich einer Webanwendung oder eines Anwendungsclients eingesetzt.
Die Anwendung steuert die Transaktion mit der Datenquelle über die Schnittstelle
"EntityTransaction". Wenn Sie im Anwendungsserver das Element <non-jta-data-source> verwenden, ist für eine nicht transaktionsorientierte Datenquelle eine spezielle Konfiguration erforderlich. Die für den Anwendungsserver konfigurierten Datenquellen funktionieren nicht als <non-jta-data-source>, weil alle vom Anwendungsserver konfigurierten Datenquellen automatisch beim aktuellen Transaktionskontext registriert werden. Um diese automatische Registrierung zu vermeiden, fügen Sie eine zusätzliche angepasste Datenquelleneigenschaft nonTransactionalDataSource=true hinzu:
- Wählen Sie Ressourcen > JDBC > Datenquellen aus.
- Wählen Sie den Namen der Datenquelle aus, die Sie konfigurieren möchten.
- Wählen Sie unter Weitere Eigenschaften den Eintrag Eigenschaften der WebSphere-Datenquelle aus.
- Wählen Sie Nicht transaktionsorientierte Datenquelle aus.
- Klicken Sie auf OK.
Fehler vermeiden: Die JPA-Spezifikation setzt voraus, dass Verbindungen mit einer Isolationsstufe abgerufen werden, die keine langen Sperren in der Datenbank setzen, wie z. B. READ_COMMITTED. Diese Isolationsstufe stimmt möglicherweise nicht mit der Standardisolationsstufe von WebSphere Application Server überein, die bei den meisten Datenbanken auf REPEATABLE_READ eingestellt ist. Welche Stufe für Ihre Datenbank verwendet wird, können Sie im Artikel "Voraussetzungen für die Festlegung der Isolationsstufe" nachlesen.
Wenn READ_COMMITTED nicht die Standardeinstellung für Ihre Datenbank ist, können Sie die Standardeinstellung ändern, indem Sie eine zusätzliche angepasste Datenquelleneigenschaft "webSphereDefaultIsolationLevel" hinzufügen.Wenn die Isolationsstufe auf einen Wert eingestellt ist, der lange Lesesperren setzt, müssen Sie den JPA-Provider so konfigurieren, dass er pessimistische Sperren an Stelle der standardmäßig verwendeten optimistischen Sperren verwendet.Tabelle 1. Werte für die Isolationsstufe. Diese Tabelle enthält die gültigen Isolationsstufen. Wert Isolationsstufe 1 READ_UNCOMMITTED 2 READ_COMMITTED (JPA-Standardwert) 4 REPEATABLE_READ (Standardwert in WebSphere Application Server) 8 SERIALIZABLE Für EclipseLink verwenden Sie die folgende Eigenschaft in der Datei persistence.xml:<property name=”eclipselink.pessimistic-lock” value=”Lock”/>
Für OpenJPA verwenden Sie die folgenden Eigenschaften in der Datei persistence.xml:gotcha<property name="openjpa.Optimistic" value="false"/> <property name="openjpa.LockManager" value=pessimistic"/>
Die Spezifikation JPA bestimmt, dass die Datenquellen, die in den Elementen <jta-data-source> und <non-jta-data-source> einer Persistenzeinheit definiert sind, im JNDI-Namespace registriert werden.
Beispielsweise sollte die Datei persistence.xml einen Eintrag ähnlich dem folgenden enthalten:<jta-data-source>jdbc/DataSourceJNDI</jta-data-source>
- Die JPA-Lösung für WebSphere Application Server erweitert die JNDI-Datenquellenimplementierung,
um Ihnen die Referenzierung von Datenquellen im Komponentennamespace zu ermöglichen. In der Implementierungsdeskriptordatei des EJB- oder Webmoduls ist dies das Element
<resource-ref>.
Sie können der Datenquelle das Präfix "java:comp/env/" voranstellen, sodass die Anwendung die Datenquelle indirekt, durch Verwendung des lokalen JNDI-Namens, referenziert.
In dieser Konstellation erfordert die Anwendung keine Aktualisierung. Sie ändern das Element
<resource-ref> in der Weise, dass es eine andere Datenquelle verwendet.
Sehen Sie sich das folgende Beispiel an:
<jta-data-source>java:comp/env/jdbc/DataSourceJNDI</jta-data-source>
Nächste Schritte
Informationen zur Konfiguration von Datenquellen finden Sie im Artikel zur Erstellung und Konfiguration einer Datenquelle.
Zugehörige Konzepte:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_defjpadatasource
Dateiname:tejb_defjpadatasource.html