Clientinformationen implizit definieren
Wenn Sie Clientinformationen in Ihrer Datenbank aufzeichnen, stehen Ihnen für die Übergabe der WebSphere Application Server-Clientdaten in Datenbankverbindungen zwei Möglichkeiten zur Verfügung.
- Sie möchten keine proprietären APIs verwenden oder
- Ihre Anwendung verwendet CMP (Container-Managed Persistence), sodass Sie mit der proprietären API keine Clientinformationen über Datenbankverbindungen festlegen können.
Die Tracefunktion von WebSphere Application Server bietet die Möglichkeit, Clientinformationen implizit zu definieren. Zum Aktivieren oder Inaktivieren der Übergabe von Clientinformationen können Sie eine von zwei speziellen Tracegruppen angeben: WAS.clientinfo oder WAS.clientinfopluslogging.
Mögliche Szenarien während der Laufzeit
- Gemeinsame Nutzung von Verbindungen
Wenn Verbindungen gemeinsam genutzt werden, definiert WebSphere Application Server die Clientinformationen nur in der ersten abgerufenen Verbindungskennung. Wenn die gemeinsame Nutzung von Verbindungen aktiviert ist und zwei getConnection-Methoden aufgerufen werden (was zwei Kennungen für eine Verbindung zur Folge hat), führt nur der erste Aufruf von getConnection zur Übergabe der Clientinformationen an die Back-End-Datenbank. Dieses Szenario gilt nicht für die explizite Übergabe von Clientinformationen, wo jede Methode setClientInformation unabhängig von der gemeinsam Verbindungsnutzung an die Datenbank weitergegeben wird.
- Implizite/explizite KoexistenzWenn Sie Clientinformationen sowohl explizit als auch implizit weitergeben, werden einige explizit und einige implizit definierte Informationen kombiniert. Die explizit gesetzten Informationen haben jedoch in der Regel Vorrang. Wenn die Anwendung beispielsweise die Accounting-Informationen des Clients auf "myAccountingInfo" setzt, sieht die letztlich an die Back-End-Datenbank übergebene accountingInfo-Zeichenfolge in etwa wie folgt aus:
Hier ist 000325 die Thread-ID und WSRdbManagedConnectionImpl@1234 die WebSphere-Verbindungsinstanz.000325_WSRdbManagedConnectionImpl@1234_myAccountingInfo:
- Zurücksetzen der Clientinformationen
Wenn in Application Server die Weitergabe von Clientinformationen konfiguriert ist, werden Clientinformationen zurückgesetzt, wenn eine Verbindung an den Pool zurückgegeben wird. Dies gilt jedoch nur, wenn die Traceverfahren WAS.clientinfo und WAS.clientinfopluslogging inaktiviert sind (d. h. WAS.clientinfo=all=disabled:WAS.clientinfopluslogging=all=disabled).
Bei der expliziten Methode werden die Informationen nur zurückgesetzt, wenn die Anwendung setClientInformation(null) für die WSConnection-Verbindung absetzt.
WAS.clientinfo
Die implizite Methode ist standardmäßig inaktiviert. Sie können diese Methode dynamisch, d. h., ohne den Anwendungsserver zu stoppen und zu starten, oder statisch durch Setzen der WebSphere Application Server-Tracegruppe WAS.clientinfo=all=enabled aktivieren.
Über die Datenbankverbindung werden
implizit der Benutzername, die Benutzerposition und der Anwendungsname erfasst und definiert.
Über die Datenbankverbindung werden
implizit die Thread-ID, der Benutzername, die Benutzerposition und der Anwendungsname erfasst und definiert.
Thread-ID
Ein achtstelliger Hexadezimalwert, der den Java-Thread identifiziert, der die Verarbeitung der Anwendungsanforderung in WebSphere Application Server steuert. Diese ID wird im Trace-Header angezeigt.
- Benutzername
- Der Name des Benutzers, der die Anwendungsanforderung eingeleitet hat. Diese Option wird erfasst und an die Back-End-Datenbank übergeben (sofern dies unterstützt wird). Die Erfassung der Informationen erfolgt durch das Aufrufen der Methode WSSecurityHelper.getFirstCaller.
- Benutzerposition
- Die Benutzerposition im Format Zelle:Knoten:Server. Diese Option wird erfasst und an die Back-End-Datenbank übergeben (sofern dies angemessen wird). Die Erfassung der Informationen erfolgt durch das Aufrufen der Methode WSSecurityHelper.getFirstServer.
- Anwendungsname
- Der Name der aktiven Anwendung. Dieser Wert ist die Ausgabe der Methode getApplication aus dem Java-EE-Namensobjekt. Dieser Wert wird unabhängig von der Einstellung der globalen Sicherheit erfasst.
WAS.clientinfopluslogging
Wenn Sie Datenbankfehler, z. B. Deadlocks, beheben, gibt es eine Reihe von Informationen zur Unterstützung des Debugging. Diese Informationen werden normalerweise abgerufen, indem ein WebSphere-RRA-Trace(Relational Resource Adapter) und ein EJB-Container-Trace (Enterprise JavaBeans) aktiviert werden. In einigen Fällen spielt jedoch die zeitliche Abfolge eine wichtige Rolle beim Reproduzieren eines Fehlers. Zu viele Traceinformationen können das (beispielsweise zeitliche) Verhalten der Anwendung ändern. Diese Änderung kann zur Folge haben, dass der Fehler nicht mehr auftritt.
- SQL-Zeichenfolgen, die ausgeführt werden (z. B. "select userId from tabl1 where id=? for update").
- Starten, Festschreiben und Zurücksetzen von Transaktionen
- EJB-Aufrufe (z. B. Create, Remove, findByPrimaryKey).