Verteilte Transaktionen mit EJBs und JDBC 2.0
description
Transcript of Verteilte Transaktionen mit EJBs und JDBC 2.0
Verteilte Transaktionen mit EJBs und JDBC 2.0
Oder, Java gets paranoid !
Richard Bourke
Copyright © 1999 MERANT INC.
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, auchheterogenen Datenbanken•Alle beteiligte Datenbankensind immer in einem konsistentenZustand•Früher immer von einemTransaktions-Monitor gesteuert•Unabdingbar für unternehmens-kritische Applikationen•XA, 2 Phase-Commit, LongTransaction sind (fast) Synonyme
EJB Server
DBMS 1
Java Virtual Machine
Java Applet
DBMS 2
RM I
2PC
Copyright © 1999 MERANT INC.
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 Enterprise JavaBeansTM Plattformen
4 Arten von JDBC Treibern
Copyright © 1999 MERANT INC.
DataDirect SequeLink Java Edition
Ein universeller JDBC-Treiber für alle Datenbanken, dadurch maximale DB-Unabhä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.sqljava.sql) Scrollable-Cursors Unterstützung Neue Datentypen Batch Updates
JDBC Standard Extension (javax.sqljavax.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 Datenbank-Transactionen 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 BeispielConnection 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 Summaryfür implizite Steuerung
Copyright © 1999 MERANT INC.
Beispiel Code (in EJB)// Create multi-component, multi-distributor order// in Bean-Demarcated Session BeanContext 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 linesfor each <component> {// check stock levelsrs = 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
// rollbackif (flag)ut. commit();elseut. 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/