Angepasste DataStoreHelper-Klasse entwickeln

Zum Erstellen einer eigenen Helper-Klasse für den Datenspeicher für Datenquellen, die vom Anwendungsserver nicht unterstützt werden, wenden Sie die WebSphere-Erweiterung, die Klasse "GenericDataStoreHelper", an. Mit Hilfe dieser Helper-Klasse kann Ihre JDBC-Konfiguration während der Transaktionen datenbankspezifische Funktionen ausführen.

Vorbereitende Schritte

Wenn Sie eine Konfiguration mit einer Datenquelle verwenden, die der Anwendungsserver unterstützt, können Sie einen angepassten Helper für Datenspeicher erstellen. Dieser Helper ermöglicht Ihnen, die Datenbank zu nutzen, um während einer Transaktion Funktionen auszuführen, die ansonsten nicht verfügbar sind. Sie müssen eine benutzerdefinierte DataStoreHelper-Klasse erstellen, und es werden Informationen zum Erstellen einer neuen Ausnahmebehandlungsroutine bereitgestellt, der alle Ausnahmen abfängt, die bei der Verwendung der angepassten Ausnahmebehandlungsroutine erstellt werden können.

Informationen zu diesem Vorgang

Veraltetes Feature Veraltetes Feature: Das Konstantenfeld CUSTOM_HELPER in der API der Klasse "com.ibm.websphere.rsadapter.DataStoreHelper" ist veraltet. Wenn Sie eine eigene "DataStoreHelper"-Implementierungsklasse erstellen, sollten Sie "setHelperType(DataStoreHelper.CUSTOM_HELPER)" nicht aufrufen. Überlassen Sie die Einstellung des Werts für "HelperType" stattdessen der Implementierungsklasse, deren Einstellungen übernommen werden.depfeat

