java und db2 - vsis homepage · – specifies whether the java.sql.resultset.type_scroll_sensitive...

53
1 © 2010 IBM Corporation ® Christian Daser, Technischer Vertrieb DB2 für z/OS 15.09.2010 Java Programmierung mit DB2 auf z/OS | IBM Software Group | System z | 2 Java Programmierung mit DB2 z/OS Warum setzen Kunden DB2 z/OS ein? Hochverfügbarkeit 7 x 24 Ausfälle vermeiden vs. Schnelle Recovery Hohe Performance und Skalierbarkeit Skalierbar Wachstum Single und multi-system Große Anzahl von Daten Große Anzahl von Usern Unterschiedliche Arten von Workload OLTP und Batch Webworkload mit Spitzen ERP/CRM Lösungen (SAP...) BI & Warehousing ODS und gemischte Workload ... Datenbanktechnologie kostenbasierter Optimizer, Query-Rewrite Parallelverabeitung Web-enablement, XML Hoch-automatisierte Umgebung Utilities und Tooling z/OS Systemmanagement Nachvollziehbarkeit Monitoring Auditing Support für Open Standards SQL/ANSI, ODBC, JDBC/SQLJ XPAT H

Upload: phamnhu

Post on 24-Jan-2019

241 views

Category:

Documents


0 download

TRANSCRIPT

1

© 2010 IBM Corporation

®

Christian Daser, Technischer VertriebDB2 für z/OS

15.09.2010

Java Programmierung mit DB2 auf z/OS

| IBM Software Group | System z |

2Java Programmierung mit DB2 z/OS

Warum setzen Kunden DB2 z/OS ein?

� Hochverfügbarkeit– 7 x 24

– Ausfälle vermeiden vs. Schnelle Recovery

� Hohe Performance und Skalierbarkeit– Skalierbar

– Wachstum

– Single und multi-system

– Große Anzahl von Daten

– Große Anzahl von Usern

� Unterschiedliche Arten von Workload– OLTP und Batch

– Webworkload mit Spitzen

– ERP/CRM Lösungen (SAP...)

– BI & Warehousing

– ODS und gemischte Workload

– ...

� Datenbanktechnologie– kostenbasierter Optimizer, Query-Rewrite

– Parallelverabeitung

– Web-enablement, XML

� Hoch-automatisierte Umgebung– Utilities und Tooling

– z/OS Systemmanagement

� Nachvollziehbarkeit– Monitoring

– Auditing

� Support für Open Standards– SQL/ANSI, ODBC, JDBC/SQLJ

– XPATH

2

| IBM Software Group | System z |

3Java Programmierung mit DB2 z/OS

� 14th Release

– DB2 9 for z/OS

� DB2 10 for z/OS kommt….

� 10000+ Lizenzen

� Typischer DB2 for z/OS Kunde

– Team of 2-10

– DASD 200TB

– 10-20 Mio Online Transactions per day

– 20 DB2 Systems

– Availability: 99,9%

– Response Time < 1s: 99,9%

– CPU Utilization > 90%

– Threads per day: 3.5 Mio

– SQLs per day: 3.900 Mio

DB2 z/OS – 27 Jahre Erfahrung

| IBM Software Group | System z |

4Java Programmierung mit DB2 z/OS

Agendaübersicht

Anwendungsentwicklung mit JDBC und SQLJ

Persistenzframeworks

DB2 und Application Server

Systemadministration

Java Zugriffsmöglichkeiten

3

| IBM Software Group | System z |

5Java Programmierung mit DB2 z/OS

JDBC Treiber – Ein Treiber für die Datenbankfamilie der IBM

� IBM Data Server Driver for JDBC and SQLJ

� Auch bekannt als Java Common Client (JCC)oder Universal Driver

� Unterstützt JDBC und SQLJ 3.0 und 4.0

� Type 2 und Type 4 Treiber

– Type4 URL: jdbc:db2://SERVER:PORT/DATABASE

– Type2 URL: jdbc:db2:DATABASE

� Sehr gute Integration in WebSphere

| IBM Software Group | System z |

6Java Programmierung mit DB2 z/OS

App Server

App Server

DB2

CICSMQ

CobolPL/1

DDF

DB2 Connect

JavaApplication

JavaApplication

Browser

Browser

App Server

JavaApplication

Webservice

WS consumer

WS consumer

Java appBatch

DRDA

Type 2

Type 4

Type 4

http

SOAP

Type 2

