ppt - Extras Springer

Werbung
JAVA DAYS ´98
Embedded SQL in Java
Michael Stapf
Berater Strategische Projekte
ORACLE Deutschland GmbH
JAVA DAYS ´98
Agenda

Java im Unternehmen
- Warum Java?
- Vorteile
- Strategie

Embedded SQL in Java: SQLJ
- Einleitung
- Verteilungskonfigurationen
- SQLJ Translator
- Beispiele
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Warum Java im Unternehmen?

Java ist bereit die dominierende Sprache für
unternehmenskritische Anwendungen zu werden

Java - eine hochproduktive Programmiersprache
- Objektorientiert, Komponentenmodelle
- Know-how verfügbar

Java ist geeignet für eine neue Klasse von
Unternehmens-Anwendungen
- Unternehmens-Anwendungen migrieren von
Client/Server hin zu Thin Client-basierten Intranets
3
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Client/Server Verteilungskosten
Niederlassung
Niederlassung
Backup
Neue
Anwendungen
Software
Upgrade
© 1998 Sun Microsystems GmbH
Niederlassung
JAVA DAYS ´98
Einsparpotential durch Network Computing
PC oder NC:
Browser
Niederlassung
Niederlassung
Backup
Neue
Anwendungen
Software
Upgrade
AnwendungsServer
DatenbankServer
Data Center
© 1998 Sun Microsystems GmbH
Niederlassung
JAVA DAYS ´98
Java Unternehmens-Strategie

Java als die Sprache für Enterprise Network
Computing
- ENTERPRISE CLASS JAVA SERVER Plattform
- Infrastruktur für serverbasierte Java-Anwendungen
- Java VM
- JDBC-Treiber, Embedded SQL in Java: SQLJ
- Enterprise JavaBeans, CORBA
- Komponentenbasierte Java-Entwicklungswerkzeuge
welche diese Plattform ausnutzen und unterstützen
6
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Agenda

Java im Unternehmen
- Warum Java?
- Vorteile
- Strategie

Embedded SQL in Java: SQLJ
- Einleitung
- Verteilungskonfigurationen
- SQLJ Translator
- Beispiele
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Embedded SQL in Java: SQLJ

SQLJ ermöglicht Anwendungsentwicklern:
- Einbettung von SQL-Anweisungen in Java-Programmen
- Präprozessor zur Übersetzung von SQLJ in Java-Code mit
JDBC-Aufrufen
- Laufzeitumgebung: Nutzung von JDBC-Treibern beliebiger
Hersteller

SQLJ verbessert die Entwicklungsproduktivität
- Wesentlich kompakterer Code als mit JDBC
- Typüberprüfung von SQL-Anweisungen zur
Kompilierungszeit
- Wartbare und einfacher zu schreibende Java-Programme
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Elemente von SQLJ

Standardisierter Sprachsyntax

Gemeinsame Spezifikation verschiedener
Hersteller

SQLJ Translator

Frei verfügbare Referenz-Implementierung
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Der SQLJ Translator
SQLJ-Code
*.sqlj Datei
SQLJ
Präprozessor
Java-Code
mit
JDBCAufrufen
Java
Compiler
Java
*.class Datei
DBMS

Der Precompiler generiert Standard Java Sourcecode mit
JDBC-Aufrufen

Überprüft die SQL-Anweisungen gegen die Datenbank

Der generierte Code wird wie jedes andere JavaProgramm kompiliert
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Vergleich JDBC mit SQLJ
JDBC
SQLJ
java.sql.CallableStatement stmt;
Connection conn;
ResultSet results;
ResultSet results;
conn = DriverManager.getConnection
(“jdbc:default”);
stmt = conn.prepareStatement
(“SELECT ename FROM emp
WHERE sal > ? AND deptno = ?”);
stmt.setInteger(1, salparam);
stmt.setInteger(2, deptnoparam);
results = stmt.executeQuery();
8 fehleranfällige Anweisungen
#sql results =
{SELECT ename FROM emp
WHERE sal > :salparam
AND deptno = :deptnoparam};
2 einfache Anweisungen
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Standardisierung

SQLJ Partner: Compaq/Tandem, IBM,
Informix, Javasoft, Oracle, Sybase und andere

