getting started with java and db2 for z/os and os/390

32
Peggy Abelite DB2 for z/OS and OS/390 Development IBM Corporation Getting Started with Java and DB2 for z/OS and OS/390 Web Thread All DB2 platforms September 3, 2002

Upload: tess98

Post on 22-Apr-2015

2.227 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Getting Started with Java and DB2 for z/OS and OS/390

Peggy Abelite DB2 for z/OS and OS/390 DevelopmentIBM Corporation

Getting Started with Java and DB2 for z/OS and OS/390

Web Thread

All DB2 platforms

September 3, 2002

Page 2: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Agenda

JDBCSQLJ

Java Stored ProceduresNew Java combined client

Page 3: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Example customer e-business solutions

Unix

Unix

Unix

AIX

OS/390DB2

DB2 Connect

DB2 Connect

DB2 Connect

DB2 Connect

zSeries 900

Hipersockets and hypervisor

Linux Linux Linux OS/390DB2

DB2 Connect

DB2 Connect

DB2 Connect

zSeries 900

CICS OS/390DB2

zSeries 900

WebSphere EE

IMS

A

B

C

Page 4: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

JDBC driver types - defined by Java (TM)Type 1 -- implements JDBC as a layer on top of ODBC

Type 2 -- uses native method calls (JNI) to call DLLs that issue the SQL (the DLLs are specially written for JDBC)Use Type 2 for local access (and transactional remote access)

Type 3 -- network driver that is database vendor independent

Type 4 -- network driver that speaks the database's native network protocolUse Type 4 for "network" access (non-transactional)

Page 5: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

JDBC Example -- Select