API

-ADO.NET-ADO-ODBC-OLE DB-ROR-PERL-JDBC-SQLJ-DB2 CLI

DB2 ConnectGateway

Type 2

Type 4

Type 4

Java Batch

JSPC

Typische Architekturen

4

| IBM Software Group | System z |

7Java Programmierung mit DB2 z/OS

Vor und Nachteile Type 2 vs. Type 4

� Type 2

– Höherer Durchsatz

• Crossmemory Interfaces zwischen Anwendung und DB2

• Kein DDF / DRDA / IP overhead

• z/OS Security, Vorteile im Bereich Authentifizierung

– Nur lauffähig wenn die Java Anwendung / AppServer in der selben LPAR

� Type 4

– Kann überall eingesetzt werden wo die entsprechende JVM exisitiert

– Einfaches Deployment

– Durchsatz und Security (technischer User) schlechter als Type 2

� Individuelle Abweichungen sind möglich, je nach Kundenumgebung

| IBM Software Group | System z |

8Java Programmierung mit DB2 z/OS

US

S

DB2 for z/OS Systemarchitektur und -prozesse im Detail

MSTR

CommandProcessor

Log Manager

Recovery Manager

DBM1

Relational Data System

Data Manager

Buffer Manager

MYDB1

MYDB2

DB2 Catalog & Directory,

Sortfiles

User Databases

X.TB2

TS1

X.TB1X.IX1

X.IX2

X.IX3

IRLMLocking C

ICS

IMS

TS

O

Bat

ch

DIST(DDF)

BSDS

Active Logs

Archive Logs

Off load

IXS1

PTS1 IXS2

TS2 LOBTS1

Y.TB1Y.IXP

Y.IX1

AUXTB

Z.IX1

IXS3

Z.TB1

TCP/IPSNA

WL

M M

anag

ed S

tore

d

Pro

ced

ure

Ad

dre

ss S

pac

es

Distributed Thread Pooling

DRDA Application Requestor & Server

WLMAS

5

| IBM Software Group | System z |

9Java Programmierung mit DB2 z/OS

Überprüfen der Konfiguration

� Umgebungsvariablen für optimale Voraussetzungen (user profile)

� JDBC Version und Konfiguration– java com.ibm.db2.jcc.DB2Jcc -version

IBM DB2 JDBC Universal Driver Architecture 3.53.81

– java com.ibm.db2.jcc.DB2Jcc -configuration

[jcc] Driver: IBM DB2 JDBC Universal Driver Architecture 3.53.81

[jcc] Compatible JRE versions: { 1.4, 1.5 }

[jcc] Target server licensing restrictions: { z/OS: enabled; SQLDS: enabled; iSeries: enabled; DB2 for Unix/Windows: enabled; Cloudscape: enabled; Informix: enabled }

[jcc] Default fetch size: 64

[jcc] Default isolation: 2

...

export CLASSPATH=/usr/lpp/db2/db2910_jdbc/classes/db2jcc_license_cisuz.jar:/usr/lpp/db2/db2910_jdbc/classes/db2jcc.jar:$CLASSPATH

export CLPHOME=/usr/lpp/db2/db2910_baseexport CLASSPATH=$CLASSPATH:$CLPHOME/lib/clp.jar

export CLPPROPERTIESFILE=$CLPHOME/samples/clp.propertiesexport STEPLIB=SYS1.DSN.V910.SDSNEXIT:SYS1.DSN.V910.SDSNLOAD:SYS1.DSN.V910.SDSNLOD2:SYS1.SCEERUN:$STEPLIBexport PATH=/usr/lpp/db2/db2910_jdbc/bin:$PATH

export PATH=/usr/lpp/java/J1.5/bin/:$PATHexport LIBPATH=/usr/lpp/db2/db2910_jdbc/lib:$LIBPATHexport CLASSPATH=/usr/lpp/db2/db2910_jdbc/classes/sqlj.zip:$CLASSPATH

export CLASSPATH=/usr/lpp/db2/db2910_jdbc/classes/db2jcc_jav ax.jar:$CLASSPATHalias db2="jav a com.ibm.db2.clp.db2"

| IBM Software Group | System z |

10Java Programmierung mit DB2 z/OS

Batch Workload

� JZOS

– Aufruf von Java Anwendungen als z/OS Batch Job

********************************* Top of Data *****************************

//JZOS JOB ,'DASER',MSGCLASS=K,CLASS=A, // NOTIFY=&SYSUID,MSGLEVEL=(1,1),REGION=0M