SQLJ Translator
- SQLJ-Sprachspezifikation wurde beim ANSI/ISO-Komitee
eingereicht
- Die Translatoren verschiedener Hersteller sind kompatibel
Generiert Java-Code 100% kompatibel mit der JDBC
Spezifikation
- Binärportabilität von SQLJ Stored Procedures

Integrierbar mit Standard Java-Werkzeugen
- Source Level Debugger etc.
12
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Standardisierung

Bestandteile:
- Part 0: Standard Syntax für Stored Procedures und
Trigger in Java
- Part 1: Syntax für Embedded SQL in Java
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Agenda

Java im Unternehmen
- Warum Java?
- Vorteile
- Strategie

Embedded SQL in Java: SQLJ
- Einleitung
- Verteilungskonfigurationen
- SQLJ Translator
- Beispiele
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Verteilungskonfigurationen

SQLJ bietet verschiedene Möglichkeiten
- Client/Server mit JDBC Typ 2 Treibern
- Thin Clients mit JDBC Typ 4 Treibern
- 3-tier Anwendungen mit Typ 2 Treibern
- SQLJ in der Datenbank
15
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Client/Server-Verteilung
PC
Java
Anwendung
SQLJ Runtime
JDBC Typ 2

DBMS
herstellerspez.
C/S-Protokoll
SQL
Stored
Procedures
SQLJ ist für Client/Server Java
Anwendungen einsetzbar

Java Application, SQLJ Runtime, und JDBC Typ 2
Treiber auf dem Client
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Verteilung auf den
Anwendungs-Server
BROWSER
HTTP
http Listener
http Dispatcher
HTMLSeite
SQLJ
Anwendung
FIREWALL

SQLJ Runtime
JDBC Typ 2
AnwendungsServer
DBMS
herstellerspez.
C/S-Protokoll
SQL
SQL*Net
Stored
Procedures
SQLJ kann für die “3 tier” Verteilung genutzt
werden

JDBC Typ 2 und DBMS-Client verteilt auf den AnwendungsServer
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Thin Client Verteilung
BROWSER
Java
Anwendung
HTTP
Web Server
DBMS
SQLJ Runtime
JDBC Typ 4
herstellerspez. Protokoll
(TCP/IP)
SQL
SQL*Net
Stored
Procedures
Gleiche Maschine


Herunterladbare Applets verbinden sich direkt
mit der Datenbank
Java Security-Anforderungen


Datenbank muß sich auf der gleichen Maschine befinden wie der
Webserver
Keine Restriktionen für JDK 1.1 Signed Applets
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Translator in der Datenbank
ORACLE
DBMS
IIOP
herstellerspez.
C/S-Protokoll
Java VM
SQL*Net
Embedded
JAVASQLJ
VM
Embedded JDBC Driver
SQL, Stored Procedures
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Agenda

Java im Unternehmen
- Warum Java?
- Vorteile
- Strategie

Embedded SQL in Java: SQLJ
- Einleitung
- Verteilungskonfigurationen
- SQLJ Translator
- Beispiele
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Translator
Sprachkonstrukte
- Überblick
- Ausführbare SQL-Klauseln
- Connection Management
- Result Set Iterator Objekte

Translator Werkzeug

Vorteile
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Sprachübersicht



Ein SQLJ-Programm ist ein Java-Programm
mit eingebetteten SQLJ-Konstrukten
SQLJ-Konstrukte beginnen mit ‘#sql’ und
enden mit ‘;’
Es gibt zwei Arten von SQLJ-Klauseln

Ausführbar

Deklarativ
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Ausführbare Klauseln

Ein auführbares Konstrukt enthält SQL in
geschweiften Klammern
#sql { INSERT INTO emp (ename, sal)
VALUES ('Scott', 35000) };


Text innerhalb der geschweiften Klammern
nutzt SQL Regeln, ansonsten Java Regeln
Ausführbare Klauseln sind dort einsetzbar wo
auch Java Blockanweisungen erlaubt sind
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Bind-Variablen

Ausführbare Konstrukte können Java Bind-Variablen
enthalten.
Gekennzeichnet durch vorangestellten Doppelpunkt ':'
String name = “SMITH”;
double salary = 25000.0;
#sql { UPDATE emp SET sal = :salary
WHERE ename = :name };

