Kein Folientitel - Java Forum Stuttgart

Werbung
Verteilte Transaktionen mit EJBs und
JDBC 2.0
Oder, Java gets paranoid !
Richard Bourke
Agenda



Verteilte Transaktionen und Object Transaktion
Monitor
JDBC 2.0 Einführung
Enterprise Java Beans in Zusammenhang mit
JDBC 2.0
Copyright © 1999 MERANT INC.
Was sind Verteilte Transaktionen ?
•Transaktionen auf mehrere, auch
heterogenen Datenbanken
•Alle beteiligte Datenbanken
sind immer in einem konsistenten
Zustand
•Früher immer von einem
Transaktions-Monitor gesteuert
•Unabdingbar für unternehmenskritische Applikationen
•XA, 2 Phase-Commit, Long
Transaction sind (fast) Synonyme
Copyright © 1999 MERANT INC.
Java Virtual
Machine
Java
Applet
RM I
EJB Server
2PC
DBMS 1
DBMS 2
Arten von Transaktionsmonitore

Proprietär
Prozedurale Interfaces zu Sprachen wie C, C++, Cobol
 Verbindungen zu Datenbanken ebenso proprietär


Object Transaction Monitor (OTM)
Basiert auf Corba Transaction Service / Microsoft DCOM
 OO Interfaces möglich
 Verbindung zu Datenbanken noch proprietär


Enterprise Java Beans
Grafische integration in OO Entwicklungsumgebungen
 Standardisierte Interfaces zu Datenbanken

Copyright © 1999 MERANT INC.
Copyright © 1999 MERANT INC.
Java 2 Platform

Standard Edition


beinhaltet JDBC 2.0 (core plus extensions)
Enterprise Edition

Enterprise Java Beans 1.1

Java Transaction API (JTA)
Java Servlets
 Java Server Pages
 Compatibility Tests
( in etwa 100% Pure Java für Application Servers)

Copyright © 1999 MERANT INC.
Was ist JDBC?

Das Datenbank-Connectivity API für Java


Low-Level / wenige Abstraktion
High-level Komponenten
Embedded SQL (SQLJ)
 Object Relational Mapping Werkzeuge
TM Plattformen
 Enterprise JavaBeans


4 Arten von JDBC Treibern
Copyright © 1999 MERANT INC.
DataDirect SequeLink Java Edition





Ein universeller JDBC-Treiber für alle
Datenbanken, dadurch maximale DBUnabhängigkeit
Kombiniert Performance von Typ 4-Lösung mit
Flexibilität von Typ 3
Beste Möglichkeit für Java/OS 390
Einsetzbar in beliebigen Java-Konfigurationen, da
100% Pure Java zertifiziert
Höchste Zuverlässigkeit und Stabilität, da auf
bewährter SequeLink-Plattform basierend
Copyright © 1999 MERANT INC.
JDBC 2.0 Neue Features

JDBC Core (java.sql)
Scrollable-Cursors Unterstützung
 Neue Datentypen
 Batch Updates


JDBC Standard Extension (javax.sql)
Connection Pooling
 Rowsets
 Java Naming and Directory Interface (JNDI)
 Verteilte Transaktionen

Copyright © 1999 MERANT INC.
JDBC 2.0



Das einzige offizielle API für DatenbankTransactionen mit "Distributed Unit of Work"
JDBC wird als "Resource Adapter" vom
Transaction Manager verwendet
Stellt dem Transaction Manager Dienste zur
Verfügung:
Connection Pooling
 XA Verteilte Transaktionen

Copyright © 1999 MERANT INC.
JDBC 2.0: Connection Pooling


Transparent für die Applikationen
Wird intern vom DataSource object verwaltet durch
javax.sql.PooledConnection() (implementiert von EJB
Server )
 javax.sql.ConnectionPoolDataSource (implementiert von
JDBC Treiber)

Copyright © 1999 MERANT INC.
Connection Pooling: Code Beispiel
Connection con = null;
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(
"jdbc/ inventoryDB");
con = ds. getConnection( user, password);
.
.
.
} finally {
if (con != null) con. close();
Copyright © 1999 MERANT INC.
JDBC 2.0: Distributed XA Transactions

Wenige Code-Änderungen:
Kein Connection.commit()
 Kein Connection.rollback()
 Kein Connection.setAutoCommit()



Wird intern von DataSource object verwaltet
JDBC Treiber muß folgende JDBC XA Interfaces
implementieren:
javax.sql.XADataSource
 javax.sql.XAConnection


In SequeLink Java Edition in Q3 99
Copyright © 1999 MERANT INC.
XA Transactions Object Diagram
Copyright © 1999 MERANT INC.
Transaction Attribute Summary
für implizite Steuerung
Copyright © 1999 MERANT INC.
Beispiel Code (in EJB)
// Create multi-component, multi-distributor order
// in Bean-Demarcated Session Bean
Context ctx = new InitialContext();
ds1 = (DataSource) ctx.lookup("jdbc/ inventoryDB1");
ds2 = (DataSource) ctx.lookup("jdbc/ inventoryDB2");
ut = ctx. getUserTransaction();
ut. begin();
con1 = ds1.getConnection( user1, password1);
con2 = ds2.getConnection( user2, password2);
Copyright © 1999 MERANT INC.
Beispiel Code (2)
stmt1 = con1. createStatement();
stmt2 = con2. createStatement();
Flag = true
// loop through order lines
for each <component> {
// check stock levels
rs = stmt1. executeQuery(
"select stock, arttype, price from stock " +
"where artnm like <componentname>"”);
Copyright © 1999 MERANT INC.
Beispiel Code (3)
if (rs. getInt( stock) != 0)
// decrement stock of item in DB1
stmt1. execute(" update stock set stock=" +
(rs. getInt(" stock")- 1) where artnm= <component>");
// add new account record in DB2
stmt2. execute(" insert into account values( '" +
name + "', '" + address + "', " +
rs. getInt(" arttype") + ", " +
rs. getInt(" price") + ")");
else
flag = false
}
Copyright © 1999 MERANT INC.
Beispiel Code (4)
// if order can be completely filled, create the order,
otherwise
// rollback
if (flag)
ut. commit();
else
ut. rollback();
Copyright © 1999 MERANT INC.
Referenzen



Ejb1_1-publicdraft2.pdf
jdbc spec 2.0 standard extension.pdf
Developing Mission- Critical Applications using
JDBC 2.0 Technology Seth White, JavaSoft.
http://industry.java.sun.com/javaone/99/tracks/
Copyright © 1999 MERANT INC.
Herunterladen