//PROCLIB JCLLIB ORDER=SYS1.PROCLIB //*********************************************************************

//JAVA EXEC PROC=JVMPRC50, // JAVACLS='TestJDBC',

//STDENV DD *

. /u/daser/.profile export JAVA_HOME=/usr/lpp/java/J1.5

LIBPATH=/lib:/usr/lib:"${JAVA_HOME}"/bin:/usr/lpp/db2/db2910_jdbc/lib LIBPATH="$LIBPATH":"${JAVA_HOME}"/bin/classic

export LIBPATH="$LIBPATH":

APP_HOME=/u/daser/myjava CLASSPATH=$APP_HOME:"${CLASSPATH}"

export CLASSPATH="$CLASSPATH": IJO="-Xms16m -Xmx128m"

export IBM_JAVA_OPTIONS="$IJO " //

6

| IBM Software Group | System z |

11Java Programmierung mit DB2 z/OS

JDBC properties

� clientAccountingInformation clientProgramName clientUser clientWorkstation

– 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

� traceFile, traceLevel

� SysplexWorkloadBalancing, ConnectionConcentration

� Link: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/topic/com.ibm.db29.doc.java/com.ibm.db2.luw.apdv.java.doc/doc/rjvdsprp.htm

| IBM Software Group | System z |

12Java Programmierung mit DB2 z/OS

Connection concentrator genutzt aus JDBC

enableConnectionConcentratormaxTransportObjectsminTransportObjectsmaxTransportObjectIdleTimemaxTransportObjectWaitTime

7

| IBM Software Group | System z |

13Java Programmierung mit DB2 z/OS

DB2 Client Workload Balancing und Failover

Web User

DB2 Data Sharing Group

db2set db2connect_in_app_process=NO DCS entry = SYSPLEX on 6th pos. dbm config MAX_CONNECTIONS (in) > MAX_COORDAGENTS (out)

DB2 CONNECT Concentrator V7+

DVIPA + Sysplex

Distributor

JCC T4 V8 FP10/13JCC DataSource properties enableSysplexWLB=YES,enableConnectionConcentratormaxTransportObjects ...

JDBC Connection Concentration &

WLB

JDBC seamless & cascade failover

Alias Location names

WLM liefert Serverliste

Client definiert alternative Adresse

JCC T4 V9.5 FP1clientRerouteAlternateServerNameclientRerouteAlternatePortNumberenableSeamlessFailov erenableClientAffinitiesList ���� cascaded failov er

Redbook SG24-6952-01: DB2 9 for z/OS: Distributed Functions

| IBM Software Group | System z |

14Java Programmierung mit DB2 z/OS

Verschlüsselung „auf dem Draht“

� DRDA Verschlüsselung– Sicherheitsrelevante Daten, ICSF & Crypto Express 2 card sind Voraussetzung

– JCC properties

• securityMechanism

– ENCRYPTED_PASSWORD_SECURITY

– ENCRYPTED_USER_ONLY_SECURITY

– ENCRYPTED_USER_AND_PASSWORD_SECURITY

– ENCRYPTED_USER_AND_DATA_SECURITY

– ENCRYPTED_USER_PASSWORD_AND_DATA_SECURITY

– Def ault: CLEAR_TEXT_PASSWORD_SECURITY

• encryptionAlgorithm = 1 (56-bit DES) 2 (256-bit AES (USERID / PASSWORD))

� SSL Verschlüsselung über IBM Data Server Driver for JDBC/SQLJ T4 V9 FP2

– z/OS CS R7+ nutzt AT-TLS (Application Transparent Transport Layer Security)

• Bind of secure port; certificate / key management

• TLS V1.0, SSL V2 + V3 protocol support

– CPACF f ür Datentransf er (DES, T-DES, AES, ...), Optional Crypto Express2 Card f ür handshake (RSA) via ICSF

– JSSE - Java Secure Socket Extension

– Def iniert T-DES, AES ... Verschlüsselungsalgorythmus

– Jav a KEYTOOL zum Handling der Keys

– JCC driver property

– sslConnection = true

– Port Angabe = secure port

8

| IBM Software Group | System z |

15Java Programmierung mit DB2 z/OS

Codepage Conversion

� Wenn Daten über unterschiedlichen Codepages transportiert werden, muss konvertiert werden

� Typische Codepages

– DB2 z/OS: EBCDIC, ASCII, UNICODE

