Funktionen für Portierbarkeit des Datenzugriffs
Diese Schnittstellen arbeiten mit dem relationalen Ressourcenadapter (RRA, Relational Resource Adapter), um die Verwendung datenbankspezifischer Funktionen in Verbindungen zwischen dem Anwendungsserver und dieser Datenbank zu ermöglichen.
Dies bedeutet, dass Ihre Anwendungen auf Daten anderer Datenbanken zugreifen und datenbankspezifische Funktionen verwenden können, ohne dass hierzu Codeänderungen erforderlich wären. Darüber hinaus erlaubt Ihnen WebSphere Application Server, eine Datenquelle zu integrieren, die nicht durch die WebSphere-Persistenz unterstützt wird. Die Datenquelle muss jedoch als XADataSource oder ConnectionPoolDataSource implementiert werden und mit der JDBC-2.x-Spezifikation konform sein.
Sie können die Portierbarkeit der Anwendung herstellen, indem Sie wie folgt vorgehen:
- Schnittstelle DataStoreHelper
- Mit dieser Schnittstelle kann jede Datenspeicherplattform
auf ihre eigenen privaten, spezifischen Funktionen zugreifen, die von der Laufzeit
des relationalen Ressourcenadapters verwendet werden.
WebSphere Application Server stellt für jeden
unterstützten JDBC-Provider eine Implementierung bereit.
Außerdem stellt die Schnittstelle eine GenericDataStoreHelper-Klasse für nicht unterstützte Datenquellen zur Verfügung. Sie können die Klasse "GenericDataStoreHelper" oder andere von WebSphere bereitgestellte Helper-Klassen in Unterklassen unterteilen, um neue Datenquellen zu unterstützen.
Anmerkung: Wenn Sie den Datenzugriff mit einem benutzerdefinierten JDBC-Provider konfigurieren, dürfen Sie die Schnittstelle "DataStoreHelper" nicht direkt implementieren. Verwenden Sie eine Unterklasse der Klasse "GenericDataStoreHelper" oder eine Unterklasse der DataStoreHelper-Implementierungsklassen, die von IBM® bereitgestellt werden (falls das Verhalten Ihrer Datenbank oder die SQL-Syntax einer der bereitgestellten Klassen gleicht).Nähere Informationen finden Sie in der API-Dokumentation zur Klasse DataStoreHelper (siehe Liste im Index der API-Dokumentation).
Das folgende Codesegment veranschaulicht, wie eine neue DataStoreHelper-Klasse erstellt wird, um neue Fehlerzuordnungen für eine nicht unterstützte Datenquelle hinzuzufügen.
public class NewDSHelper extends GenericDataStoreHelper { public NewDSHelper(java.util.Properties dataStoreHelperProperties) { super(dataStoreHelperProperties); java.util.Hashtable myErrorMap = null; myErrorMap = new java.util.Hashtable(); myErrorMap.put(new Integer(-803), myDuplicateKeyException.class); myErrorMap.put(new Integer(-1015), myStaleConnectionException.class); myErrorMap.put("S1000", MyTableNotFoundException.class); setUserDefinedMap(myErrorMap); ... } }
- WSCallHelper-Klasse
- Diese Klasse stellt zwei Methoden bereit, die es Ihnen ermöglichen, anbieterspezifische
Methoden und Klassen zu verwenden, die nicht mit den Standard-JDBC-APIs konform sind (und nicht
in den Erweiterungspaketen von WebSphere Application Server enthalten sind).
- Methode jdbcCall()
Mit der statischen Methode jdbcCall() können Sie anbieterspezifische Methoden, die nicht den JDBC-Standards entsprechen, für Ihre JDBC-Objekte aufrufen. (Nähere Informationen finden Sie in der API-Dokumentation zu WSCallHelper.) Das folgende Codesegment veranschaulicht die Verwendung dieser Methode für eine DB2-Datenquelle:
Connection conn = ds.getConnection(); // Verbindungsattribut abrufen String connectionAttribute =(String) WSCallHelper.jdbcCall(DataSource.class, ds, "getConnectionAttribute", null, null); // setAutoClose auf "false" setzen WSCallHelper.jdbcCall(java.sql.Connection.class, conn, "setAutoClose", new Object[] { new Boolean(false)}, new Class[] { boolean.class }); // DataStoreHelper abrufen DataStoreHelper dshelper = WSCallHelper.getDataStoreHelper(ds);
- Methode jdbcPass()
Verwenden Sie diese Methode, um die von einigen Datenbankanbietern bereitgestellten, vom JCBC-Standard abweichenden Klassen zu verwenden. Diese Klassen enthalten Methoden, die erfordern, dass proprietäre JDBC-Objekte des Anbieters als Parameter übergeben werden.
Insbesondere Oracle-Implementierungen können die Verwendung solcher Klassen erfordern. Einige der in diesen Klassen enthaltenen Methoden sind im Folgenden aufgelistet:
oracle.sql.ArrayDescriptor ArrayDescriptor.createDescriptor(java.lang.String, java.sql.Connection) oracle.sql.ARRAY new ARRAY(oracle.sql.ArrayDescriptor, java.sql.Connection, java.lang.Object) oracle.xml.sql.query.OracleXMLQuery(java.sql.Connection, java.lang.String) oracle.sql.BLOB.createTemporary(java.sql.Connection, boolean, int) oracle.sql.CLOB.createTemporary(java.sql.Connection, boolean, int) oracle.xdb.XMLType.createXML(java.sql.Connection, java.lang.String)
Das folgende Codebeispiel veranschaulicht, wie jdbcPass verwendet wird, um die Oracle-Methode XMLType.createXML in einer Verbindung zu verwenden. Diese Oracle-Funktion erstellt aus den XML-Daten, die der Datenbank an Ihre Anwendung übergibt, ein XML-Objekt.
XMLType poXML = (XMLType)(WSCallHelper.jdbcPass(XMLType.class, "createXML", new Object[]{conn,poString}, new Class[]{java.sql.Connection.class, java.lang.String.class}, new int[]{WSCallHelper.CONNECTION,WSCallHelper.IGNORE}));
Weitere Beispiele zur Verwendung von jdbcPass und eine vollständige Liste der Methodenparameter finden Sie in der API-Dokumentation zur Klasse WSCallHelper. In diesem Information Center können Sie wie folgt auf die API-Dokumentation zugreifen:- Klicken Sie auf Referenz > Dokumentation zu Entwickler-APIs > Anwendungsprogrammierschnittstellen.
- Klicken Sie auf com.ibm.websphere.rsadapter .
- Klicken Sie unter der Überschrift "Klassenübersicht" auf WSCallHelper.
CAUTION: Die Verwendung der Methode jdbcPass() bewirkt, dass das JDBC-Objekt außerhalb der Schutzmechanismen von WebSphere Application Server verwendet wird. Wenn bestimmte Operationen (wie z. B. autoCommit oder Einstellungen für Transaktionsisolation festlegen usw.) losgelöst von diesen Schutzmechanismen ausgeführt werden, kann dies bei nachfolgender Verwendung dieser Poolverbindungen zu Problemen führen. IBM kann die Stabilität des Objekts nicht garantieren, wenn Sie diese Methode aufrufen. Es liegt in Ihrer Verantwortung, dass der Aufruf dieser Methode keine nachteiligen Auswirkungen auf das Objekt hat. Sie verwenden diese Methode auf eigenes Risiko.Aufgrund dieser potenziellen Probleme steuert WebSphere Application Server strikt, welche Methoden über die Unterstützung der Methode "jdbcPass()" aufgerufen werden können. Wenn Sie Unterstützung für eine Methode benötigen, die in diesem Dokument nicht aufgeführt wurde, wenden Sie sich an den Support für WebSphere Application Server.
- Methode jdbcCall()