Vorgehensweise

  1. Erstellen Sie eine Klasse, die die vorhandenen Datenspeicher-Helper erweitert. Verwenden Sie den folgenden Code als Beispiel. Dieser Typ von Datenquelle basiert auf einem angepassten JDBC-Provider:
    package com.ibm.websphere.examples.adapter;
    
    import java.sql.SQLException;
    import javax.resource.ResourceException;
    
    import com.ibm.websphere.appprofile.accessintent.AccessIntent;
    import com.ibm.websphere.ce.cm.*;
    import com.ibm.websphere.rsadapter.WSInteractionSpec;
    
    /**
    * Beispiel für DataStoreHelper-Klasse, das veranschaulicht, wie ein benutzerdefinierter
    * DataStoreHelper erstellt wird. Die Implementierung für die einzelnen Methoden wird nur als
    * Beispiel bereitgestellt.  Für jeden benutzerdefinierten DataStoreHelper, der von einer
    * realen Anwendung verwendet wird, sind wahrscheinlich mehr Daten erforderlich.
    * In diesem Beispiel wird "doStatementCleanup(),getIsolationLevel()" überschrieben und
    * eine benutzerdefinierte Ausnahmezuordnung definiert.
    */
    public class ExampleDataStoreHelper extends com.ibm.websphere.rsadapter.GenericDataStoreHelper
    {
    
        public ExampleDataStoreHelper(java.util.Properties props)
        {
            super(props);
    
            // Die DataStoreHelperMetaData-Werte für diese Helper-Funktion aktualisieren.
            getMetaData().setGetTypeMapSupport(false);
    
            // Die Zuordnungen von Ausnahmen für diese Helper-Funktion aktualisieren.
            java.util.Map xMap = new java.util.HashMap();
    
            // Eine Zuordnung von Fehlercodes zur StaleConnectionException hinzufügen.
            xMap.put(new Integer(2310),  StaleConnectionException.class);
            // Eine Zuordnung von Fehlercodes zur DuplicateKeyException hinzufügen.
            xMap.put(new Integer(1062),  DuplicateKeyException.class);
            // Eine Zuordnung des SQL-Status zur benutzerdefinierten ColumnNotFoundException hinzufügen.
            xMap.put("S0022",            ColumnNotFoundException.class);
            // Eine übernommene Zuordnung des SQL-Status der StaleConnection rückgängig machen.
            xMap.put("S1000",            Void.class);
    
            setUserDefinedMap(xMap);
    
            // Wenn Sie eine Helper-Klasse erweitern, ist es
            // normalerweise nicht erforderlich, 'getMetaData().setHelperType(...)'
            // abzusetzen, weil die angepasste Helper-Klasse den Helper-Typ
            // der übergeordneten Klasse übernimmt.
                              
    
             }
    
        public void doStatementCleanup(java.sql.PreparedStatement stmt) throws SQLException
        {
            // Die Anweisung bereinigen, damit sie zwischengespeichert und wieder verwendet werden kann.
    
            stmt.setCursorName("");
            stmt.setEscapeProcessing(true);
            stmt.setFetchDirection(java.sql.ResultSet.FETCH_FORWARD);
            stmt.setMaxFieldSize(0);
            stmt.setMaxRows(0);
            stmt.setQueryTimeout(0);
        }
    
    
    
        public int getIsolationLevel(AccessIntent intent) throws ResourceException
        {
            // Eine auf dem AccessIntent basierende Isolationsstufe festlegen.
    
            // WebSphere-Standardisolationsstufe auf TRANSACTION_SERIALIZABLE setzen
            if (intent == null) return java.sql.Connection.TRANSACTION_SERIALIZABLE;
    
            return intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_OPTIMISTIC ?
                   java.sql.Connection.TRANSACTION_READ_COMMITTED :
                   java.sql.Connection.TRANSACTION_REPEATABLE_READ;
        }
            public int getLockType(AccessIntent intent) {
               if ( intent.getConcurrencyControl() == AccessIntent.CONCURRENCY_CONTROL_PESSIMISTIC) {
                  if ( intent.getAccessType() == AccessIntent.ACCESS _TYPE_READ ){
                      return WSInteractionSpec.LOCKTYPE_SELECT;
                  }
                  else {
                      return WSInteractionSpec.LOCKTYPE_SELECT_FOR_UPDATE;
                   }
               }
               return WSInteractionSpec.LOCKTYPE_SELECT;
            }
    }
  2. Optional: Erstellen Sie eine eigene Klasse für Ausnahmebehandlungsroutinen. Verwenden Sie den folgenden Code als Leitfaden:
    package com.ibm.websphere.examples.adapter;
    
    import java.sql.SQLException;
    import com.ibm.websphere.ce.cm.PortableSQLException;
    
    /**
    * Beispiel für PortableSQLException-Unterklasse, das veranschaulicht, wie eine
    * benutzerdefinierte Ausnahme für die Zuordnung von Ausnahmen erstellt wird.
    */
    public class ColumnNotFoundException extends PortableSQLException
    {
        public ColumnNotFoundException(SQLException sqlX)
        {
            super(sqlX);
        }
    }
  3. Kompilieren Sie die neu erstellten DataStoreHelper-Klassen. Für die Kompilierung müssen die folgenden JAR-Dateien im Klassenpfad enthalten sein:
    • Wenn Sie eine Entwicklungsumgebung wie Eclipse verwenden, müssen Sie diese JAR-Dateien im Klassenpfad definieren, um die Kompilierung durchzuführen. Nachdem Sie Ihre Dateien bearbeitet haben, erstellen Sie eine JAR-Datei des Projekts. Spezifische Anweisungen finden Sie in der Hilfedokumentation zu Ihrer Entwicklungsumgebung.
    • Wenn Sie keine Entwicklungsumgebung haben und den Javac-Compiler verwenden, gehen Sie wie folgt vor:
      1. Erstellen Sie, wie in Schritt 1 gezeigt, eine Datei mit der Erweiterung ".java", die "GenericDataStoreHelper" erweitert.
      2. Wechseln Sie nach der Bearbeitung der Dateien im Befehlszeilendienstprogramm in Ihr Ausgangsverzeichnis.
      3. Setzen Sie den Klassenpfad mit dem folgenden Befehl:
        [Windows]
        set CLASSPATH=%CLASSPATH%;Stammverzeichnis_des_Anwendungsservers\dev\JavaEE\j2ee.jar;Stammverzeichnis_des_Anwendungsservers\dev\was_public.jar;Stammverzeichnis_des_Anwendungsservers\plugins\com.ibm.ws.runtime.jar
        [AIX][HP-UX][Linux][Solaris]
         set CLASSPATH=$CLASSPATH:Stammverzeichnis_des_Anwendungsservers/dev/JavaEE/j2ee.jar:Stammverzeichnis_des_Anwendungsservers/dev/was_public.jar:Stammverzeichnis_des_Anwendungsservers/plugins/com.ibm.ws.runtime.jar
      4. Kompilieren Sie Ihre Klassen. Geben Sie beispielsweise unter Windows-Betriebssystemen den folgenden Befehl ein (dieser Befehl kompiliert alle Dateien mit der Erweiterung ".java" im angegebenen Verzeichnis):
        C:\javac Ihr_Verzeichnis\*.java
      5. Erstellen Sie über das Verzeichnis Java eine JAR-Datei aller kompilierten Klassendateien in Ihrem Verzeichnis. Geben Sie beispielsweise den folgenden Befehl unter Windows-Betriebssystemen ein (ändern Sie myFile in den gewünschten Namen für Ihre JAR-Datei):
         C:\Java> jar cf myFile.jar *.class
        Weitere Informationen zur Verwendung des Javac-Compilers finden Sie auf der Oracle-Website zum Java-Compiler.
  4. Kopieren Sie Ihre kompilierten JAR-Dateien in ein Verzeichnis, und aktualisieren Sie den Klassenpfad für den JDBC-Provider so, dass er diese Position enthält. Wenn Ihre JAR-Datei den Namen c:\myFile.jar hat, müssen Sie den Klassenpfad ändern und c:\myFile.jar einfügen.
    1. Klicken Sie auf Ressourcen > JDBC > JDBC-Provider > JDBC-Provider.
    2. Fügen Sie im Feld Klassenpfad die Position der kompilierten JAR-Dateien hinzu. Positionieren Sie den Cursor in dem Feld, drücken Sie die Eingabetaste, und fügen Sie eine neue Zeile hinzu:
      c:\myFile.jar
  5. Konfigurieren Sie den Anwendungsserver für die Verwendung der neuen angepassten DataStoreHelpe-Klasse.
    1. Wählen Sie in der Administrationskonsole Ressourcen > JDBC > Datenquellen aus.
    2. Wählen Sie die Datenquelle aus, die Sie mit der angepassten DataStoreHelper-Klasse konfiguieren möchten.
    3. Wählen Sie im Abschnitt Name der Helper-Klasse für Datenspeicher die Option Benutzerdefinierte Helper-Klasse für Datenspeicher angeben aus.
    4. Geben Sie den Klassennamen für die erstellte Helper-Klasse für Datenspeicher ein.
    5. Wenden Sie Ihre Änderungen an und wählen Sie OK aus.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tdat_cusdatstore
Dateiname:tdat_cusdatstore.html