J2EE Conformance von JDBC 2.0 - Middleware und EJB Applikation Server Detlef Künzel Systemberater [email protected] +49 (0)89 96271 224 Agenda Java 2 Enterprise Edition JDBC 2.0 Einführung Datenbankintegration mit JDBC 2.0 Enterprise Java Beans in Zusammenhang mit JDBC 2.0 Java 2 , Enterprise Edition Applikationsmodel Plattform Spezifikationen Definiert J2EE Anforderungen Kompatibilitäts Testtool Beschreibt, wie man eine J2EE Applikation entwickelt Überprüfung ob konform mit J2EE Plattform Referenz Implementierung Zusammenarbeit mit J2EE Plattform J2EE Architektur Java 2 Plattform und JDBC Java 2 Standard Edition JDBC 2.0 core Spezifikation Java 2 Enterprise Edition Enterprise Java Beans 1.1 JDBC 2.0 Optional Package Java Servlets Java Server Pages Zertifizierung Verfahren mit J2EE Reference Implementierung JDBC 2.0 Einführung Neue Features JDBC Core (java.sql) Scrollable-Cursors Unterstützung Neue Datentypen Batch Updates JDBC Optional Package (javax.sql) Java Naming and Directory Interface (JNDI) Connection Pooling Verteilte Transaktionen RowSets Scrollable Result Sets Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL ResultSet srs = stmt.executeQuery("SELECT COF_NAME, PRICE srs.afterLast(); while (srs.previous()) { String name = srs.getString("COF_NAME"); float price = srs.getFloat("PRICE"); System.out.println(name + " " + price); } srs.absolute(4); srs.relative(-2); ... JNDI Architecture Connection Pooling: Object Diagram Standard JDBC Connection Interfaces 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 Java Virtual Machine Java Applet RM I EJB Server 2PC DBMS 1 DBMS 2 XA Transactions Object Diagram Standard JDBC Connection Interfaces JDBC 2.0: Distributed XA Transactions Wenige Code-Änderungen: Kein Connection.commit() Kein Connection.rollback() Kein Connection.setAutoCommit() Stattdessen in dem DataSource object verwaltet JDBC Treiber muß folgende JDBC XA Interfaces implementieren: javax.sql.XADataSource javax.sql.XAConnection In SequeLink Java Edition seit Dezember 1999 Welche Applikationserver unterstützen verteilte Transaktionen? IBM - Websphere ab Version 3.5 IONA - I-Portal Applicationserver Gemstone - Gemstone/J bei anderen klären ob XADataSourceInterface unterstützt wird 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 Einsetzbar in beliebigen Java-Konfigurationen, da 100% Pure Java zertifiziert Beste Möglichkeit für Java/OS 390 Verwendet von Javasoft im Rahmen der J2EE Zertifizierungsverfahren Enterprise Java Bean SessionBeans EntityBeans modellieren Prozesse und Abläufe Zugriff auf Datenbanken z.B. Abfrage des Kontostandes Repräsentieren Geschäftsabläufe verknüpft mit Datenbanken z.B. Daten eines Bankkontos Einem Client zugeordnet anonym Von mehreren Clients nutzbar besitzt Identität Transiente Objekte kurzlebig, für eine Sitzung überleben Systemabsturz nicht Persistente Objekte langlebig überleben Systemabstürze Transaktionssteuerung durch JavaBeans Explizit (SessionBeans) ist nicht J2EE konform wird aus Performensgründen jedoch häufig angewendet Implizit (EntityBeans) Bean managed Zustandssicherung durch Bean Bean-Provider codiert DB-Aufruf (als Teil der Bean-Business-Logic) Container managed Zustandssicherung durch Container Container generiert DB-Aufrufe (Deployment Deskriptor spezifiziert zu sicheren Bean-Attributen) Transaction Attribute Summary für implizite Steuerung Beans und Transaktionen Beispiel Session Bean: SB_KundenPflege Methoden: Anlegen() Aendern() Suche() Deployment Descriptor: SB_KundenPflege: TX_SUPPORTS Entity Bean: EB_Kunde Methoden: ejbStore() ejbLoad() Deployment Descriptor: EB_Kunde: TX_MANDATORY 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); Beispiel Code (2) stmt1 = con1. createStatement(); stmt2 = con2. createStatement(); ... Transaktion hier ... // if order can be completely filled, create the order, otherwise // rollback if (flag) ut. commit(); else ut. rollback(); Vielen Dank ! Detlef Künzel Systemberater [email protected] +49 (0)89 96271 224