© 06/2005 Einsatz des ODS 5 API im Projekt Dämpferprüfstand bei der Audi AG Erfahrungsbericht 1.Aufgabenstellung 2.Performantes Lesen von Daten mit DB.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

Vorlesung Datenbank-programmierung
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Folien 2-5, 7-8 © Prof. Dr. Manfred Rössle (FH Aalen)
JPQL Java Persistence Query Language
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
Zusammenfassung der Vorwoche
MySQL.
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Verteilte Software - Java - Prozedurale Programmierung 1
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
SendEplanung Datenbank
Listen Richard Göbel.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
ATHOS Benutzertreffen 12. November Auswerteserver Glashütten, 12. November 2008 HighQSoft GmbH, Andreas Hofmann
ATHOS Benutzertreffen 12.Oktober Report of the Lab Glashütten, 12.Oktober 2006 HighQSoft GmbH, Karst Schaap
Zugriffschutz in ASAM ODS
ATHOS Benutzertreffen 16.Juni Report of the Lab. Glashütten, 16.Juni 2005 HighQSoft GmbH, Karst Schaap
ATHOS Benutzertreffen 27.September Report of the Lab Glashütten, 27.September 2007 HighQSoft GmbH, Karst Schaap
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
Datensicherheit in DBMS
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Datenbank-Zugriffsschnittstellen am Beispiel von Oracle und PL/SQL.
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Text-Retrieval mit Oracle Vortrag von Andreas Mück & David Diestel.
Objektorientierte Programmierung JDK-Klassenbibliothek
Übung Datenbanksysteme WS 2003/ Übung Datenbanksysteme Hierarchische DBMS
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Transaction Script Software Component Technology for Distributed Applications.
Datenintegrität Referentielle Integrität create table
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
Einführung in die Programmierung Datensammlung
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
JDBC: JAVA Database Connectivity
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 6 Sitzung 6: Model-View-Controller als Grundlage.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Wir bauen uns eine Webapplikation!
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
WS 2011/12 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #9 Physische Datenorganisation.
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #9 SQL (Teil 4)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
JDBC (Java DataBase Connectivity)
Datenbanksysteme für hörer anderer Fachrichtungen
Datenbankanbindung mit
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Trigger-abhängige Client Interaktionen (bezüglich Oracle8i)
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
© 2003, Rudolf Jansen Einsatz der XML-Features der Oracle 9i DB zur Systemintegration Rudolf Jansen Freiberuflicher Entwickler und Autor
By Thorsten Zisler 1 SQL Datenbank Anbindung an den Supervisor.
Vorlesung #8 SQL (Teil 5).
 Präsentation transkript:

© 06/2005 Einsatz des ODS 5 API im Projekt Dämpferprüfstand bei der Audi AG Erfahrungsbericht 1.Aufgabenstellung 2.Performantes Lesen von Daten mit DB Views 3.IstecODS: Effiziente Entwicklung mit Hilfsklassen 4.Datenkonsistenz mit Hilfe von DB Triggern 5.Ausblick

© 06/2005 Aufgabenstellung Es ist ein Software-System zu entwickeln, welches die effiziente Abwicklung, Datenhaltung und Auswertung von verschiedenartigen Dämpferprüfungen ermöglicht. Einsatz von: ZEUS (Audi Komponenten Container) ASAM ODS mit ODS 5 API Oracle 9i DIAdem (X-Frame)

© 06/2005 Aufgaben: Verwalten und Suchen von: Aufträgen und Versuchen Fahrzeugen für Dauerlaufprüfungen Prüflingstypen und Prüflingen Kennlinien Generieren der Messprogramme für den Prüfstand Ergebnisablage in ODS Auswertung mit DIAdem Aufgabenstellung

© 06/2005 ODS-Modell

© 06/2005 Komplexe Recherche und Ablage