– Java: UNICODE

– COBOL, PL1: EBCDIC, UNICODE ?

DB2

Java App(Unicode)

String = „...“insert

COBOL(CCSID 237)

| IBM Software Group | System z |

16Java Programmierung mit DB2 z/OS

Stored Procedures

� Wiederkehrende gekapselte Codestücke

� Enthalten gewissen Anwendungslogik

� Vermeidet Netzwerk und Protokoll trips

� Genutzt für Performanceverbesserung und Anwendungsvereinfachung

select...

select...

select...

calculate...

update...

update...

MYPROCselect. ..

select. ..

select. ..

calculate.. .

update.. .

update.. .

Call MYPROC

DB2

9

| IBM Software Group | System z |

17Java Programmierung mit DB2 z/OS

Types of Stored Procedures

� Assembler

� Cobol, PL1

� SQL, C

� Java (JDBC / SQLJ)

� Native

storedproc.txt

| IBM Software Group | System z |

18Java Programmierung mit DB2 z/OS

US

S

DB2 for z/OS Systemarchitektur und -prozesse im Detail

MSTR

CommandProcessor

Log Manager

Recovery Manager

DBM1

Relational Data System

Data Manager

Buffer Manager

MYDB1

MYDB2

DB2 Catalog & Directory,

Sortfiles

User Databases

X.TB2

TS1

X.TB1X.IX1

X.IX2

X.IX3

IRLMLocking C

ICS

IMS

TS

O

Bat

ch

DIST(DDF)

BSDS

Active Logs

Archive Logs

Off load

IXS1

PTS1 IXS2

TS2 LOBTS1

Y.TB1Y.IXP

Y.IX1

AUXTB

Z.IX1

IXS3

Z.TB1

TCP/IPSNA

WL

M M

anag

ed S

tore

d

Pro

ced

ure

Ad

dre

ss S

pac

es

Distributed Thread Pooling

DRDA Application Requestor & Server

WLMAS

10

| IBM Software Group | System z |

19Java Programmierung mit DB2 z/OS

Deployment von Stored Procedures

– Erzeugen des Programmcodes

– Kompilierung in Bytecode

– Ablegen des Codes (jar oder class) imDB2 Katalog oder USS

– Erzeugen der DB2 DDL

– Refresh WLM application environment

CREATE PROCEDURE STPJAVA ( )

RESULT SETS 1

EXTERNAL NAME

'DASER.DS_1234:com.daser.jspc.STPJAVA.STPJAVA'

LANGUAGE Java

PARAMETER STYLE JAVA

NOT DETERMINISTIC

COLLID NULLID

WLM ENVIRONMENT WLMD931J

| IBM Software Group | System z |

20Java Programmierung mit DB2 z/OS

Agendaübersicht

Anwendungsentwicklung mit JDBC und SQLJ

Persistenzframeworks

DB2 und Application Server

Systemadministration

Java Zugriffsmöglichkeiten

11

| IBM Software Group | System z |

21Java Programmierung mit DB2 z/OS

Impedance MismatchImpedance MismatchImpedance Mismatch

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?

THOMPSONMICHAEL000020

HAASCHRISTINE 000010

LASTNAMEFIRSTNMEEMPNO

| IBM Software Group | System z |

22Java Programmierung mit DB2 z/OS

Impedance MismatchImpedance MismatchImpedance Mismatch

Verdeutlichung der Unterschiede zu prozeduralen Ansätzen am Beispiel

m1.setNachname("Maier");

Mitarbeiter m1;

Mitarbeiter m1;

nachname = "Maier";

char nachname[15];

SELECT LASTNAME FROM DSN8910.EMP SELECT * FROM DSN8910.EMP

UPDATE DSN8910.EMP SET ...

Objektorientiert

Prozedural

char nachname[15];

(z.B. COBOL, C, REXX, PL/I ...)

12

| IBM Software Group | System z |

23Java Programmierung mit DB2 z/OS

Impedance MismatchImpedance MismatchImpedance Mismatch

Ursachen des Object-relational Impedance Mismatch im Java Umfeld

SQL

Objektorientiertes Modell Relationale Algebra

� Objektorientierte Konzepte wie Kapselung, Vererbung, Polymorphie, Assoziatio-nen und Kompositionensowie Collections

THOMPSONMICHAEL000020

HAASCHRISTINE 000010

LASTNAMEFIRSTNMEEMPNO

