ORACLE Reports 10g im J2EE-Umfeld: Reports und XML DB

Werbung
ORACLE Reports 10g
im J2EE-Umfeld:
Reports und XML DB
Dipl.-Inform. Jens Rettig
[email protected]
http://www.eseis.de
2006-03-30, Jens Rettig
1
Agenda
•
•
•
•
•
•
Vorstellung
Reports und XML
Reports in der J2EE-Welt
XML DB – Speicherung
Reports-Zugriff mit SQL und XPath
Kopplung von XML-Daten in XML-DB
mit „Event Driven Publishing“ in Reports
• Probleme
• Fazit
2006-03-30, Jens Rettig
2
ESEIS GmbH
• Evolutionäre Softwareentwicklung
individueller Systeme GmbH
• Gründung in 04/2002
• Im vierten Geschäftsjahr erfolgreich „am Markt“
• Ziele
– Investitionssicherung bei Partnern durch Weiterentwicklung
bestehender Systeme
– Umfassende IT-Beratung
– Unterstützung bei allen Tätigkeiten im SE-Bereich
• Kompetenzen
– Oracle-Know-How von 4.5-10g
– Alle Phasen der Softwareentwicklung auf vielen Plattformen
2006-03-30, Jens Rettig
3
Portfolio und Kunden
•
•
Kompetente Beratung bei der Planung und Umsetzung von IT-Strategien
für betriebliche Informationssysteme, insbesondere
- der Einführung neuer Technologien und
- der Migration von Systemen
- der Weiterentwicklung von bestehenden Systemen
Systementwicklung von unternehmensweiten Anwendungen mit
modernem Software Engineering und Qualitätsmanagement
Die ESEIS GmbH bietet von der Projektleitung bis zur Einführung Aufgaben
aus der gesamten Palette des Software Engineering !
Interessiert ?
Hier könnte Ihr Logo stehen
Für weitere Informationen :
http://www.eseis.de
2006-03-30, Jens Rettig
4
XML-Grundbegriffe: Schemata
•
•
DTD
– Document Type Definition
– Definition von Typen/“Sorten“ von XML-Dateien
XML-Schema
– W3C XML Schema
– <xs:schema
xmlns:xs=“http://www.w3.org/2001/XMLSchema“/>
– Nutzung von XML zur Beschreibung von XML
•
•
•
•
•
•
xs:element
xs:string
xs:simpleType
xs:complexType
…
Für weitere Informationen s. Literatur
2006-03-30, Jens Rettig
5
Reports und XML
• Reports verarbeitet XML-Dateien als
Input „out of the box“
– …aber das „kleingedruckte“…
The XML PDS implementation
supports only two-dimensional listing of records.
Nur für zwei-dimensionale
Daten !!!
Oracle Reports expects the XML data file to be in simple table format with rows
and columns. Oracle Reports iterates through the XML sequence at one level
below the topmost element in the XML. If there are sequences at lower levels
(nested elements), they are not handled. Thus, to generate a tabular report, you
must "flatten" your XML file into simple row-column format, as shown in the
following examples.
(aus : „Oracle® Reports - Building Reports - 10g Release 2 (10.1.2) - B13895-01 July 2005“,
S. 720 von 796)
– nur nutzbar, wenn dies ausreicht…
– oder XML-Transformation erforderlich
2006-03-30, Jens Rettig
6
Reports und XML: Beispiel
– Reports liest
• XML-Datei
• und zugehörige XML-Schema/DTD-Datei
– Daten werden als Abfrage in separater
Gruppe im Reports Datenschema
dargestellt
– Zwei-Dimensionale Daten durch
„Platt-klopfen“
2006-03-30, Jens Rettig
7
XML in Reports: Distribution.xml
– Steuerung von Reports mit Hilfe von in
XML-Dateien gespeicherten Informationen
– XML-Schema-Auszug
– Burst-Distribution
• Teilergebnisse separat verteilen
(mit foreach)
• Report-Variablen zur Verteilung nutzen
• (z. B. als Mail-Empfänger, Dateiname)
– Detaillierte Erklärung im JDeveloper
– Steuerung mit Daten speichern !?
2006-03-30, Jens Rettig
8
Reports in der J2EE-Welt
– Aufruf von Reports
• direkt aus der Browser-Session des Clients
• Rückgabe des Ergebnisses an den Browser
– Verschiedene Ausgabeformate
• XML
• PDF
• (Excel-)Spreadsheet
– Verschiedene Ausgabeziele
• Per FTP, Mail, Ausgabe an Drucker
– Auch gleichzeitig per Burst Distribution
2006-03-30, Jens Rettig
9
Reports in der J2EE-Welt: Beispiel
– Aufruf von Reports
• direkt aus der Browser-Session des Clients z.B.:
– http://www.eseis.de/rwservlet:7780/reports/rwservlet
?report=Mitarbeiterprofil.rdf&destype=screen
&desformat=pdf&desname=my_mitarbeiterprofil.pdf
– Verschiedene Ausgabeformate
• XML (desformat=xml)
• PDF (s.o.)
• Excel-Ausgabe (desformat=spreadsheet)
– Verschiedene Ausgabeziele
• Per FTP, Mail, Ausgabe an Drucker
– mit destype, desformat, desname
– mit distribute=yes, destination=<datei
auf rep_server>
• Auch gleichzeitig per “Burst Distribution”
– „One Source“
• nur unterschiedliche Aufruf-Parameter
2006-03-30, Jens Rettig
10
Probleme in der J2EE-Welt
– Reimplementierung von
Geschäftslogik ?!? („Doppelter“ SQLZugriff in App-Server auf komplexe
DB-Objekte)
Web-Client
– Pluggable
Application-Server
Data
J2EE-Application
Report-Server
Sources ?
z.B. via BC4J
SQLNet
Datenbank-Server
2006-03-30, Jens Rettig
11
ORACLE XML DB
– ORACLE Datenbank-Komponente zur effizienten
Speicherung und Abfrage von XML-Daten aus
ORACLE DB
• Ermöglicht XPath-Ausdrücke in SQL
• Registrierung von XML-Schemata vs. DatenbankTabellen (und damit „Prüfungsmöglichkeit“)
– Incl. Namespace-Unterstützung
• Speicherung von XML-Daten
– (Teil-)Relational durch Eintragung von (xdb-)
Speicherungsanweisungen in XML-Schema
– oder (default) Speicherung als CLOB
• „Insert“ von XML-Daten („Dateien“) auch per
– FTP oder
– HTTP
– Ab Version Oracle 9i verfügbar (mindestens …)
2006-03-30, Jens Rettig
12
XML DB: Speicherung und Abfrage
Insert als Clob
Insert als Clob
Select mit SQL und XPath
Reports
Select mit SQL
Reports
XML
Select mit SQL
mit „reinem“ SQL
DB Abfrage
durch Definition von
Reports
XML DB
XML DB
(Teil-)relationale
Speicherung durch
Implementierung
von XML-Schema
Insert als Clob
relationalen Views mit
XPath-Anweisungen
2006-03-30, Jens Rettig
13
Beispiel: Mitarbeiterprofil
2006-03-30, Jens Rettig
14
Zugriff mit SQL und XPath I
select
extractValue( OBJECT_VALUE –- oder auch value(a)
, '/wws:Mitarbeiter/Name'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Mitarbeitername
, extractValue( OBJECT_VALUE
, '/wws:Mitarbeiter/Geburtsjahr'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Geburtsjahr
, extractValue( OBJECT_VALUE
, '/wws:Mitarbeiter/Ausbildung'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Ausbildung
, extractValue( OBJECT_VALUE
, '/wws:Mitarbeiter/Nationalitaet'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Nationalitaet
, extractValue( OBJECT_VALUE
, '/wws:Mitarbeiter/EDVseit'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) EDVseit
, extractValue( OBJECT_VALUE
, '/wws:Mitarbeiter/verfügbarAb'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) verfügbarAb
from rettig."Mitarbeiter_TAB" a;
2006-03-30, Jens Rettig
15
Zugriff mit SQL und XPath II
select
extractValue( value(a)
, '/wws:Mitarbeiter/Name'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Mitarbeitername
, extractValue(value(bs)
, '/Programmiersprache‚
)
Programmiersprache
from
rettig."Mitarbeiter_TAB" a
, table(
XMLSequence(
extract(value(a)
, '/wws:Mitarbeiter/Programmiersprache'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
)
)
) bs;
2006-03-30, Jens Rettig
16
Zugriff mit SQL und XPath III
Wichtigerselect
„Kniff“:
value(a)
Extrahieren extractValue(
und verknüpfen von
XML-Fragmenten, um
, '/wws:Mitarbeiter/Name‚
relational zusammengehörige Objekte (Master-Detail-Detail)
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
auch zusammengehörig
zu selektieren
) Mitarbeitername
, extractValue(value(p)
, '/Projekt/Name'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
) Projektname
, extractValue(value(bs)
, '/Programmiersprache'
)
Programmiersprache
from
rettig."Mitarbeiter_TAB" a
, table( XMLSequence(
extract(value(a)
, '/wws:Mitarbeiter/Projekt'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
)
)
) p
, table( XMLSequence(
extract(value(p)
, '/Projekt/Programmiersprache'
, 'xmlns:wws="http://www.eseis.de/reports/MitarbeiterProfil.xsd"'
)
)
) bs;
2006-03-30, Jens Rettig
17
„Event-Driven Publishing“
v_PList := SRW_PARAMLIST(SRW_PARAMETER('',''));
Srw.add_parameter(v_PList,'GATEWAY‚
insert into Daten
,'http://www.eseis.de:7780/reports/rwservlet');
(xmldata)
Srw.add_parameter(v_PList,'SERVER','rep_druck_queue');
select
Srw.add_parameter(v_PList,'REPORT',p_report_name);
, extract( OBJECT_VALUE
Srw.add_parameter(v_PList,'USERID','scott/tiger@eseis_02');
, '/Eingang/Daten‚
Srw.add_parameter(v_PList,'DESTYPE','file');
).getclobval() DATEN
Srw.add_parameter(v_PList,'DESNAME‚
from Eingang
,'/home/oracle/jret_test/drucken/testoutput.pdf');
v_ident := Srw.run_report(v_PList);
Insert,
FTP, WebDav
Eingang
Trigger
Daten
Select
Reports
XML DB
Journal
2006-03-30, Jens Rettig
18
Probleme
• Distribution-XML muss als Datei auf
dem Report-Server vorliegen
– Für „Event-Driven Publishing“ (vom DBServer aus) eher lästig, da Schichtübergreifender Datei-Zugriff realisiert
werden muss.
• Distribution (derzeit !?!) nicht mit allen
Ausgabeformaten möglich
– Spreadsheet (Excel)
– XML
2006-03-30, Jens Rettig
19
Fazit
• Praxisrelevantes Beispiel ?
– Prototyp beim Kunden realisiert
– Erweiterung um
• weitere Reports
• und größere Datenmengen steht an
• Vielleicht zur DOAG-Jahrestagung '06:
– Darstellung der (weiteren) Erfahrungen
– Performance Aussagen
• Erste kleine Tests mit guter Performance
• Große Dateien ?
– Weitere Konzepte:
• Monitoring-Komponente
• mit Wiederanlauf-Mechanismen
2006-03-30, Jens Rettig
20
Fazit II
– Reports Pluggable Data Sources
• Faszinierende Variante, „beliebige“
Datenquellen mit Reports zu koppeln
• Java-API
• Aber aufgrund der Mächtigkeit auch komplex
• Eher ein „eigenes Projekt“ als schnelle Lösung
– Pluggable Report Destinations
• Auch für Ausgabeziele können Java-Klassen
gebaut werden…
2006-03-30, Jens Rettig
21
Literatur
– Ray, E.T.: Einführung in XML, O‘Reilly
– Harold, E.R., Means, W.S.: XML in a
Nutshell, O‘Reilly
– v.d.Vlist, E.: XML-Schema, O‘Reilly
– Schardina, M., Chang, B., Wang, J.:
XML&SQL:Design, Build&Manage XML
Applications in Java, C,C++ & PL/SQL,
Oracle Press
– Online Dokumentation von Oracle XML-DB
und Oracle Reports (!!!)
– http://www.otn.oracle.com
2006-03-30, Jens Rettig
22
ORACLE Reports 10g
im J2EE-Umfeld:
Reports und XML DB
Dipl.-Inform. Jens Rettig
[email protected]
http://www.eseis.de
2006-03-30, Jens Rettig
23
Herunterladen