SharedResourcePowerServer

Nativer und generierter Java™-Code kann nun Datenbankverbindungen gemeinsam nutzen; damit können Sie Datenbankänderungen festschreiben, die zuvor in einer Ausführungseinheit vorgenommen wurden, die beide Arten von Code enthält. Um diese Funktionalität zu aktivieren, verwenden Sie die folgende PowerServer-Java-Klasse und den gleichnamigen externen EGL-Typ: SharedResourcePowerServer.

Ein Objekt dieses Typs, das es den nativen und generierten Java-Programmen ermöglicht, eine Gruppe von Datenbankverbindungen gemeinsam zu nutzen. Die Verbindungsgruppe wird durch zwei Mechanismen festgelegt:

Wenn Sie EGL-Code erstellen, können Sie auf ein SharedResourcePowerServer-Objekt zugreifen, indem Sie JavaLib.getSharedResourcePowerServer aufrufen. Sie haben möglicherweise nur Verbindungen im aktuellen EGL-Programm erstellt. Zum Bereitstellen des Verbindungsdetails übergeben Sie das Objekt jedoch an den nativen Java-Code. Dieser Mechanismus der gemeinsamen Nutzung funktioniert unabhängig davon, ob Sie auf den nativen Java-Code über einen externen Typ zugreifen oder über eine Java-Zugriffsfunktion, die in der Systembibliothek JavaLib bereitgestellt wird.

In diesem Abschnitt werden nur die folgenden Methoden von SharedResourcePowerServer beschrieben:

Diese Methoden sind in Bezug auf SharedResourcePowerServer eindeutig und sind zusätzlich zu den Methoden verfügbar, die entweder von PowerServer oder SharedResourcePowerServer bereitgestellt werden. Eine Übersicht zur Verwendung eines Objekts dieser beiden Typen in nativem Java-Code finden Sie unter Java wrapper classes."

Weitere Details finden Sie in Weitere Hinweise.

addConnection

Mit der Methode "addConnection" wird eine Datenbankverbindung hinzugefügt und in den von EGL generierten Programmen als aktuelle Verbindung angegeben. Wenn die Methode "addConnection" wiederholt aufgerufen wird, bleibt eine in einem früheren Aufruf angegebene Verbindung verfügbar bis diese Verbindung geschlossen wird.

public void addConnection( Connection con, String name, int disconnectOption ) 
		throws NullPointerException, IllegalArgumentException, JavartException
con
Eine Verbindung zu der Art von Datenbank, die in der DBMS-Builddeskriptoroption des Programms angegeben wurde. Eine Verbindung entspricht dem Typ java.sql.Connection.
name
Der Name, den Sie dieser Verbindung zuordnen. Sie verwenden den Namen, wenn Sie SQLLib.setCurrentDatabase, SQLLib.beginDatabaseTransaction, SQLLib.defineDatabaseAlias oder SQLLib.disconnect aufrufen.
disconnectOption
Einer der folgenden SharedResourcePowerServer-Klassenwerte:
DISCONNECT_NEVER
Die EGL-Laufzeit schließt die Verbindung nie.

Dies ist im Wesentlichen der Standardwert. Bei der Variante der überladenen Methode gibt es nur zwei Parameter, wobei DISCONNECT_NEVER automatisch bereitgestellt wird.

DISCONNECT_AUTOMATIC
Die Verbindung wird durch einen Aufruf von SQLLib.disconnect, SQLLib.disconnectAll, SysLib.commit, SysLib.rollback oder durch einen Aufruf einer der folgenden SharedResourcePowerServer-Methoden geschlossen: commit oder rollBack.
DISCONNECT_CONDITIONAL
Die Verbindung wird auf eine der folgenden Arten geschlossen:
  • Durch einen Aufruf von SQLLib.disconnect, SQLLib.disconnectAll oder SysLib.rollback.
  • Durch einen Aufruf von SysLib.commit, wenn die Option HOLD für keine der offenen Ergebnismengen wirksam ist, die von der Verbindung erstellt wurden.
  • Durch einen Aufruf einer der folgenden SharedResourcePowerServer-Methoden: commit oder rollBack.
DISCONNECT_EXPLICIT
Die Verbindung wird durch einen Aufruf von SqlLib.disconnect, SqlLib.disconnectAll oder durch einen Aufruf der SharedResourcePowerServer-Schließmethode geschlossen./
Die Methode löst die folgenden Ausnahmen aus:
  • NullPointerException, wenn con oder name null ist.
  • IllegalArgumentException, wenn name leer ist oder nur aus Leerzeichen besteht oder wenn disconnectionOption ungültig ist.
  • JavartException, wenn die Verbindung nicht verwendet werden kann.

getConnection

