Java und DB2 - VSIS Homepage · – Specifies whether the java.sql.ResultSet.TYPE_SCROLL_SENSITIVE value maps to the SENSITIVE DYNAMIC attribute, the SENSITIVE STATIC attribute, or
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
– Specifies accounting information for the current client for the connection. This information is for client accounting purposes. This value can change during a connection.
� currentPackageSet
– Specifies the collection ID to search for DB2 packages for the DB2 Universal JDBC Driver. The data type of this property is String. The default is NULLID for Universal Driver type 4 connectivity.
� cursorSensitivity
– Specifies whether the java.sql.ResultSet.TYPE_SCROLL_SENSITIVE value maps to the SENSITIVE DYNAMIC attribute, the SENSITIVE STATIC attribute, or the ASENSITIVE attribute for the underlying DB2 cursor.
� accountingInterval
� deferPrepares, keepDynamic
� maxRowsetSize (T2) or useRowsetCursor (T4) for MultiRowFetch
Auftreten des Object-relational Impedance Mismatch im Java Umfeld
SQL
Java Objekt Datenbanktabelle
� Java arbeitet aktiv auf ganzheitlichen Datenstrukturen in Form von Objekten.
� Im Gegensatz dazu wird bei prozeduralen Ansätzen wird meist nur mit passiven, unvollständigen Datenstrukturen in Form von einzelnen Variablen gearbeitet.
Unverträglichkeit zwischen Programm und Datenbank?
Das Look and Feel von Data Studio unterscheidet sich nicht von Eclipse
Databank-Objekte
browsen
Mit XML Files
arbeiten
Datenbrowsen
SQL Querieserstellen
Aktuell basierend auf Eclipse 3.4.2 und dem Data Tools Platform (DTP) Framework
| IBM Software Group | System z |
28Java Programmierung mit DB2 z/OS
Optim Development Studio bietet zahlreiche Datenbankfunktionalitäten
And much more....
Data Web Services
SQL Editor
SQL Builder
Visual Explain
Stored Procedures
Data Source Expl.
User Def. Functions
SQLJ deployment
SQLJ development
Basic Java Editor
Value distribution
pureXML Support
pureQuery Tools
Impact Analyse
JPA ToolingConfig. Repository
15
| IBM Software Group | System z |
29Java Programmierung mit DB2 z/OS
Mit pureQuery Funktionalitäten für SQL Unterstützung im Java Editor
pureQuery Tools
� Wie im SQL Editor bietet Optim Development Studio im regulären Java Editor Content Assist, Syntax Vali-dation und Automatische Formatierung für SQL Statements.
� SQL Statements können bereits vor der Kompilierung und vor dem Deployment der zugrunde liegenden Java Anwendungen getestet werden.
� Die pureQuery Outline ermöglicht eine graphische Verlinkung von SQLStatements zum Java Source Code, Databankobjekten oder DB2 Packages.
� DDL, Java Code oder XML Mappingskönnen automatisch generiert werden basierend auf SQL Statements, Daten-bankobjekten oder Java Objekten.
| IBM Software Group | System z |
30Java Programmierung mit DB2 z/OS
Was ist JDBC
� Java Database Connectivity (JDBC) ist eine standardisierte Programmierschnitt-stelle (API) von Java für den Zugriff auf relationale Datenbanken.
� Die API Definition wird weiterentwickelt im Java Community Process (beteiligt sind u.a. IBM, Sun/BEA Systems/Oracle, SAP, MySQL, Sybase…).
� Aktuelle Versionen sind die JDBC 3.0 API (enthalten ab JSE 1.42) sowie JDBC 4.0 API (enthalten ab JSE 6.0).
� Java Anwendungen, die mit JDBC auf DB2 for z/OS zugreifen, verwenden i.d.R. dynamisches SQL.
16
| IBM Software Group | System z |
31Java Programmierung mit DB2 z/OS
Für JDBC Anwendungen relevante Java Packages und Klassen
JDBC Basis:
java.sql – Enthält die Kernbestandteile der JDBC API.
Optionale JDBC Erweiterungen:
javax.sql – Erweitert die JDBC API v.a. für serverbasierte Java Anwendungen.
Die JDBC Klasse ResultSet dient dem Ergebnishandling in Java
� Nimmt das Ergebnisset einer SQL Query auf und nutzt den zugehörigenCursor im DB2 zum Durchlaufen der einzelnen Datensätze des Ergebnisses.
� Datenabfrage erfolgt auf Row-Ebene und über entsprechende methoden, z.b. resultset.next() oder bei scrollable cursors first(), last(), previous()…
� Die Ergebnisse einer Query werden von der Datenbank in einem sog. Cursor bereitgestellt. In JDBC wird dieser Cursor in Form des ResultSets abgebildet.
String stmtString = "SELECT LASTNAME FROM DSN8910.EMP WHERE EMPNO < '000110'";
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
con = DriverManager.getConnection(urlString, "ZUSER29", args[0]);
stmt = con.createStatement();
rs = stmt.executeQuery(stmtString);
while (rs.next()) {
System.out.println(rs.getString("LASTNAME"));
}
//Erzeugen eines Statement Objekts
//Ausführen des SQL Statements
//Verbindungsaufbau
//Verarbeiten des Ergebnisses
//Deklaration der JDBC Variablen
//Aufbau einer logischen Verbindung zum JDBC Treiber
//Dieser baut eine physische Verbindung zu DB2 auf
//Threadzuordnung durch DB2 bei Transaktionsbeginn
//Ggf. Inaktivierung des Threads bei Nichtbenutzung
//Prüfen des Statements und Ermittlung des Zugriffspfads
//Definition des Ergebnissets und des zugehörigen Cursors
//Positionieren des Cursors und Abrufen der Daten einer Row
| IBM Software Group | System z |
36Java Programmierung mit DB2 z/OS
Multi-row Fetch kommt zum Einsatz beim resultset.next() Call
� Durch Verwendung des Multi-row Fetch Netzwerktraffic und Datenbankcalls durch den JCC Driver vermeiden.
� Wird i.d.R. automatisch und transparent für die Anwendung verwendet.
� Nachprüfbar über Abfrage der Properties oder JDBC Trace Files.
19
| IBM Software Group | System z |
37Java Programmierung mit DB2 z/OS
Nachteile der Verwendung des einfachen Statement Objekts
� Der Dynamic Statement Cache von DB2 hält die Zugriffspfade von dynamischen SQL Statements vor und zwar exakt in der ausgeführten Form.
� Beim vorherigen Beispiel wird der Zugriffsfad für
im Dynamic Statement Cache abgelegt.
� Verwendet man nun allerdings ein Statement der Form
muss der gesamte Zugriffspfad neu berechnet werden.
� Eventuell vorhandene Statement Caches von Anwendungsservern greifeni.d.R. nicht bei Verwendung des einfachen Statement Objekts.
� Ein simples Statement kann bei der Ausführung alles oder nichts sein...
SELECT LASTNAME FROM DSN8910.EMP WHERE EMPNO < '000110'
SELECT LASTNAME FROM DSN8910.EMP WHERE EMPNO < '000210'
| IBM Software Group | System z |
38Java Programmierung mit DB2 z/OS
Vorteile von PreparedStatement gegenüber Statement
� Das Verwenden von Prepared Statements kann Abhilfe schaffen, indem das Statement von DB2 nur mit Platzhaltern (Parameter-Markern) vorbereitet wird.
� Das Statement selbst und der ermittelte Zugriffspfad sind dabei zunächst generisch und werden auch so im Dynamic Statement Cache abgelegt.
� Die jeweiligen Parameterwerte werden erst kurz vor der eigentlichen Ausführung eingesetzt. Im DB2 erfolgt lediglich noch eine eventuelle Reoptimierung (bei REOPT ONCE, ALWAYS oder AUTO).
� Dies steigert die Wiederwendbarkeit der Informationen im Cache erheblich und erlaubt zudem die Nutzung von zusätzlichen Statement Caches auf Anwendungsserverebene.
� ÄHNLICH dem Vorgehen mit Hostvariablen bei COBOL, etc...
� Zudem verbessertes Sicherheitskonzept, da Verhinderung von SQL Injection.
SELECT LASTNAME FROM DSN8910.EMP WHERE EMPNO < ?
20
| IBM Software Group | System z |
39Java Programmierung mit DB2 z/OS
Beispiel mit PreparedStatement und Parameter-Marker
Verbindungsaufbau über DataSource und Verwendung von javax.sql
� Bietet die Möglichkeit die Connection Definition auszulagern (z.B. an eineApplication Server Data Source) mit folgenden Vorteilen:
– Keine manuelle Definition in sämtlichen Anwendungen notwendig
– Hohe Flexibilität beim Deployment
– Zentrale Festlegung von Connection Properties
– Vermeiden von zu vielen Einzelverbindungen durch Connection Pooling
– Höhere Transparenz und Portabilität
� Javax.sql Funktionalitäten:
– Bietet das DataSource Interface als Alternative zum DriverManager als Schnittstelle zurErstellung und Verwaltung von Datenbankverbindungen.
– Zusätzliche Möglichkeiten wie Connection Pooling, Distributed Transactions, Rowsets...
DataSource
ConnectionPoolDataSource
XADataSource
DB2DataSource
DB2BaseDataSource/DB2BaseDataSource
DB2ConnectionPoolDataSource
DB2XADataSource
22
| IBM Software Group | System z |
43Java Programmierung mit DB2 z/OS
JDBC 4.0JDBC 4.0JDBC 4.0
� Verbessertes SQL Exception Handling
� Unterstützung nativ in der Datenbank abgelegter XML Daten
� Automatisches Laden der JDBC Treiber Klassen
� IBM Data Server Driver Implementierung des JDBC 4.0 Standards:
Java SE 6 enthält JDBC 4.0 und damit einige interessante Neuerungen
Class.forName("com.ibm.db2.jcc.DB2Driver");
db2jcc4.jar
db2jcc4_license_cisuz.jar
db2jcc.jar
db2jcc_license_cisuz.jar
ResultSet.getSQLXML("XMLCOLUMN");
PreparedStatement.setSQLXML(1, xmlObject);
Transient vs. Non-TransientIteration über Chained Exceptions
| IBM Software Group | System z |
44Java Programmierung mit DB2 z/OS
IBM Erweiterungen des JDBC Standards mit Zusatzfunktionalitäten
� DB2SystemMonitor zum grundlegenden Messen von Zeitaufwänden.
� Erweiterte Client Informationen für JDBC applications:
– Bisher über setDB2Client…
• …AccountingInformation
• ...ApplicationInformation
• ...User
• ...Workstation
– Mit JDBC 4.0 über Connection.setclientinformation
� Prüfen, ob eine offene Verbindung noch gültig ist:
– Bisher über isDB2Alive
– Mit JDBC 4.0 über Connection.isValid
DB2Connection
DB2Statement
DB2ResultSet
db2jcc4.jar
db2jcc4_license_cisuz.jar
23
| IBM Software Group | System z |
45Java Programmierung mit DB2 z/OS
Warum dann überhaupt statisches SQL und in SQLJ programmieren?
Ganzheitliche Problemfeststellung
LeistungsfähigkeitDatabase object tracking
Zugriffspfadstabilität
Authorisierung
Kapazitätsplanung
Statisches SQLRessourcenverbrauch
| IBM Software Group | System z |
46Java Programmierung mit DB2 z/OS
Dynamisches SQL vs. Statisches SQL
SQL wird vor der Laufzeit in ein Package gebunden. ZurLaufzeit wird lediglich das Package ausgeführt
Dynamic SQL Static SQL
Parse SQL statements
Check authorization for JDBC packages/plans for temporary use
Check authorization for tables/views
Calculate access paths
Store access paths temporary inJDBC packages/plans
Execute SQL statements Execute SQL statements
Check authorization for packages/plans
Extract access paths from SYSCAT.PACKAGES and .STATEMENTS
Operationen durchgeführt zur Laufzeit derAnwendung. Verbesserungen möglich über DB2
Dynamic Statement Cache
24
| IBM Software Group | System z |
47Java Programmierung mit DB2 z/OS
SQLJ als statische Alternative zum dynamischen Vorgehen über JDBC
� SQLJ bietet Unterstützung für Embedded/Statisches SQL für JavaAnwendungen. SQLJ wurde ursprünglich entwickelt von IBM, Oracle und Tandem um das dynamische JDBC SQL Modell mit einem statischen Modell zu erweitern.
� SQLJ kann mit JDBC interagieren und daher auch gemeinsam in einerAnwendung und selbst in einer Unit of Work verwendet werden.
� Die SQLJ Laufzeitumgebung besteht aus einer SQLJ Runtime Library, die nativ in Java implementiert wurde. Zum eigentlichen Zugriff auf die Datenbank nutzt auch SQLJ den IBM Data Server Driver.
� Bevor SQLJ Anwendung lauffähig sind, sind einige Vorarbeiten notwendig(Translation, Customization und Bind).
#sql [ctx] cursor1 =
{SELECT EMP_ACT.EMPNO FROM EMP_ACT};
sqlj.zipdb2jcc.jar db2jcc_license_cisuz.jar
| IBM Software Group | System z |
48Java Programmierung mit DB2 z/OS
SQLJ Syntax und Language Konzepte
� Eine SQLJ Connection Clause definiert eine Verbindung zu einem DB2 Subsystem.
� Eine SQLJ Iterator Declaration Clause definiert eine Positioned Iterator Klasse oder eine Named Iterator Klasse.
� Eine SQLJ Assignment Clause weisst das Ergebnis einer SQL Operation einer Java Variable zu.
� Parameter für embedded SQL Statements werden in Form von Host Variablesübergeben.
#sql { SELECT * FROM EMPLOYEE WHERE EMPID=:id };
#sql { INSERT INTO EMPLOYEE VALUES (:id, :lastname, :firstname) };
#sql { SELECT COUNT(*) INTO :OUT number FROM EMPLOYEE };
25
| IBM Software Group | System z |
49Java Programmierung mit DB2 z/OS
SQLJ Translation & Customization um Programme lauffähig zu machen
�SQLJ erfordert eine Prekompilierung(Translation). Während dieser Phase werden Syntax- und Konsistenz-Checks durchgeführt und ein natives Java Source File generiert.
�Dieses File enthält nur Standard Java Aufrufe. Sämtliche embedded SQL Statements und SQLJ Fragmentewurden in Aufrufe der SQLJ RuntimeLibrary umgewandelt.
�Zudem wird ein sog. SQLJ SerializedProfile erstellt, das Informationen zu den statischen SQL Statements enthält. Durch Customization werden umgebungsspezifische Laufzeitinformationen zu diesen Profiles hinzugefügt. Die so angepassten Profiles werden schließlich in DB2gebunden.
| IBM Software Group | System z |
50Java Programmierung mit DB2 z/OS
Optim Development Studio unterstützt bei der Entwicklung von SQLJ
SQLJ Entwicklung
� Wizard zum Erstellen von SQLJPRogrammen mit Hilfe von Templates.
� Ein spezieller SQLJ Editor hilft Java Entwicklern mittels SQLJ Syntax High-lighting und SQLJ Assist Wizardsbeispielsweise beim Hinzufügen von Verbindungen und Iterator Definitionen oder SQLJ Assignment Clauses.
� Der enthaltene SQLJ debuggerermöglicht ein unkompliziertes Debugging von SQLJ vergleich dem Vorgehen bei normalen Java Projekten.
� Vorhandene Java/SQLJ Projektekönnen nachträglich um SQLJ Support erweitert werden.
� Wiederverwendung von Statementsaus dem SQL Editor oder SQL Builder.
26
| IBM Software Group | System z |
51Java Programmierung mit DB2 z/OS
Agendaübersicht
Anwendungsentwicklung mit JDBC und SQLJ
Persistenzframeworks
DB2 und Application Server
Systemadministration
Java Zugriffsmöglichkeiten
| IBM Software Group | System z |
52Java Programmierung mit DB2 z/OS
Die Möglichkeiten zum Datenzugriff aus Java sind breit gefächert
■ JPA (Java Persistence API - Sun):– Standard für Java, bietet Interfaces an, die von den anderen Frameworks implementiert werden können– Arbeitet direkt mit JDBC – Treibern, standardkonform
■ TopLink (Oracle):– Entspricht den JPA Konventionen– Verwendet JDBC, bietet aber auch DBMS bezogene Funktionen, wie zB:
• Native SQL, Sequencing und Custom Date/Timestamp Formate
■ EclipseLink (Eclipse Foundation): – Als Referenzimplementierung von JPA von Sun bestimmt– Hat seinen Ursprung in Oracle TopLink und wird auch in zukünftigen Releases von Oracle TopLink enthalten sein
■ OpenJPA (Apache Software Foundation):– Open Source Implementierung des JPA Standards– Wird als Standard Persistenz Framework von IBM WebSphere mitgeliefert und verwendet
29
| IBM Software Group | System z |
57Java Programmierung mit DB2 z/OS
Übersicht Java Persistenz Frameworks
■ Hibernate (JBoss, jetzt RedHat):– Baut mittlerweile ebenfalls auf JPA auf– Sehr mächtig und performant, lange (proprietäre) Historie– Hibernate Query Language
Als minimale objektorientierte Erweiterung von SQL entwickelt– Am weitesten verbreitet– Zusammenarbeit mit DBMS über Wahl von Sprachdialekt als Eigenschaft
■ Ibatis SQL Maps (Apache Software Foundation):– Kein echtes ORM-Framework � DAO– Mapping muss von Hand beschrieben werden, genau wie die SQL-Statements die
an die Datenbank weitergereicht werden– Dadurch können SQL-Befehle vollständig angepasst werden→ Bei eigenem Datenbankdesign sehr von Vorteil, spezifische Datenbankfunktionen
(Sequencing, …) können voll ausgekostet werden
■ Spring Data Access Framework (SpringSource, VMWare):– Unterstützt viele Persistenzframeworks, in dem Interfaces bereitgestellt werden (JPA, topLink, JDO, ibatis, ...)– Kein direkter Zugriff auf diese APIs nötig, aber möglich
| IBM Software Group | System z |
58Java Programmierung mit DB2 z/OS
Beispiele
30
| IBM Software Group | System z |
59Java Programmierung mit DB2 z/OS
Vererbungsstrategie
| IBM Software Group | System z |
60Java Programmierung mit DB2 z/OS
Vererbungshierarchie „SingleTable“
� Diese Strategie ist in der Regel „performanter“, da es niemals einen Join braucht um alle Informationen zu erhalten.
� Der Nachteil ist, dass sehr viele NULL-Felder entstehen und die Tabelle somit bei grosen Objekten sehr „breit“ wird, also sehr viele ungenutze Spalten entstehen.
31
| IBM Software Group | System z |
61Java Programmierung mit DB2 z/OS
Vererbungshierarchie „joined“
� Durch diese Lösungen entstehen die am meisten „normalisierten“ Tabellen, mit sehr wenig Redundanz. Entsehen im Verlaufe der Zeit mehr Subklassen erfordert dies keine grossen Änderungen am Datenbankschema, vielmehr mussen nur entsprechende Tabellen hinzugefugt werden.
� Nachteile entstehen hier jedoch durch die Joins die notig sind um alle Informationen zu einer erbenden Klasse zu bekommen. Wird jedoch hauptsachlich auf die Basisklasse zugegriffen oder die Basisklassenelemente werden nur bei Bedarf („Lazy Loading“, siehe S. 29) aus der Datenbank geladen, ist diese Methode sehr schnell, da so nur auf eine einzelne Tabelle zugegriffen werden muss und unnotige Spalten in den Tabellen vermieden werden.
| IBM Software Group | System z |
62Java Programmierung mit DB2 z/OS
Vererbungshierarchie „Table per Class“
� Zugriffe auf Instanzen einzelner Klassen sind sehr effizient, da jegliche Joins vermieden werden. Auch wenn neue Subklassen erstellt werden, muss am bestehenden Schema nichts verandert werden, sondern es muss lediglich eine neue Tabelle angelegt werden.
� Ein groser Nachteil entsteht jedoch, wenn man nicht weiss, in welcher Subklasse die Instanz zu finden ist, beispielsweise wenn man bei einem Angestellten nach Vor- und Nachnamen sucht. Dort muss jede Subklassentabelle nach diesen Attributen durchsucht werden, was in einer Vielzahl verschiedener SELECT-Statements auf viele verschieden Tabellen mündet.
32
| IBM Software Group | System z |
63Java Programmierung mit DB2 z/OS
Eager Loading vs. Lazy Loading
� Lazy
– Wenn Attribute selten in der Anwendung verwendet werden
– Deklaration @Lazy sorgt dafür dass die Daten nicht aus der DB geladen werden
– Erst beim expliziten Zugriff findet der SQL Fetch statt
– Vorteil: Weniger Load bei Default Zugriff
– Nachteil: Zusätzliche SQLs wenn falsch konfiguriert
� Deadlocks oder Timeouts können meist nie gänzlich ausgeschlossen werden.
� Derartige Fehler sind jedoch oftmals nur vorrübergehend (transient) und sind bei abermaliger Ausführung eines SQL Statements hinfällig.
� Anstatt Endbenutzer mit (evtl. unnötigen) SQL Fehlermeldungen zu konfrontieren, sollte die Anwendung daher eine begrenzte Recovery/Retry Logik enthalten.
DB2 for z/OS
34
| IBM Software Group | System z |
67Java Programmierung mit DB2 z/OS
Codebeispiel für Retrylogik im Fall von Deadlocks oder Timeouts
int sqlretrycount = 1;
int sqlmaxretry = 5;
...
while (0 < sqlretrycount && sqlretrycount < sqlmaxretry) {
try {
resultset = preparedstmt.executeQuery();
sqlretrycount = 0;
}
catch (SQLException sqlexcept){
errcode = sqlexcept.getErrorCode();
if (errcode == -911 || errcode == -913) {
sqlretrycount++;
try {
Thread.sleep(maxretry*random.nextInt(10));
}
catch (InterruptedException interexcept) {
interexcept.printStackTrace();
}
//Ausführen der SQL Statements
//Prüfen ob Deadlock oder Timeout vorliegt
//Warten über zufällige Zeitspanne
//Wiederholen bis Ausführung erfolgreich oder Limit erreicht
| IBM Software Group | System z |
69Java Programmierung mit DB2 z/OS
Roundtrips zur Datenbank und Netztraffic vermeiden
� Verwenden von Stored Procedures, User-Defined Functions sowie DB2 Functions um Netzwerkverkehr zu reduzieren, unnötige Datenbankoperationen zu vermeiden aber auch Geschäftslogik und häufig genutzte Funktionalitäten zentral zu verwalten.
� Nutzen von SQL Funktionalitäten wie z.B. INTERSECT, EXCEPT, UNION, MERGE Statement, etc. um requestierte Datenmenge zu reduzieren.
� Statement Batching für INSERTs und UPDATEs.
� Multi-row Fetch für SELECTs.
DB2 for z/OS
35
| IBM Software Group | System z |
70Java Programmierung mit DB2 z/OS
Lock-Haltezeiten durch Berücksichtigung in Anwendungslogik reduzieren
� Zeitnahe Commits beim Erreichen von Konsistenzpunkten, auch in Read-Only Anwendungen. Entsprechend auch zeitnahe ROLLBACKs beim Feststellen von SQL Fehlern innerhalb der Anwendung.
� Zugriff auf kritische Ressourcen möglichst spät im Verlauf einer Transaktion.
� Restriktive Statements (z.B. UPDATEs) möglichst am Ende einer Transaktion.
� Cursor bei SQLJ möglichst zeitnah wieder schließen. Bei JDBC entsprechend ResultSets und Connections wenn nicht benötigt schließen.
� Kein User Input während einer Transaktion, sämtliche Daten vorher sammeln.
DB2 for z/OS
| IBM Software Group | System z |
71Java Programmierung mit DB2 z/OS
� Assoziationen zwischen Java Objekten einfach halten (da z.B. eine M:N Assoziation 3-way Joins erfordern).
� Kein SELECT * und kein INSERT INTO T _ VALUES (ohne Column list).
� Wie werden Connections validiert?
– „Select count(*) from sysibm.sysdummy1“
– „Select count(*) from sysibm.sysdummy1 where 1=0“
– isDB2Alive oder Connection.isValid(int timeout) mit JDBC 4.0
� Pool von JDBC Connections zur Vermeidung des kostspieligen Overheadsfür Connection Verwaltung (create & destroy).
� Pro Data Source jeweils eigener Connection Pool. Bei Verteilung in Application Server Cluster hat jeder Servant seine eigene Connection Pool Instanz.
Gefahr von ConnectionDeadlocks bei Anwen-dungen mit mehr als 1Connection gleichzeitig.
� JDBC Driver stellt nur das Gerüst, WebSphere selbst stellt die eigentliche Implementierung.
| IBM Software Group | System z |
79Java Programmierung mit DB2 z/OS
WebSphere Connection Pooling Architekturüberblick
� Es sollte stets der einer Anwendung am nächsten liegendste Connection Pool verwendet werden.
� Zudem sollte für größtmögliche Verfügbarkeit Sysplex Workload Balancing aktiviert sein.
WebSphere Application Server
An
we
nd
un
g
Resource
Adapter
JCAConnectionManager
DB Connection Pool
DB2 Universal Driver JDBC/SQLJ
Disconnect beiCommit oder Rollback
CF
Pooled Connectionszur DB2 for z/OS
Data Sharing Group
JVM
LogischeVerbindung
3
LogischeVerbindung
1
LogischeVerbindung
2
Transport1
Transport2
40
| IBM Software Group | System z |
80Java Programmierung mit DB2 z/OS
Connection Pooling wird konfiguriert über die WebSphere Admin Konsole
Erläuterung der Parameter:
� Connection Timeout: Wie lange darf ein Connection Request an den Pool höchstens dauern.
� Reap Time: In welchen Zeitabständen wird der Pool bereinigt.
� Unused Timeout: Wie lange verbleibt eine ungenutzte Connection im Pool.
� Aged Timeout: Wie lange bleibt eine aktive Connection in Verwendung bevor sie recycled wird.
� Purge Policy: Wie wird im Fall einer fehlgeschlagenen Verbindung vorge-gangen.
Defaultwerte
| IBM Software Group | System z |
81Java Programmierung mit DB2 z/OS
Performance Monitoring Infrastructure für WebSphere Connection Pools
� JDBC Connection Pool Counter werden verwendet um die Leistungsfähigkeit der entsprechenden Data Sources zu überwachen.
� Die Daten können in der WebSphere Admin Konsole graphisch aufbereitet vom Peformance Viewer angezeigt werden.
� Basierend auf den Monitoring-Daten lassen sich in der Folge die Connection Pool Parameter oder aber die Anwendung selbst (Connectionauf-/abbau) optimieren.
41
| IBM Software Group | System z |
82Java Programmierung mit DB2 z/OS
Die Konzepte Trusted Context und Roles bieten mehr Sicherheit
� Ein spezifischer WebSphere Application Server mit bestimmten Usern darf auf DB2 zugreifen.
� Die Rechte der User werden über vordefinierte Rollen bestimmt.
DB2 Server
CREATE ROLE WASADMIN;GRANT DBADM ... TO ROLE WASADMIN;
CREATE ROLE WASACCESS;GRANT SELECT on T1 TO ROLE WASACCESS;
CREATE TRUSTED CONTEXT WAS1... USING SYSTEM AUTHID WASPRODDEFAULT ROLE WASADMIN WITHOUT ROLE AS OBJECT OWNER ENABLEATTRIBUTES (ADDRESS 1.2.3.4
ENCRYPTION ...SERVAUTH ....)
WITH USE FOR PETER ROLE WASACCESS,CHRISTIAN;
WebSphere Application Server
WASPROD Registry nameIP Address 1.2.3.4
PETER
CHRISTIAN
Aufbau einer Trusted Connection.Bei Fehlschlag:
SQLCODE +20360 untrusted connection
Client User-Ids
propagateClientIdentityUsingTrustedContext
poolDataSource.getDB2TrustedPooledConnection
| IBM Software Group | System z |
83Java Programmierung mit DB2 z/OS
Agendaübersicht
Anwendungsentwicklung mit JDBC und SQLJ
Persistenzframeworks
DB2 und Application Server
Systemadministration
Java Zugriffsmöglichkeiten
42
| IBM Software Group | System z |
84Java Programmierung mit DB2 z/OS
Antwortzeiten der Anwendung sind schlecht?
� Wo liegt das Problem? Was ist zu tun? Wo soll ich starten?
| IBM Software Group | System z |
85Java Programmierung mit DB2 z/OS
Problemfelder bei großen Java Anwendungen
� Oftmals liegt der Focus rein auf der Anwendungslogik und weniger auf Datenbankthemen
� Einsatz von 3rd Party Frameworks und diversen Layern führt zu komplexem DB Design (OO meats relationally)
– Unüberaschaubare Menge an DB2 Objekten
– Unmengen an SQL Statements (Langläufer, Komplexität)
– Lange UOW‘s, Timeouts, Deadlocks
– Lesen von Unmengen an Daten
� DB2 Performancefeatures sind nicht bekannt oder werden wegen Portabilität nicht genutzt
� Aufgrund kurzer Releasezyklen wird wenig getestet und wenig Kapazitätsplanung betrieben
43
| IBM Software Group | System z |
86Java Programmierung mit DB2 z/OS
Herangehensweise
� Proaktiv Handeln
– Kapazitätsmanagement
– Aufsetzen von Performance Baseline durch kontinuierliches Performance Monitoring
– Abstimmung während der Entwicklung
� Problemlösung
– Hinterfragen der Probleme! Gibt es Vergleichsdaten? Kontinuierliches Monitoring?
� Zum Beispiel Tivoli Omegamon XE for DB2 Performance Expert
| IBM Software Group | System z |
91Java Programmierung mit DB2 z/OS
GLOBAL DDF ACTIVITY QUANTITY
--------------------------- --------
DBAT QUEUED-MAXIMUM ACTIVE 0.00
CONV.DEALLOC-MAX.CONNECTED 0.00
CUR TYPE 1 INACTIVE DBATS 0.00
CUR TYPE 2 INACTIVE DBATS 17.39
TYPE 2 INACTIVE DBATS HWM 42.00
CURRENT ACTIVE DBATS 31.00
ACTIVE DBATS HWM 20.00
TOTAL DBATS HWM 42.00
CURRENT DBATS NOT IN USE 6.39
DBATS NOT IN USE HWM 30.00
DBATS CREATED 0.00
POOL DBATS REUSED 12602.00
DRDA REMOTE LOCS SENT RECEIVED
--------------------------- -------- --------
TRANSACTIONS 0.00 0.00
CONVERSATIONS 0.00 0.00
CONVERSATIONS QUEUED 0.00
SQL STATEMENTS 0.00 1459.2K
SINGLE PHASE COMMITS 0.00 442.7K
SINGLE PHASE ROLLBACKS 0.00 0.00
ROWS 2047.8K 0.00
MESSAGES 1009.6K 1009.5K
BYTES 703.6M 685.2M
BLOCKS 350.4K 0.00
MESSAGES IN BUFFER 2047.9K
DYNAMIC SQL STMT QUANTITY
--------------------------- --------
PREPARE REQUESTS 480.05
FULL PREPARES 1.37
SHORT PREPARES 478.68
GLOBAL CACHE HIT RATIO (%) 99.71
DB2 Statistics – SMF 100
� Analyse über das DB2 Subsystem
� Für Type 4 auch DDF Block überprüfen, bei JDBC, dynamic SQL überprüfen
46
| IBM Software Group | System z |
92Java Programmierung mit DB2 z/OS
Tivoli Omegamon XE for DB2 Performance Expert
| IBM Software Group | System z |
93Java Programmierung mit DB2 z/OS
DB2 Accounting – SMF 101
� Informationen über die Anwendung
� Beeinflussende ZPARMs
� Wann werden Accounting Records geschrieben?
– Thread wird abgebaut
– Type 4
• Thread geht inaktiv (CMTSTAT=INACTIVE)
• COMMIT
– Type 2
• COMMIT nur wenn PQ95284 applied und JDBC Property accountingInterval=COMMIT
47
| IBM Software Group | System z |
95Java Programmierung mit DB2 z/OS
AVERAGE APPL(CL.1) DB2 (CL.2)
------------ ---------- ----------
ELAPSED TIME 7:22.69662 5.287841
NONNESTED 7:20.65807 4.456104
STORED PROC 2.027677 0.820862
UDF 0.000000 0.000000
TRIGGER 0.010875 0.010875
CPU TIME 3.270153 2.139824
AGENT 3.270153 2.139824
NONNESTED 2.434445 1.551221
STORED PRC 0.835235 0.588131
UDF 0.000000 0.000000
TRIGGER 0.000472 0.000472
PAR.TASKS 0.000000 0.000000
SUSPEND TIME N/A 2.433828
AGENT N/A 2.433828
PAR.TASKS N/A 0.000000
DB2 Accounting
� Class 2 Zeit (in DB2) sollte gleich sein (T2 vs. T4)
� „Zeit im DB2“
– T2: Cl.2 non-nested ET + Cl.1 SP, UDF, trigger ET
– T4: Cl.2 non-nested ET + Cl.1 SP, UDF, trigger ET+ non-nested (Cl.1 CPU – Cl.2 CPU)
� „Zeit außerhalb DB2“
– Total Cl.1 ET – „Zeit im DB2“ (vorherige Berechnung)enthält Idle Time für thread reuse
– T2 CPU für Anwendung:non-nested (Cl.1 CPU – Cl.2 CPU)
| IBM Software Group | System z |
96Java Programmierung mit DB2 z/OS
DB2 Performance – SMF 102
� Details über SQL Statements, Pläne, Packages,
� Overhead für DB2 Subsystem
� Sehr granular, große Datenmengen
48
| IBM Software Group | System z |
97Java Programmierung mit DB2 z/OS
Tivoli Omegamon XE for DB2 Performance Expert
| IBM Software Group | System z |
99Java Programmierung mit DB2 z/OS
Tivoli Omegamon XE for DB2 Performance Expert
49
| IBM Software Group | System z |
100Java Programmierung mit DB2 z/OS
Oftmals gestellte Fragen
� Welches sind die teuersten Statements?
– Priorisierung nach CPU, I/O
– Wieviel Workload kann eingespart werden?
� Welche Statements werden wie oft ausgeführt?
– Execution Count
– Parameter Marker
� DB2 Sicht vs. Java Sicht
– Welche Tabellen werden von welchen Statements gelesen/upgedated?
– Welche Java Packages greifen auf welche DB2 Objekte zu?
� Mögliches Tooling:
– Tivoli Omegamon XE for DB2 Performance Expert
– Optimization Expert, Optimization Service Center
– Optim pureQuery Runtime - Outline
| IBM Software Group | System z |
101Java Programmierung mit DB2 z/OS
Analyse des Dynamic Statement Cache
Cached Statements, sorted by descending accumulated CPU time
50
| IBM Software Group | System z |
102Java Programmierung mit DB2 z/OS
Optimization Expert – Index Advisor
Index Recommendation
| IBM Software Group | System z |
103Java Programmierung mit DB2 z/OS
pureQuery Outline im Optim Development Studio
Java source code
Abschätzen der Auswirkungen von Java Anwendungen auf DB2
DB2 packagesDatabase objects
51
| IBM Software Group | System z |
104Java Programmierung mit DB2 z/OS
Agendaübersicht
Anwendungsentwicklung mit JDBC und SQLJ
Persistenzframeworks
DB2 und Application Server
Systemadministration
Java Zugriffsmöglichkeiten
| IBM Software Group | System z |
105Java Programmierung mit DB2 z/OS
Interessante Links
� Application Programming and Reference for Javahttp://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db29.doc.java/com.ibm.db2.luw.apdv.java.doc/doc/dsnjvk13.pdf
� Optim Development Studio – Downloadhttp://www.ibm.com/developerworks/downloads/im/datastudiodev/
� Redbook: DB2 9 for z/OS Stored Procedures: Through the CALL and Beyondhttp://www.redbooks.ibm.com/abstracts/sg247604.html
� Redbook: WebSphere and DB2 z/OS – The perfect couplehttp://www.redbooks.ibm.com/abstracts/sg246319.html
� Meet the Experts: John Campbell on Java Performance for DB2 Applicationshttp://www.ibm.com/developerworks/db2/library/techarticle/0202campbell/0202campbell.html
� The Value of co-location (JDBC T2)http://www-03.ibm.com/support/techdocs/atsmastr.nsf/WebIndex/WP101476
52
| IBM Software Group | System z |
106Java Programmierung mit DB2 z/OS
Weiterführende Informationen zum DB2 for z/OS und Java Umfeld