© 06/2005 Performantes Lesen von Daten mit DB Views Aufgabe: Suchen von Aufträgen Problem: Information ist über 15 Applikationselemente verteilt. Die Suche ist sehr zeitaufwendig. Das Auflösen von Relationen und das Auslesen von Attributen bedeuten viele CORBA Roundtrips. Lösung: Verwendung von Datenbank-Views, via SQL-Joins. Im Applikationsmodell werden Views z.B. als AoAny Tabellen bekannt gemacht.

© 06/2005 Performantes Lesen von Daten mit DB Views Vorteile: Konform zu ODS, da nur zusätzliche Tabellen definiert werden müssen Ermöglicht Angabe von Suchkriterien über alle Attribute Instanzieren von vielen Java Objekten mit nur einer Abfrage Nachteile: Pflege des Datenmodells ist aufwendiger Nutzung durch generische Applikationen ist nur bedingt möglich

© 06/2005 IstecODS: Effiziente Entwicklung mit Hilfsklassen ODS Abfrage ohne Hilfsklasse: QueryStructure query = new QueryStructure(); ApplicationElement ae = getViewApplicationElement(); ApplicationAttribute[] appAttrArr = ae.getAttributes("*"); ApplicationElement[] aeRelated = ae.getAllRelatedElements(); AIDNameUnitId[] aidNUID = new AIDNameUnitId[appAttrArr.length + aeRelated.length]; int index = 0; for (int i = 0; i < appAttrArr.length; ++i) { ApplicationAttribute appAttr = appAttrArr[i]; String attrName = appAttr.getName(); aidNUID[index] = new AIDNameUnitId(); aidNUID[index].attr = new AIDName(); aidNUID[index].attr.aid = ae.getId(); aidNUID[index].attr.aaName = attrName; aidNUID[index].unitId = new T_LONGLONG(); ++index; } ApplicationStructure as = ae.getApplicationStructure(); for (int i = 0; i < aeRelated.length; ++i) { ApplicationRelation rel[] = as.getRelations(ae, aeRelated[i]); // Expect there is only one relation String relAttrName = null; if ((rel != null) && (rel.length > 0)) { RelationRange relRange = rel[0].getRelationRange(); // Only n:1 relations. if (relRange.max == 1) relAttrName = rel[0].getRelationName(); } aidNUID[index] = new AIDNameUnitId(); aidNUID[index].attr = new AIDName(); aidNUID[index].attr.aid = ae.getId(); aidNUID[index].attr.aaName = relAttrName; aidNUID[index].unitId = new T_LONGLONG(); ++index; } (Fortsetzung) query.anuSeq = aidNUID; TS_Union value = new TS_Union(); value.longVal(pAuftragId); SelValue selVal = new SelValue(); selVal.attr = new AIDNameValueUnitId (); selVal.attr.unitId = new T_LONGLONG(); selVal.attr.values = new TS_Value(); selVal.attr.values.u = new TS_Union(); selVal.attr.values.u.stringVal(""); selVal.attr.attr = new AIDName(); selVal.attr.attr.aid = ae.getId(); selVal.attr.attr.aaName = AUFTRAG_ID; selVal.value = new TS_Value(); selVal.value.u = value; selVal.oper = SelOpcode.EQ; query.condSeq = new SelValue[1]; query.condSeq[0] = selVal; query.operSeq = new SelOperator[0]; query.orderBy = new SelOrder[1]; query.orderBy[0] = new SelOrder(new AIDName(ae.getId(), AUFTRAG_ID), true); query.relInst = new org.asam.ods.ElemId(); query.relInst.aid = new T_LONGLONG(); query.relInst.iid = new T_LONGLONG(); query.relName = ""; ElemResultSet[] rs = as.getSession().getApplElemAccess().getInstances(query, 0);

© 06/2005 IstecODS: Effiziente Entwicklung mit Hilfsklassen ODS Abfrage mit Hilfsklasse: QueryStructureGenerator qsg = new QueryStructureGeneratorImpl(); qsg.setAttributesToFetch(getViewApplicationElement()); // SQL: select * … TS_Union value = new TS_Union(); value.longVal(auftragId); qsg.addCondition(getViewAID(), AUFTRAG_ID, value, SelOpcode.EQ); // SQL: where.. qsg.addOrderBy(getViewAID(), AUFTRAG_ID, true); ODSResultSet rs = qsg.executeQuery(getApplElemAccess()); Vorteile: Korrekte und vollständige Befüllung von org.asam.ods.QueryStructure Instanzen Verständlicher und überschaubarer Quellcode Transparente Cache Nutzung

© 06/2005 IstecODS: Effiziente Entwicklung mit Hilfsklassen ODS Ergebnisauswertung ohne Hilfsklasse: ElemResultSet[] rs = as.getSession().getApplElemAccess().getInstances(query, 0); System.out.println("ResultSet size = " + rs.length); for (int i = 0; i < rs.length; ++i) { for (int k = 0; k < rs[i].attrValues.length; ++k) { NameValueSeqUnitId nvsuid = rs[i].attrValues[k].attrValues; System.out.println("ValueName (" + i + ":" + k + "): " + nvsuid.valName); switch (nvsuid.value.u.discriminator().value()) { case DataType._DT_STRING: String[] valuesString = nvsuid.value.u.stringVal(); for (int m = 0; m < valuesString.length; ++m) System.out.println("Value (" + m + "): " + valuesString[m]); break; case DataType._DT_LONG: int[] valuesInt = nvsuid.value.u.longVal(); for (int m = 0; m < valuesInt.length; ++m) System.out.println("Value (" + m + "): " + valuesInt[m]); break; case DataType._DT_BOOLEAN: int[] valuesBoolean = nvsuid.value.u.longVal(); for (int m = 0; m < valuesBoolean.length; ++m) System.out.println("Value (" + m + "): " + valuesBoolean[m]); break; /* *... */ default: break; }

© 06/2005 IstecODS: Effiziente Entwicklung mit Hilfsklassen ODS Ergebnisauswertung mit Hilfsklasse: ODSResultSet rs = qsg.executeQuery(getApplElemAccess()); while (rs.next()) { Integer auftragid = rs.getInteger("AUFTRAG_ID"); String kommentar = rs.getString("AUFTRAG_KOMMENTAR"); Boolean dauerlauf = rs.getBoolean("AUFTRAGDAUERLAUFKZ"); /* *... */ } Vorteile: Zeilenorientierte Verarbeitung der spaltenorientierten Query- Ergebnismenge org.asam.ods.ElemResultSet[] Automatische Typkonvertierung Verständlicher und überschaubarer Quellcode

© 06/2005 Datenkonsistenz mit Hilfe von DB Triggern Aufgabe: Datenkonsistenz gewährleisten bei konkurrierenden Datenzugriffen von mehreren ODS-Clients auf einem ODS-Server. Lösung: Via Datenbank-Trigger wird ein Attribut Version zur Datensatzversionierung erhöht. Dieses Attribut ist in der SVCATTR als AUTOGENERATE markiert. Zwischenzeitliche Änderungen am Datensatz durch einen anderen ODS-Client sind durch Prüfen der Versionsnummer auf Gleichheit feststellbar.

© 06/2005 Datenkonsistenz mit Hilfe von DB Triggern Beispiel für einen Trigger: CREATE OR REPLACE TRIGGER tau_tblauftrag before update or insert on tblauftrag for each row begin if inserting then :NEW.sysanleger := RTRIM(USER); :NEW.version := '1'; :NEW.odsname := 'AUFTRAG-' || TO_CHAR(:NEW.auftragid); else :NEW.version := TO_CHAR(TO_NUMBER(:OLD.version) + 1); end if; :NEW.aendererdz := SYSDATE; :NEW.sysaenderer := RTRIM(USER); end;

© 06/2005 Ausblick Umsetzung der in ODS 5 spezifizierten Extended Query Structure ( org.asam.ods.QueryStructureExt) sollte den Einsatz von Datenbank- Views weitgehend unnötig machen. Derzeit ist das Lesen von Blobs nur über Instanzelemente möglich. Einstellen von DT_Blobs in das org.asam.ods.ElemResultSet[] wenn angefordert erspart Roundtrips.

© 06/2005 Danke für die Aufmerksamkeit.