� RI-Beziehungen (Foreign Keys & CASCADE), Joins, Trigger, Views, User-defined Functions & Stored Procedures

� Existierendes Datenmodell in Benutzung durch andere (nicht objektorientierte) Anwendungen

1. Identität

2. Zustand

3. Verhalten

Objekteigenschaften:

SQL

| IBM Software Group | System z |

24Java Programmierung mit DB2 z/OS

Impedance MismatchImpedance MismatchImpedance Mismatch

Wie dem Impedance Mismatch in der Praxis begegnet werden kann

SQL

Java Objekt Datenbanktabelle

� Lösung in der Anwendung: Manuelle Verarbeitung von relationalen Daten mittels SQL in JDBC oder SQLJ

THOMPSONMICHAEL000020

HAASCHRISTINE 000010

LASTNAMEFIRSTNMEEMPNO

� Lösung in der Datenbank: Objektorientierte DBMS

Hat sich in der Praxis nicht wirklich durchgesetzt

� Lösung in der Mitte: Verknüpfung beider Welten mit Hilfe von Persistenzframeworks

Gewinnt zunehmend an Bedeutung

Häufig anzutreffende und etablierte Vorgehensweise

THOMPSONMICHAEL000020

HAASCHRISTINE 000010

LASTNAMEFIRSTNMEEMPNO

13

| IBM Software Group | System z |

25Java Programmierung mit DB2 z/OS

Eclipse IDE als Standardwerkzeug für Java Anwendungsentwicklung

� Open Source Tool, dessen Quellcode 2001 von IBM freigegeben wurde

� Integrated Development Environment (IDE) auf Frameworkbasis mit zahlreichenPlugins zur Funktionalitätserweiterung.

� Funktionalitäten sind geglieder in Perspektiven und Views.

� Herunterladen von http://www.eclipse.org/downloads/

"Eclipse is a kind of universal tool platform - an open

extensible IDE for anything and nothing in particular."

| IBM Software Group | System z |

26Java Programmierung mit DB2 z/OS

Optim Development Studio bietet zusätzliche Vorteile speziell für DB2

� Eclipse-basiertesDatenbank-anwendungsentwicklungstoolder IBM (aktuell Eclipse 3.4.2)

� Vereinfacht die Entwicklungvon Java Anwendungengegen Datenbanken

� Ermöglicht darüber hinauseffizienten Zugriff und grund-legende Verwaltungsfeaturesfür div. Datenbanksysteme.

� Unterstützt neben DB2 for z/OS auch DB2 for LUW, DB2 for iSeries, Informix Dynamic Server, Derby sowie neuerdings auch z.T. Oracle.

� Existiert in einer kostenlosen Basic Version und einer kostenpflichtigen Variante.

http://www.ibm.com/developerworks/downloads/im/datastudiodev/learn.html

14

| IBM Software Group | System z |

27Java Programmierung mit DB2 z/OS

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.

javax.naming – Enthält Klassen des Java Naming & Directory Interface (JNDI).

com.ibm.db2.jcc – Enthält IBM-spezifische Erweiterungen des JDBC Standards.

Grundlegende JDBC Klassen:

Connection

Statement

ResultSet

DB2Connection

DB2Statement

DB2ResultSet

import java.sql.*;

| IBM Software Group | System z |

32Java Programmierung mit DB2 z/OS

Die JDBC Klasse Connection erstellt und verwaltet Connection Objekte

� Bildet die Verbindung zwischen Java Anwendung und relationaler Datenbank.

� Wird entweder über den Driver Manager oder eine Data Source instanziiert.

� Erlaubt das direkte (set…) oder indirekte (Connection URL) Setzen von JDBC Properties wie z.B. Traces, Isolation Levels, Auto Commit.

� Ermöglicht das Erstellen und Ausführen von SQL Statements sowie die Verwaltung von Transaktionen (commit/rollback).

Per Default steht der Auto-commit Parameter einer Verbindung auf true.

Connection

Statement

ResultSet

getConnection(„jdbc:db2://192.168.7.226:TMCCDB91", „ZUSER29", myPW);

17

| IBM Software Group | System z |

33Java Programmierung mit DB2 z/OS

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.

ResultSets offen halten, bedeutet ggf. auch haltenvon DB2 Locks & Threads.

Connection

Statement

ResultSet

resultset = stmt.executeQuery("SELECT LASTNAME FROM DSN8910.EMP");

resultset.next()) resultset.getString("LASTNAME")