Bind-Variablen können lokale Variablen, Parameter
oder Felder sein
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Bind-Variablen: Unterstützte Typen

Standard JDBC Typen
- boolean, byte, short, int, long, double, float
- String, byte[]
- java.sql.Date, java.sql.Time, java.sql.Timestamp

Java Wrapper Klassen
- Boolean, Byte, Short, Integer, Long, Double,
Float

Stream Klassen (package sqlj.runtime)
- BinaryStream, AsciiStream, UnicodeStream

Herstellerspezifische Typen
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Runtime Connection zur Datenbank

Laden des JDBC-Treibers wie in einer JDBC-Session
Class.forName
(“oracle.jdbc.driver.OracleDriver”);

Erzeugung einer Datenbankverbindung
DefaultContext ctx = new DefaultContext(
“jdbc:oracle:thin:@localhost:1521:orcl”,
user, password);

Installation als default Verbindung
DefaultContext.setDefaultContext(ctx);

Oder explizit in einer ausführbaren Klausel
#sql [ctx] { SQL operation };
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Deklaration des ConnectionContext

ConnectionContext Klassen sind auch explizit
deklarierbar
#sql context MyContext;

Deklariert eine Klasse die zur Ausführung von SQLAnweisungen nutzbar ist
MyContext myCtx =
new MyContext(url, user,
password);
#sql [myCtx] { … };

Deklarationen können dort eingesetzt werden wo
auch Klassendeklarationen erlaubt sind
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Connection Management

Mehrere Verbindungskontexte können
gleichzeitig instantiiert und genutzt werden

Verschiedene Verbindungskontext-Klassen
können zur Partitionierung von
Anweisungen die in verschiedenen Schemas
ausgeführt werden genutzt werden

Zur Übersetzungszeit kann für jede
Verbindungskontext-Klasse eine
unterschiedliche SQL-Überprüfung
vorgenommen werden
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Ausführung einer Abfrage

Definition eines Iterator-Typs

Erzeugung einer Instanz des Iterator-Typs

Füllen des Iterators mit Abfrageergebnissen

Nutzung der Iterator-Methoden um auf
Abfragespalten per Namen zuzugreifen
(Named Iterator)
ODER

FETCH..INTO Syntax für den Zugriff auf
Abfragespalten per Position (Positional
Iterator)
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Definition eines Named Iterator Typs

Explizite Bereitstellung der Java Namen und
Typen der Abfragespalten

Die Java-Names der Iterator-Spalten sollten
mit den SQL-Namen in der Abfrage
übereinstimmen

Die Iterator-Typen Definition sollte dort
eingesetzt werden wo eine JavaKlassendefinition erlaubt ist
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Beispiel eines Named Iterator
#sql iterator EmpIter (String ENAME,
double SAL);
Dies definiert eine Klasse EmpIter mit unter
anderem folgenden Methoden:
boolean next();
// gets next row,
// if any
String ENAME (); // gets column ENAME
// as String
double SAL ();
// gets column SAL
// as double
void close ();
// closes iterator
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Einsatz des Iterators für eine Abfrage

Deklaration einer Variablen des Iterator Typs

Instantiierung des Iterator-Typs mit einer
SQL-Abfrage
EmpIter emps;
#sql emps = { SELECT ename, sal FROM emp };
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Holen der Abfragespalten

next() füllt den Iterator mit dem Result Set der
aktuellen Zeile der Abfrage (nutzt den
Spaltennamen)

Lesen der Daten mit den Iterator-Methoden
while (emps.next ()) {
String ename = emps.ENAME ();
double sal = emps.SAL ();
…
}

Schließen des Iterators zur Ressourcenfreigabe
emps.close();
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Beispiel eines Positional Iterators

Positional Iterator Typen holen Abfragespalten per
Position (nicht per Name)
#sql iterator EmpIter2 (String, double);
…
EmpIter2 emps;
#sql emps = { SELECT ename, sal FROM emp };
while (true) {
String ename = null; double sal = 0.0;
#sql { FETCH :emps INTO :ename, :sal};
if (emps.endFetch()) break;
...
}
emps.close();
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Translator
Sprachkonstrukte
Translator Werkzeug
- Translator Installation und Setup
- SQLJ Programmübersetzung
und Java Kompilierungsanweisungen
- Nutzung eines SQL Checkers während der
Übersetzung