Die Methode "getConnection" gibt die benannte Verbindung zurück oder null, wenn keine Verbindung mit dem jeweiligen Namen vorhanden ist.

public Connection getConnection( String name ) throws JavartException
name
Name der Verbindung.

Die zurückgegebene Verbindung entspricht dem Typ java.sql.Connection. Die Methode löst eine Ausnahmebedingung "JavartException" nach einem internen Fehler aus.

getConnections

Die Methode "getConnections" gibt ein Mapobjekt zurück, das die Namen aktiver Verbindungen mit den Objekten des Typs java.sql.Connection verbindet. Sie können das zurückgegebene Mapobjekt nicht ändern, das dem Typ java.util.Map entspricht.

public Map <String, Connection> getConnections() throws JavartException

Die Methode löst eine Ausnahmebedingung "JavartException" nach einem internen Fehler aus.

getCurrentConnection

Die Methode "getCurrentConnection" gibt die aktive Verbindung zurück oder null, wenn eine aktuelle Verbindung nicht wirksam ist.

public Connection getCurrentConnection() throws JavartException

Die zurückgegebene Verbindung entspricht dem Typ java.sql.Connection. Die Methode löst eine Ausnahmebedingung "JavartException" nach einem internen Fehler aus.

releaseConnection

Die Methode "releaseConnection" schließt das Verbindungsobjekt, wenn die Verbindung offen ist und die Option für Verbindungsabbruch nicht DISCONNECT_NEVER entspricht. Auch wenn die Option für Verbindungsabbruch DISCONNECT_NEVER entspricht oder die Verbindung bereits geschlossen ist, kann die EGL-Laufzeit der Verbindung zugeordnete Ressourcen freigeben.

Es stehen zwei Varianten dieser Methode zur Verfügung:

public void releaseConnection( String name ) throws JavartException, SQLException


public void releaseConnection( Connection con ) throws JavartException, SQLException
name
Name der Verbindung.
con
Das Verbindungsobjekt, das dem Typ java.sql.Connection entspricht.
Die Methode löst die folgenden Ausnahmen aus:
  • SQLException, wenn das Datenbankmanagementsystem einen Fehler zurückgibt.
  • JavartException, wenn ein interner Fehler auftritt.

Weitere Hinweise

Einige Hinweise betreffen das Arbeiten mit einem Objekt des Typs SharedResourcePowerServer:
  • Wenn Sie eine Verbindung in Ihrem nativen Java-Code schließen, geben Sie die Ressourcen frei, indem Sie eine der releaseConnection-Methoden aufrufen.
  • Beachten Sie beim Erstellen des nativen Java-Codes, dass Laufzeitfehler in der folgenden Situation möglich sind: Eine Verbindung wird in Ihrem generierten Java-Code verwendet. Der native Java-Code schließt entweder die Verbindung oder führt eine Festschreibung oder einen Rollback durch und der generierte Code verwendet die Verbindung erneut. Beispiel:
    1. Der generierte Code gibt eine Anweisung PREPARE aus, ruft nativen Java-Code entweder über einen externen Typ auf oder über die JavaLib-Zugriffsfunktion und übergibt ein Objekt, das von der Funktion JavaLib.getSharedResourcePowerServer bereitgestellt wurde.
    2. Der native Code schließt die Verbindung und gibt die Steuerung an den generierten Code zurück.
    3. Der generierte Code verwendet die Anweisung, die zuvor von der Anweisung PREPARE erstellt wurde. Der generierte Code schlägt jedoch fehl, da die vorbereitete Anweisung zuvor geschlossen wurde als die Verbindung geschlossen wurde.
  • Ihre EGL-Logik ordnet dem SharedResourcePowerServer-Objekt möglicherweise mehrere Verbindungen zu. Standardmäßig verwenden EGL-Anweisungen die letzte an powerServer.addConnection() übergebene Verbindung. Sie können eine neue Verbindung auswählen, indem Sie SQLLib.setCurrentDatabase aufrufen.
  • Aufrufe von SysLib.commit oder SysLib.rollback wirken sich auf alle Verbindungen aus, die einem SharedResourcePowerServer-Objekt zugeordnet wurden. Es kann jedoch folgende Situation eintreten: Die EGL-Laufzeit schreibt eine an einer einleitenden Verbindung vorgenommene Änderung fest, es tritt jedoch ein Problem auf und das Festschreiben einer Änderung an einer zweiten Verbindung schlägt fehl. Nach dem Fehlschlagen verbleiben die Daten in einem inkonsistenten Status, da es sich bei dem Festschreiben um eine einphasige Festschreibung und nicht um eine zweiphasige Festschreibung handelt, sodass alle Ressourcen festgeschrieben werden oder keine.
  • Generierter Code kann eine Verbindung nur in dem Thread verwenden, in dem die Verbindung erstellt wurde.

Feedback