| IBM Software Group | System z |

34Java Programmierung mit DB2 z/OS

Einfaches JDBC Code Beispiel...

String urlString = "jdbc:db2://192.168.7.226:38446/TMCCDB91";

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

18

| IBM Software Group | System z |

35Java Programmierung mit DB2 z/OS

... und was dabei in DB2 passiert

String urlString = "jdbc:db2://192.168.7.226:38446/TMCCDB91";

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

String urlString = "jdbc:db2://192.168.7.226:38446/TMCCDB91";

String stmtString = "SELECT LASTNAME FROM DSN8910.EMP WHERE EMPNO < ?";

Connection con = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

Class.forName("com.ibm.db2.jcc.DB2Driver");

con = DriverManager.getConnection(urlString, "ZUSER29", args[0]);

pstmt = con.prepareStatement(stmtString);

pstmt.setString(1, "000110");

rs = pstmt.executeQuery();

while (rs.next()) {

System.out.println(rs.getString("LASTNAME"));

}

//Setzen des Parameterwertes

//Prepare des SQL Statements

//Ausführen des SQL Statements

//Verbindungsaufbau

//Verarbeiten des Ergebnisses

//Deklaration der JDBC Variablen

| IBM Software Group | System z |

40Java Programmierung mit DB2 z/OS

Mapping der Java und JDBC Datentypen zu den Typen in SQL und DB2

� Der DB2 z/OS Optimizer kann bessere Zugriffspfade ermitteln, je besser die Auswahl von JDBC/Java Datentypen im Vergleich zu den DB2 Typen passt.

http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.java/com.ibm.db2.luw.apdv.java.doc/doc/rjvjdata.htm

21

| IBM Software Group | System z |

41Java Programmierung mit DB2 z/OS

Zuordnung & Setzen der entsprechenden DB2 for z/OS Isolation Levels

� JDBC Isolation Levels können gesetzt werden über:

TRANSACTION_SERIALIZABLE

TRANSACTION_REPEATABLE_READ

TRANSACTION_READ_COMMITTED

TRANSACTION_READ_UNCOMMITTED

JDBCIsolation Level

DB2 for z/OSIsolation Level

Uncommitted read (UR)

Cursor stability (CS)

Read stability (RS)

Repeatable read (RR)

Dat

enin

tegr

ität N

ebenläufigkeit

Connection.setTransactionIsolation(level);

oder

"jdbc:db2://192.168.7.226:38446/TMCCDB91:defaultIsolationLevel=...;"

| IBM Software Group | System z |

42Java Programmierung mit DB2 z/OS

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

Spektrum

UnmanagedUnmanagedObjectsObjects

ManagedManagedObjectsObjects

POJO mit Inline SQL (JDBC, SQLJ)

DB2

Vorteile:- Einfachheit- Volle Kontrolle über SQL- Gute Performance (SQLJ)- Gutes Monitoring (SQLJ)

Nachteile:- Keine Bindung zum Objektmodell- Mehr Aufwand für Programmierer

Vorteile:- Weniger Aufwand für Entwickler- Zugriff über OO Business Objekte

Nachteile:- Komplexität- Weniger Kontroll über SQL- Performance kann leiden- Schwierigkeiten beim Monitoring

und der Problemfeststellung

27

| IBM Software Group | System z |

53Java Programmierung mit DB2 z/OS

JPA als standardisierte Persistenzlösung für die Java Community

Java Persistence API ist ...

� das neue Standard Persistenz API für Java und ein objektrelationales Mapping Framework, basierend auf aktuellen Anforderungen & Erfahrungen.

� der Nachfolger der EJB 2 Entity Beans (CMP) und Teil der aktuellen EJB 3.0 Spezifikation des Java EE 5 Standards.

� ermöglicht eine enorme Vereinfachung der Datenpersistierung.

� nutzbar sowohl innerhalb von Java EE als auch Java SE Umgebungen.

oder

Java EE 5 Annotationen XML Mapping Dateien

| IBM Software Group | System z |

54Java Programmierung mit DB2 z/OS

Überblick über die grundlegende JPA Architektur und deren Bestandteile

� Zur Implementierung einer JPA Persistenzlösung benötigt:

– Entity Klasse

• Java Klasse, als Java Objekt Pendant zu den Datenbankdaten

– Persistence.xml Datei

• Enthält Persistence Units mit Metadaten zur Beschreibung derBeziehungen zwischen Entities und Datenbankobjekten