Vorteile
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Setup

Installation
- SQLJ benötigt JDK 1.1 oder höher
- SQLJ ist ein reines Java Programm, daher muß
nur der CLASSPATH angepasst werden um die
SQLJ-Klassen zu finden

Setup Nutzerumgebung
- %JAVA_HOME%\sqlj\lib\translator.zip
im CLASSPATH
- %JAVA_HOME%\sqlj\bin im PATH
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Kompilierung eines SQLJ-Programms

Übersetzung des SQLJ Programms
% sqlj [options] Beispiel1.sqlj
(erzeugt java Datei + Serialized Profiles)

Kompilierung der sich ergebenden Java-Datei
% javac Beispiel1.java

Ablauf des Programms
% java Beispiel1
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Verbindung zur Datenbank zur
Übersetzungszeit

Ermöglicht statische SQL-Überprüfung

SQLJ Translator verbindet sich zur Datenbank, und
überprüft ob Tabellen und Stored Procedures im
Schema enthalten sind.

Der Translator überprüft ob die SQL Anweisungen
für die vorkommenden Tabellen und Prozeduren
korrekt sind.

Umgebungsargumente: Das default Schema zum
Login, der JDBC Treiber, etc. -- können in die
properties Datei eingetragen werden
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Properties Datei

Short-cut für lange Kommandozeilen

Benennung: sqlj.properties

Ermöglicht für Benutzer die Online-Überprüfung
sqlj.user=scott

Andere Einstellungen für die Übersetzung
sqlj.url=jdbc:oracle:thin:@localhost:1521:orcl
sqlj.password=tiger

Herstellerspezifische Einstellungen
- Zu verwendende JDBC-Treiber
- Zu verwendende SQL Checker
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Translator
Sprachkonstrukte
Translator Werkzeug
Vorteile
- Höheres Abstraktionsniveau als bei JDBC
- Frühe Überprüfung der statischen SQLAnweisungen
- Stark typisierte Iteratoren
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ: Höherer Abstraktionsgrad als JDBC

SQLJ unterstützt eine default Verbindung

JDBC-Anweisungsobjekte sind verborgen



SQL-Anweisungen können mehrere Zeilen
umfassen
Bind-Variablen sind direkt in SQLOperationen eingebettet
Automatisches Behandlung von Null-Werten
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ: Prägnanter als JDBC
int n = 17950;
// SQLJ
#sql {insert into EMP values (:n)};
// JDBC
Statement stmt =
conn.prepareStatement
("insert into EMP values (?)");
stmt.setInt (1, n);
stmt.execute ();
stmt.close ();
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Frühe Typen-Überprüfung
Date d = new Date (1993,3,11);
// SQLJ
#sql {insert into EMP (sal) values (:d)};

Translator überprüft die Typen der Java
Variablen gegen SQL-Typen



Wirft einen Type Mismatch Error
Ein äquivalentes JDBC-Programm würde nur einen
Laufzeitfehler verursachen
SQLJ-Programme sind robust
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Stark getypte Iteratoren

Stark getypte Iteratoren bieten eine
Typüberprüfung durch Java

Iteratoren sind Java Objektse

Sind deklarierbar, übergebar an Methoden und
zurückgebar als Ergebnisse
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Gegenüberstellung SQLJ und JDBC

SQLJ ist eine Sprache für
statisches SQL

JDBC ist ein API für
dynamisches SQL

SQLJ ist ein reines JavaProgramm welches JDBC
zur Laufzeit nutzt

JDBC-Treiber können
mittels C, Java, …
implementiert werden

SQLJ-Programme sind
für jede Datenbank
anpassbar

JDBC-Treiber können
Datenbank-spezifische
Eigenschaften enthalten

Performance
- setzt auf JDBC auf
+ statische Optimierung
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Agenda

Java im Unternehmen
- Warum Java?
- Vorteile
- Strategie

Embedded SQL in Java: SQLJ
- Einleitung
- Verteilungskonfigurationen
- SQLJ Translator
- Beispiele
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
Beispiele

