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