• Enthält zudem Konfigurationsparameter für Persistenzframework

– Java Klasse, die Entities zum Datenzugriff nutzt

public static void main(String[] args) {

EntityManagerFactory entityManagerFactory =

Persistence.createEntityManagerFactory("testjpa");

EntityManager em = entityManagerFactory.createEntityManager();

EntityTransaction userTransaction = em.getTransaction();

userTransaction.begin();

em.update(customer);

userTransaction.commit();

}

JPA

JavaAnwendung

DB2 for z/OS

28

| IBM Software Group | System z |

55Java Programmierung mit DB2 z/OS

Beachtenswerte Punkte bei gängigen Java Persistenzlösungen

DSN8910.EMP

EMPID EMPLASTNAME

1 Jones ...

public class Mitarbeiter

private int persNum

private String nachname

...

Einstellen des korrekten Datenbank-Dialekts

Eager Loading vs. Lazy Loading

Welcher Isolation Level wird verwendet? Ist dieser notwendig?

Dirty Checking

Gleichheit / Identität imPersistence Context

Transparent Transaction-level Write-behind Konzept

Vererbungsstrategien

| IBM Software Group | System z |

56Java Programmierung mit DB2 z/OS

Übersicht Java Persistenz Frameworks

■ 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

� Lazy Relationships

– Bei Referenzen zwischen Objekten

– Achtung: Hoher Performance-Impact

� Notwendigkeit für „Enhacement“ oder „Weaving“

� Bsp: Runtime: -javaagent:/path/to/openjpa-2.0.0.jarBuild Time: java org.apache.openjpa.enhance.PCEnhancer Stock.java

| IBM Software Group | System z |

64Java Programmierung mit DB2 z/OS

Dirty Checking

� Verhindert unnotige Datenbank-Schreibaktionen

� Zu persistierendes Objekt wird vorher auf Veränderungen untersucht

� Veränderte Attribute werden Attribute markiert

� � Enhancement, Weaving

� Über Transiente Attribute kann ein Persitieren komplett verhindert werden

33

| IBM Software Group | System z |

65Java Programmierung mit DB2 z/OS

Native und NamedQueries

� Native Query (.createNativeQuery() ).

– Schreiben von eigenen SQL queries

– Z.b. datenbankspezifische Funktionen

� Named Queries(.createNamedQuery() )

– im Vorfeld in einer XML-Datei spezifiziert

– Rückgabetyp vornherein bekannt

– Zur Laufzeit abgerufen

| IBM Software Group | System z |

66Java Programmierung mit DB2 z/OS

Robuste Java Anwendungen sollten SQL Exception Handling beinhalten

� 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

SQL Authid Program Stmt Stmt SQL Average Total

No Name No Type Execs Fetches CPU Cost

----- -------> -------> ----- -------- --------- ----------- ------------

1 USER1 DDF 1 D-CURSOR 1000 1 00:00.083924

2 USER1 DDF 2 D-CURSOR 1000 1 00:00.030754

DB2 for z/OS

Weitere Best Practices in der Zusammenfassung

36

| IBM Software Group | System z |

72Java 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 |

73Java Programmierung mit DB2 z/OS

Breites Spektrum an unterschiedlichsten Application Servern

DB2 for z/OS

Selbsterklärende Konfiguration

Einfache Handhabung

Großteils manuelle Einrichtung

Komplexere Umgebung

Umfassende Zusatzfeatures

Eigenentwicklung Open Source

Schlanker Funktionsumfang

37

| IBM Software Group | System z |

74Java Programmierung mit DB2 z/OS

JDBC Provider / Driver einrichten in der WebSphere Admin Konsole

� Spezifizieren der entsprechendenDriver *.jar files und *.license files.

– db2jcc.jar

– db2jcc_license_cisuz.jar

� Dieser Provider kann in der Folgevon verschiedenen Data Sources wiederverwendet werden.

| IBM Software Group | System z |

75Java Programmierung mit DB2 z/OS

Data Source Aufsetzen im WebSphere und Properties Hierarchien

� Angeben des JDBC Providers, Username, PW, Connection URL…

� Im Nachgang dann Möglichkeit Data Source und JDBC Properties zu setzen:

– Custom Properties

– WebSphere spezifische Properties

– Connection Pool Properties

38

| IBM Software Group | System z |

76Java Programmierung mit DB2 z/OS

Zentrales JDBC Tracing mit WebSphere Custom Data Source Properties