BeispielTemplate.sqlj
import sqlj.runtime.*;
// Use SQLJ runtime
import sqlj.runtime.ref.*; // More SQLJ runtime
import java.sql.*;
// Use JDBC too
… iterator declarations go here …
class ExampleTemplate {
public static void main (String args [])
throws SQLException
{
… hier SQLJ Code einfügen …
}
}
© 1998 Sun Microsystems GmbH
JAVA DAYS ´98
SQLJ Beispiele

Example1.sqlj: Ausgabe der Namen und
Gehälter aller Angestellten
- Abfrage die ENAME und SAL der Tabelle
EMPLOYEE selektiert. ENAME wird als Java
String und SAL als Java double geholt.

Example2.sqlj:
Gehaltserhöhung für alle Mitarbeiter
- Deklaration eines Iterators um alle Namen und
Gehälter der Mitarbeiter zu erhalten
- Update des Gehalts jedes Mitarbeiters mittles
Java Bind-Variablen

Example3.sqlj: (wie Beispiel 1 nur mit
© 1998 Sun Microsystems GmbH
// SQLJ runtime classes
}
{
}
{
// password
"tiger" ));
© 1998 Sun Microsystems GmbH
emps.close();
}
emps.ENAME() + " earns " + emps.SAL());
System.out.println(
while (emps.next()) {
};
order by ename
#sql emps = { select ename, sal from emp
EmpIter1 emps;
// Query the employee names
}
System.out.println("Error connecting to database.");
catch (Exception e) {
}
// user
"scott",
"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // url
DefaultContext.setDefaultContext( new DefaultContext (
Class.forName("oracle.jdbc.driver.OracleDriver");
try { // Connect to the database
throws SQLException
public static void main (String args[])
public class Example1
#sql iterator EmpIter1 (String ENAME, double SAL);
import sqlj.runtime.ref.*; // SQLJ runtime classes
import sqlj.runtime.*;
import java.sql.*;
JAVA DAYS ´98
Beispiel 1
// SQLJ runtime classes
}
{
}
{
// password
"tiger" ));
© 1998 Sun Microsystems GmbH
{
}
where ename = :who };
#sql { update emp set sal = 1.2 * :pay
String who = emps.who();
float pay = emps.pay();
while (emps.next())
// Give each employee a 20% raise
};
from emp order by ename
#sql emps = { select sal as "pay", ename as "who"
EmpIter2 emps;
// Query employee names and salaries
}
System.out.println("Error connecting to database.");
catch (Exception e) {
}
// user
"scott",
"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // url
DefaultContext.setDefaultContext( new DefaultContext (
Class.forName("oracle.jdbc.driver.OracleDriver");
try { // Connect to the database
throws SQLException
public static void main (String args[])
public class Example2
#sql iterator EmpIter2 (float pay, String who);
import sqlj.runtime.ref.*; // SQLJ runtime classes
import sqlj.runtime.*;
import java.sql.*;
JAVA DAYS ´98
Beispiel 2
// SQLJ runtime classes
}
{
}
{
// password
"tiger" ));
© 1998 Sun Microsystems GmbH
System.out.println(ename + " earns " + sal);
if (emps.endFetch()) break;
emps.close();
}
double sal = 0.0;
#sql {FETCH :emps INTO :ename, :sal};
while (true) {
String ename = null;
#sql emps = { select ename, sal from emp order by ename };
EmpIter3 emps;
// Query the employee names
}
System.out.println("Error connecting to database.");
catch (Exception e) {
}
// user
"scott",
"jdbc:oracle:thin:@oudelsrv-1:5521:orcl", // url
DefaultContext.setDefaultContext( new DefaultContext (
Class.forName("oracle.jdbc.driver.OracleDriver");
try { // Connect to the database
throws SQLException
public static void main (String args[])
public class Example3
#sql iterator EmpIter3 (String, double);
import sqlj.runtime.ref.*; // SQLJ runtime classes
import sqlj.runtime.*;
import java.sql.*;
JAVA DAYS ´98
Beispiel 3
JAVA DAYS ´98
Weitere Informationen über SQLJ
- Freier Download von:
http://www.oracle.com/produkte/free_soft
ware/#sqlj
- Kommentare an :
[email protected]
© 1998 Sun Microsystems GmbH
Herunterladen