java.sql.PreparedStatement ps = con.prepareStatement( "SELECT ADDRESS FROM

EMP WHERE NAME=?");ps.setString(1, name);java.sql.ResultSet names = ps.executeQuery();names.next();addr =names.getString(1);names.close();

Page 6: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

JDBC Examples - Call a stored procedure CallableStatement cstmt = con.prepareCall( "CALL MYRES1(?)" ); cstmt.setBigDecimal(1, startSal); boolean rsltFlag = cstmt.execute(); if ( rsltFlag ) { queryBasic = cstmt.getResultSet(); while (queryBasic.next()) { name = queryBasic.getString(1); sal = queryBasic.getBigDecimal(2,2); System.out.println( name + " " + sal ); } queryBasic.close(); }

Page 7: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

SQLJ OverviewStatic SQL syntax for Java

easier than JDBC, better performance too!Wide DBMS vendor acceptance

IBM, Oracle, Sybase, Tandem...SQLJ has been accepted by ANSI for inclusion in the SQL-related standards

www.sqlj.org

Page 8: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Why use SQLJ?Static SQL performance for Java applications

significant performance advantage over JDBC

Static SQL authorization modelprovides Java with a stronger authorization model

Productivityless code written by the application programmerresulting code is easier to maintain

Page 9: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Static SQLINSERT, UPDATE, DELETE, CREATE, GRANT, etc.Singleton SELECT and cursor-based SELECTcalls to stored procedures (including result sets)COMMIT, ROLLBACKmethods for CONNECT, DISCONNECT

JDBC must be used for the dynamic SQLspecs for portable Java stored procedures

What does SQLJ support?

Page 10: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Static SQL is associated with "program"plans/packages identify "programs" to DB2program author's table privileges are usedend users are granted EXECUTE on program

Dynamic SQL is associated with "user"no notion of "program"end users must have table privileges

BIG PROBLEM FOR A LARGE ENTERPRISE!!!

Static SQL Authorization

Page 11: Getting Started with Java and DB2 for z/OS and OS/390

#sql (con) { SELECT ADDRESS INTO :addr FROM EMP WHERE NAME=:name };

SQLJ:

JDBC:java.sql.PreparedStatement ps = con.prepareStatement( "SELECT ADDRESS FROM EMP WHERE NAME=?");ps.setString(1, name);java.sql.ResultSet names = ps.executeQuery();names.next();addr = names.getString(1);names.close();

-- portable across platforms and DBMSs-- compile/bind time schema checking-- static SQL performance and authorization!!!

-- concise-- strong typing

Retrieve a single row from DB2

Page 12: Getting Started with Java and DB2 for z/OS and OS/390

#sql (con) {INSERT INTO T1 VALUES( :hv1, :hv2, :hv3) };SQLJ:

JDBC:CallableStatement mystmt = con.prepareCall( "INSERT INTO T1 VALUES(?,?,?)");mystmt.setString(1,hv1);mystmt.setString(2,hv2);mystmt.setInt(3,hv3);mystmt.executeUpdate();

SQLJ example: INSERT one row

What if the table has 100 cols?

Page 13: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

SQLJ source

class ABC {

#sql SELECT ...

}

Java source

class ABC { call "stub" }

Extracted SQL

SELECT ... host var data

Generic SQLJtranslator

Javabytecodes

Extracted SQL

SELECT ... host var data

Javabytecodes

Extracted SQL

SELECT ... host var data

DBMS-specific"stub"

Optional step:

DBMS-specificbinder

Java Compiler

Compiling an SQLJ application

JDBC "stub" JDBC "stub"

JDBC default "stub"

Page 14: Getting Started with Java and DB2 for z/OS and OS/390

JDBC V6 JDBC V7 SQLJ V6 SQLJ V70

100

200

300

400

500

600

Tra

nsac

tions

per

sec

ond

Java API Performance Comparisons

Normalized throughput for zSeries G7 with 3 engines with 100% cache hit for JDBC.SQLJ advantage increased from 20% to 35% when Java overhead was reduced.

+20%

+35%

Page 15: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Java Stored ProceduresSQLJ Part 1 specification

Output parameters are single-element arraysBecause Java doesn't allow modifying parms

Result sets are not in catalog definitionResult sets are in method signature as outputs

Because "with return" is not universalCan be JDBC, SQLJ, or both

Compiled Java on V5 and V6JAR files support in V7

Page 16: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

V7: Built-in Utility Stored ProceduresAs per SQLJ specificationInvoked with CALL statement

INSTALL_JAR (file URL)Installs the Java ARchive file into the DB2 catalogJAR file contains one or more Stored Procedures

REPLACE_JARREMOVE_JAR

new JAR authorizationGRANT USAGE ON JAR

Page 17: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Tasks for OS/390 System ProgrammerSet up WLM environment, address space JCLInstall IBM S/390 JDK w/enhancementInstall JDBC/SQLJ driver

Run db2genJDBC to generate DBRMs and bind into DB2 package

-OR- use default .ser file with V7 driverSet up JAVAENV with "home" dirsProvide .profile for users

Page 18: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

JAVAENV DD CARD(in WLM address space JCL)

Dataset containing RUNOPTSApplies to entire WLMENV, not individual SPs

Must set JAVA_HOMEIBM JDK 1.3.1 (persistent reusable technology)

Must set DB2_HOMEJDBC/SQLJ driver directory

Can set CLASSPATHdirectory for user classes not in JARall SP classes are shared

Limited to 245 characters

Page 19: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Language

0

200

400

600

800

1000

1200

Nor

mal

ized

Thr

ough

put -

tran

s pe

r se

cond

Java- JDBCJava - SQLJC - static

Stored Procedure Performance by Language

Page 20: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

What is DB2 Common Client?

Reengineering of DB2 Connect and CAEImproved DB2 Connect and CAE consistency/performance

much higher percentage of common codeDRDA Improvements

external capabilitiesinternal performance improvements

Scrollable cursors

????

Page 21: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Objectives for new Java ClientSingle driver for Unix, Windows, and OS/390

eliminate major cause of Java porting problems

Improved Java driver integration with DB2Simplify install/deployment of Type 2 driverImprove JDBC and SQLJ performance

SQLJ is now faster than JDBC on Unix/Windows

Page 22: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

DB2 Java Client Architecture

Common Code for all drivers:JDBC APIsSQLJ APIs

Type 4 DriverType 2 driver

for Unix/Windows

Type 2 driver for

OS/390 or z/OS

DRDA overTCP/IP

RRS Attach

(Any DB2 server)

Local SQL API XA Support

Page 23: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

New function in new Java Client

Type 4 driver for thin clientsProvide fully compliant JDBC 2.0 driverTrace improvements

dynamically turn trace on/offmultiple levels of trace detail

Provide 100% Java application development process for SQLJ

Page 24: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

OS/390DB2

Java program

Configuration D

JCC: Type 4 Driver support

Network applet driverCharacter conversion is optional

performance small download footprint

Page 25: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

DB2's type 4 JDBC driverTargeted at clients that fit this profile:

prefer to not install the JDBC driver on their machinedon't need high-end performance/scalability/availability

The type 4 driver will NOT support:JTA (2--phase commit)parallel sysplex workload balancingconnection concentrator functionalitystatic SQL profilingQuery Patrollersome of the performance optimizations in the type 2 driverfull range of code page translations

If you are trying to support EJBs or high-end application servers, you should use the type 2 JDBC driver.

Page 26: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

New Java API Enhancements

Scrollable cursor support Improved security for DB2 authenticationJava API for Set Client Information (SQLESETI)Improved Java SQL error informationNative DB2 server SQL error messagesConnection pooling improvements

Page 27: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Scrollable Cursor Support

Java Application

JavaDriver

DB2 Server-- Exploits DB2 engine scrolling-- Supports update operations-- Java driver performs "local" scrolling within a block of data-- minimizes network traffic

Current row

QueryResult

Page 28: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Java API for Set Client InformationFor DB2 for Unix and Windows users:

provides additional monitoring informationFor DB2 for OS/390 and z/OS users:

provides additional monitoring informationall four strings are included in all IFC records

Allows you to search accounting records or other IFC records for data related to a particular Java user or application.

the last two strings can be used for WLM prioritization of the Java connections to DDF

Page 29: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Improved SQL Error Information

DB2Diagnosable class for reporting contents of the SQLCA and SQL error message text

getSQLCode()getSQLErrmc()getSQLErrp()getSQLErrd()getSQLState()getSQLWarn()

getSQLErrorMessage() Information is accessible for both JDBC and SQLJ whenever an SQL exception is thrown

Page 30: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Native DB2 Server SQL Error Messages

"Error Message" stored procedures are provided by each DB2 server (including DB2 for OS/390 V6 and V7)Allows DB2 client to return "native" error message text for the target DB2 serverNative error message is only returned when explicitly requested

getSQLErrorMessage()

Page 31: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

SQLJ Application Development Process(BIG improvements !)

100% Java application process eliminates DBRM files and .bnd files

New SQLJ serialized profile formatfully portable to all platforms -- user can deploy on any server platform without running db2profc on the target system.contains information needed for all BIND operations, without having to recustomize on each BINDmigration path for old SQLJ serialized profiles to the new format

Simplifies deployment of applications, but does require changes in existing procedures used by SQLJ users.

Page 32: Getting Started with Java and DB2 for z/OS and OS/390

International DB2 Users Group

Summary

JDBC Driver TypesRemember what Type 4 is designed for

SQLJ - static SQL for a dynamic worldJava stored proceduresNew combined client for all platforms

Code portability