| IBM Software Group | System z |

77Java Programmierung mit DB2 z/OS

Weitere wichtige DB2 Data Source Custom Properties in WebSphere

Default Isolation Level für die Transaktioneneiner Connection mit möglichen Werten:� 1 (READ UNCOMMITTED)� 2 (READ COMMITTED)� 4 (REPEATABLE READ)� 8 (SERIALIZABLE)

keepDynamic legt fest ob DB2 z/OS dynamische SQL statements nach einemCommit im Cache behält (1=Ja, 2=Nein).

39

| IBM Software Group | System z |

78Java Programmierung mit DB2 z/OS

WebSphere bietet umfassende Connection Pooling Funktionalitäten

� 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.

DB2ConnectionPoolDataSource DB2PooledConnection Connection

� 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?

• Wurde die Anwendung geändert?

• Was wurde im System / HW / DB2 geändert?

– Eingrenzen der Probleme

• Anwendung, Middleware, Connectivity, Datenbank

• End-to-end Monitoring? JDBC Driver Funktionalität

– Monitoring und Analyse

• Anwendungstrace

• JDBC Trace

• Netzwerktrace

• DB2 Statistiken und Accounting

– Änderungen

| IBM Software Group | System z |

87Java Programmierung mit DB2 z/OS

[ibm][db2][jcc][Thread:main][Connection@50b9ee8a]setAutoCommit(false) called

[ibm][db2][jcc][Thread:main][Connection@50b9ee8a]prepareStatement(SELECT

FKEY FROM WRKTB01 WHERE (FKEY >= ?) OPTIMIZE FOR 1 ROW ) called

[ibm][db2][jcc][Thread:main][Connection@50b9ee8a]prepareStatement () returned

PreparedStatement@ee32e8a

[ibm][db2][jcc][Thread:main][PreparedStatement@ee32e8a]setShort (1, 400) called

[ibm][db2][jcc][Thread:main][PreparedStatement@ee32e8a]executeQuery () called

[ibm][db2][jcc][Thread:main][ResultSetMetaData@2b98ae8a]BEGIN

TRACE_RESULT_SET_META_DATA

[ibm][db2][jcc][Thread:main][ResultSetMetaData@2b98ae8a]Result set meta data for

statement Statement@136bee8a

[ibm][db2][jcc][Thread:main][ResultSetMetaData@2b98ae8a]Number of result set columns:

12

Tracing im JDBC und SQLJ Treiber

� Properties– traceLevel Detaillierte Einstellungsmöglichkeit des Levels

– traceFile Wohin wird geschrieben?

– traceDirectory Tracefile pro Connection

– Kann dynamisch ein und ausgeschaltet werden

– Hilfreich zur Auswertung der Connection, Methoden und DRDA Flow

44

| IBM Software Group | System z |

88Java Programmierung mit DB2 z/OS

Rudimentäres End to end Monitoring

� ((DB2Connection)conn).getDB2SystemMonitor();

– monitor.enable(true);

– monitor.start(com.ibm.db2.jcc.DB2SystemMonitor.RESET_TIMES);

– monitor.stop();

– monitor.getServerTime()

– monitor.getNetworkIOTime()

– monitor.getCoreDriverTime()

– monitor.getApplicationTime()

DB2 ServerUniv. Driver SQLJ/JDBCJava App.

prepareStatement/

executeUpdate

executeUpdate

executeUpdate

| IBM Software Group | System z |

89Java Programmierung mit DB2 z/OS

IBM Performance Expert – Extended Insight Feature

45

| IBM Software Group | System z |

90Java Programmierung mit DB2 z/OS

DB2 und SMF

� Auswertung von SMF Daten

� 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

http://www.redbooks.ibm.com/redbooks/pdfs/sg246435.pdf http://publib.boulder.ibm.com/epubs/pdf/dsnjvk13.pdf

DB2 für z/OS - Anwendungsprogrammierung mit JavaCV14D1DE, Klassenraumschulung 4 Tage

Application Programming Guide & Reference for Java

DB2 for z/OS & Java Redbook

| IBM Software Group | System z |

107Java Programmierung mit DB2 z/OS

Feedback? Kommentare? Fragen?

53

© 2010 IBM Corporation

®

Christian Daser, Technischer VertriebDB2 für z/OS

15.09.2010

Java Programmierung mit DB2 auf z/OS

| IBM Software Group | System z |

109Java Programmierung mit DB2 z/OS