59
Tommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von heterogenen Daten Bachelorarbeit Fachbereich Informatik und Medien Onlinestudiengang Medieninformatik FH-Brandenburg Erstbetreuer: Prof. Dr.-Ing. Thomas Preuss Zweitbetreuer: Dipl.-Inf. (FH) Stefan Pratsch Ilmenau, den 02.08.2010

Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

Tommy Schmidt

Matrikelnummer: 20072935

Scheffelstr. 10

98693 Ilmenau

Erstellung eines Symfony-Plugins zur

Integration von heterogenen Daten

Bachelorarbeit

Fachbereich Informatik und Medien

Onlinestudiengang Medieninformatik

FH-Brandenburg

Erstbetreuer: Prof. Dr.-Ing. Thomas Preuss

Zweitbetreuer: Dipl.-Inf. (FH) Stefan Pratsch

Ilmenau, den 02.08.2010

Page 2: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

Kurzreferat

Die Verteilung und Vernetzung von Daten und Dienstleistungen stellen Entwickler vor die

Herausforderung organisationsübergreifende Anwendungen zu erstellen, die über eine ein-

heitliche Semantik verfügen. Die vorliegende Arbeit stellt Möglichkeiten zur Integration

autonomer heterogener Daten vor und setzt diese anhand einer Beispielanwendung um.

Dabei werden passende Technologien gewählt und miteinander kombiniert. Der Fokus

liegt auf einer Umsetzung für die Skriptsprache PHP unter Verwendung des Symfony

Frameworks als Plattform.

Abstract

The distribution and cross-linking of data and services is challenging developers to create

overlapping applications with a standardized semantic. The following thesis presents opti-

ons for integrating autonomous and heterogeneous data and implements them in a sample

application. Therefore appropriate technologies are chosen and combined. The focus is on

the conversion for the scripting language PHP using the Symfony framework.

Page 3: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

Eidesstattliche Erklärung

Ich versichere, dass ich die vorliegende Arbeit selbständig verfasst und ohne Benutzung

anderer als der angegebenen Hilfsmittel angefertigt, nur die angegebenen Quellen benutzt

und die in den benutzten Quellen wörtlich oder inhaltlich entnommenen Stellen als solche

kenntlich gemacht habe. Die Arbeit hat in gleicher oder ähnlicher Form noch keiner ande-

ren Prüfungsbehörde vorgelegen.

Ilmenau, den 02.08.2010 _______________________

Tommy Schmidt

Page 4: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

I

Inhaltsverzeichnis

1 Einleitung .............................................................................................................. 1

1.1 Motivation ............................................................................................................. 1

1.2 Aufbau der Arbeit ................................................................................................. 1

2 Technologien ......................................................................................................... 3

2.1 Datenintegration .................................................................................................... 3

2.2 Heterogene Daten .................................................................................................. 3

2.3 Schemaintegration ................................................................................................. 4

2.4 Dublettenerkennung .............................................................................................. 5

2.5 Extract, Transform, Load ...................................................................................... 6

2.6 Mediatorbasiertes Informationssystem ................................................................. 6

2.7 Peer Data Management System ............................................................................ 7

2.8 Logische Integration ............................................................................................. 9

2.9 Serviceorientierte Architektur ............................................................................... 9

2.10 Service Data Objects ........................................................................................... 10

3 Erstellung der Datenintegrationsanwendung ...................................................... 12

3.1 Symfony-Framework .......................................................................................... 12

3.2 Anwendungsszenario .......................................................................................... 12

3.3 Entwicklungsbasis ............................................................................................... 13

3.4 Architekturdesign ................................................................................................ 13

3.4.1 Beteiligte Komponenten ...................................................................................... 14

3.4.2 Anwendungsverhalten ......................................................................................... 15

3.4.3 Klassenmodellierung und Interaktion ................................................................. 16

3.4.4 Verzeichnisstruktur ............................................................................................. 19

3.4.5 Konfiguration ...................................................................................................... 20

3.4.6 Logging ............................................................................................................... 21

3.4.7 Datengraph und Wrapper .................................................................................... 22

3.4.8 Benutzerschnittstelle ........................................................................................... 24

3.4.9 Externe Schnittstellen .......................................................................................... 25

3.5 Systemumgebung ................................................................................................ 25

3.6 Umsetzung .......................................................................................................... 26

3.6.1 Entwicklung der Datenintegrationsbibliothek ..................................................... 26

Page 5: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

II

3.6.2 Symfony-Grundinstallation ................................................................................. 26

3.6.3 Erstellung des Symfony-Plugins ......................................................................... 27

3.6.4 Symfony-Plugin installieren und anwenden ....................................................... 29

3.7 Erweiterung der Software ................................................................................... 30

4 Zusammenfassung ............................................................................................... 32

4.1 Ausblick .............................................................................................................. 32

Literaturverzeichnis ........................................................................................................ 34

Abbildungsverzeichnis .................................................................................................... III

Quelltextverzeichnis ....................................................................................................... IV

Glossar ............................................................................................................................. V

Anhang A: Quelltexte ................................................................................................... A.1

Page 6: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

1

1 Einleitung

Aufgrund der zunehmenden Vernetzung und der damit verbundenen steigenden Anzahl

von Dienstleistungen und Datenquellen entstehen immer mehr verteilte Systeme mit unter-

schiedlichem Aufbau. Schlagworte, die in diesem Zusammenhang häufig fallen, sind Data

Warehousing, Cloud Computing, Software as a Service und Mashups. Die Auslagerung

von Systemen oder das Nutzen und Kombinieren von Dienstleistungen Dritter ist oftmals

effizienter und kostengünstiger als Eigenentwicklungen zu realisieren. Das Problem dabei

ist, dass die anwendungsübergreifende Anfrage von Diensten mit autonomen und hetero-

genen Daten meist eine Integrationsarchitektur voraussetzt, die ein konvergentes Daten-

modell bereitstellt. Es gilt Redundanzen zu vermeiden und eine einheitliche Semantik für

die beteiligten Anwendungen zu entwickeln. Die Schwierigkeit liegt in der Wartung des

Systems, dass sich auf Änderungen von Serviceschnittstellen schnell anpassen muss.

1.1 Motivation

Im Enterprise-Sektor existieren für bekannte Plattformen wie JavaEE oder .NET bereits

professionelle und etablierte Architekturen mit darauf aufbauenden Programmbibliotheken,

wie beispielsweise die Enterprise Application Integration (EAI) als Vorgänger von SOA

(Serviceorientierte Architektur). Im Bereich der Skriptsprachen (beispielsweise PHP) gibt

es erst wenige Ansätze. Diese Arbeit soll sich der Datenintegration in diesem Bereich an-

nehmen und geeignete Technologien und Vorgehensweisen recherchieren sowie mit Hilfe

einer Beispielanwendung die Machbarkeit demonstrieren. Das Ziel ist dabei der Entwurf

und die Entwicklung eines Plugins für das PHP-Framework Symfony, mit dessen Hilfe es

Anwendungsentwicklern möglich sein soll, bestehende Inhalte zu kombinieren und als

Mashups in Form neuer Medieninhalte bereitzustellen.

1.2 Aufbau der Arbeit

Um eine geeignete Softwarearchitektur für die Datenintegration zu schaffen, werden im

zweiten Kapitel zunächst geeignete Technologien recherchiert. Kapitel drei beschreibt ein

Anwendungsszenario, die Entwicklungsbasis und den Aufbau eines Architekturdesigns

unter Berücksichtigung der vorgestellten Technologien. Es erfolgt die Umsetzung in Form

einer PHP-Programmbibliothek und deren Implementierung in einem Symfony-Plugin.

Page 7: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

2

Abschließend werden die Erkenntnisse im vierten Kapitel zusammengefasst und ein Aus-

blick auf mögliche Programmerweiterungen gegeben.

Page 8: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

3

2 Technologien

Als Grundlage für die Realisierung der Datenintegrationsanwendung werden im Folgenden

recherchierte Technologien und Definitionen von Vorgehensweisen näher betrachtet.

2.1 Datenintegration

Durch die unabhängige Entwicklung von Diensten im Internet und auch in Unternehmen

oder Organisationen entstehen dezentralisierte, voneinander getrennte Datensammlungen.

Daten entstehen unabhängig voneinander in unterschiedlichen Formaten und werden mit

Hilfe verschiedener Technologien gespeichert. Das Ergebnis sind heterogene Datenbestän-

de (vgl. [Conra97, S. 14f]). Ziel der Datenintegration ist das Zusammenführen von Daten

teilweise unterschiedlicher Quellen auf ein einheitliches Datenmodell (vgl. [LesNa07, S.

4]). Bleiholder und Schmid (vgl. [BleSc08, S. 124f]) unterteilen den Integrationsprozess in

drei Stufen:

1. Schema Matching: Angleichung und Vorverarbeitung der unterschiedlichen Daten-

quellen mit dem Ziel der Zuordnung semantisch äquivalenter Attribute der Quellen

zu einem einheitlichen Objekt

2. Dublettenerkennung: Erkennung von identischen Objekten

3. Datenfusion: Zusammenfassung aller einheitlichen Objekte und Auflösung von Da-

tenkonflikten

2.2 Heterogene Daten

Diese Arbeit behandelt die Integration von Daten struktureller Heterogenität, welche bei-

spielsweise auf die unterschiedliche Unterstützung von Generalisierung, Klassifikation,

Assoziation und Aggregation zurückzuführen ist (vgl. [Hergu03, S. 23]). In den beteiligten

Datenquellen können unterschiedliche Datenmodelle verwendet werden (zum Beispiel

relationale oder objektorientierte), welche zu verschiedenen Strukturen der Abbildung von

Daten und somit unterschiedlichen Schemata führen. Auch bei identischen Datenmodellen

kann dieselbe Information in veränderter Weise in einem Schema ausgedrückt werden (vgl.

[Conra97, S. 45f]). Die Möglichkeit semantischer Heterogenität spielt in diesem Zusam-

menhang keine Rolle und wird nicht behandelt.

Page 9: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

2.3 Schemaintegration

Bei der Integration von Daten aus heterogenen Systemen muss die angesprochene strukt

relle Heterogenität überwunden werden.

rung unterschiedlicher Quellschemata auf ein einheitliches

Schema). Aufgrund der teilweise

müssen deren mögliche Unterschiede

23]) nennt hier folgende Beispiele

• Semi- oder unstrukturierte Quelldaten

• Mengenspezifische Unterschiede (zum Beispiel Teilmenge, Schnittmenge, leere

Menge)

• Verschiedene Bezeichner (semantische Schwierigkeiten mit Synonymen und H

monymen)

Vor der Übertragung der Daten muss gegebenenfalls

mata stattfinden, da die verwendeten Datenmodelle in der Regel unterschiedlich formuliert

sind (vgl. [Conra97, S. 72])

men unterschiedliche Integrationsstrategien zum Einsatz.

schen sukzessiver und in einem Schritt erfolgender Integration

Integrationsstrategie“) unterschieden.

handenen Schemata gleichzeitig integriert werden

Abbildung 1: One-Shot-

Schemaintegration

Bei der Integration von Daten aus heterogenen Systemen muss die angesprochene strukt

relle Heterogenität überwunden werden. Das Ziel der Schemaintegration ist die Überfü

Quellschemata auf ein einheitliches neues Zielschema

Aufgrund der teilweise verschiedenen Anwendungsgebiete der

müssen deren mögliche Unterschiede berücksichtigt werden. Hergula (vgl. [

) nennt hier folgende Beispiele:

oder unstrukturierte Quelldaten

Mengenspezifische Unterschiede (zum Beispiel Teilmenge, Schnittmenge, leere

Verschiedene Bezeichner (semantische Schwierigkeiten mit Synonymen und H

der Daten muss gegebenenfalls eine Transformation der Quellsch

, da die verwendeten Datenmodelle in der Regel unterschiedlich formuliert

(vgl. [Conra97, S. 72]). Sollen mehr als zwei Quellschemata integri

men unterschiedliche Integrationsstrategien zum Einsatz. Hier wird hauptsächlich zw

schen sukzessiver und in einem Schritt erfolgender Integration („One

Integrationsstrategie“) unterschieden. Abbildung 1 zeigt letztere Variante

handenen Schemata gleichzeitig integriert werden.

-Integrationsstrategie (Quelle: nach [Conra97, S. 74

4

Bei der Integration von Daten aus heterogenen Systemen muss die angesprochene struktu-

integration ist die Überfüh-

Zielschema (föderiertes

Anwendungsgebiete der Datenquellen,

Hergula (vgl. [Hergu03, S.

Mengenspezifische Unterschiede (zum Beispiel Teilmenge, Schnittmenge, leere

Verschiedene Bezeichner (semantische Schwierigkeiten mit Synonymen und Ho-

eine Transformation der Quellsche-

, da die verwendeten Datenmodelle in der Regel unterschiedlich formuliert

Quellschemata integriert werden, kom-

Hier wird hauptsächlich zwi-

(„One-Shot-

etztere Variante, bei der alle vor-

Conra97, S. 74])

Page 10: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

5

Zur Beschreibung der Integration heterogener Daten wird als Formalismus ein Regel-

orientierter Ansatz gewählt. Hierbei werden Elemente, wie beispielsweise Attribute der

Quelldaten, einem Zielschema zugeordnet. Dabei muss gegebenenfalls auch eine Trans-

formation stattfinden, um den Kontext zu erhalten (vgl. [Wache02, S. 77f]).

2.4 Dublettenerkennung

Datensätze, die dasselbe Realweltobjekt beschreiben, werden Dubletten genannt. Sie ent-

stehen nicht nur bei der Datenintegration, sondern auch durch Neuanlage oder Änderung

von Datensätzen. Wird beispielsweise ein Datensatz geändert oder gelöscht zu dem Dub-

letten existieren, kommt es aufgrund der nun gleichzeitig auftretenden alten und neuen

Werte zu Inkonsistenzen (vgl. [BleSc08, S. 129]).

Um dies zu vermeiden, werden Verfahren zur Erkennung von Dubletten eingesetzt. Die

Schwierigkeit besteht darin, die Datensätze zu identifizieren, die das gleiche Objekt reprä-

sentieren. Dies geschieht zum Beispiel über ähnliche Werte und einem daraus resultieren-

dem Ähnlichkeitsmaß. Zur Berechnung dessen existieren verschiedene Algorithmen wie

Soundex, Metaphone oder die Edit-Distanz. Alle Verfahren müssen um anwendungsspezi-

fisches Wissen erweitert werden, zum Beispiel um Datumsfelder von anderen numerischen

Werten abzugrenzen (vgl. [BleSc08, S. 131f]).

Für eine vollständige Erkennung von Dubletten müsste jeder Datensatz mit allen anderen

Datensätzen im Integrationszusammenhang verglichen werden. Die Laufzeit steigt somit

quadratisch mit der Anzahl der Datensätze. Eine mögliche Lösung für dieses Problem bie-

tet der Sorted-Neighbourhood-Algorithmus, der mögliche Dubletten bereits nah zueinander

sortiert, so dass nur noch nächstgelegene Datensätze verglichen werden müssen (vgl.

[BleSc08, S. 133]).

Aufgrund der Komplexität der Dublettenerkennung, soll die im Schwerpunkt dieser Arbeit

liegende Anwendung zur Datenintegration über kein derartiges Verfahren verfügen. Die zu

erstellende Software ist so einfach wie möglich aufgebaut. Die Erkennung von Dubletten

kann Teil einer zukünftigen Erweiterung sein und wird in der vorliegenden Arbeit nicht

weiter behandelt. Die Zieleigenschaften der Anwendung werden in Kapitel 2.9 genauer

definiert.

Page 11: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

6

2.5 Extract, Transform, Load

Einen Prozess zur Überführung von Informationen aus Datenquellen in ein Zielsystem

(beispielsweise Datenbank oder Data Warehouse) stellt ETL (Extract, Transform, Load)

dar. Für die Datenaufbereitung und Zusammenführung verschiedener Datenquellen werden

hierbei folgende Schritte durchlaufen (vgl. [Schüt01, S. 125]):

1. Extract: Auswahl, Fehlerbereinigung und temporäre Zwischenspeicherung der

Quelldaten in Rohform

2. Transform: Umwandlung der gewonnenen Rohdaten in das Format des Zielsystems

3. Load: Laden der transformierten Daten ins Zielsystem (inkrementell oder vollstän-

dig)

Systeme, die ETL-Prozesse durchführen, zeichnen sich durch die Anzahl der unterstützten

Quell- und Zielsysteme aus. Die Anbindung neuer Datenquellen sollte ohne Neuentwick-

lung ablaufen und bei hoher Heterogenität lediglich durch Erweiterung um anwendungs-

spezifische Programme gelöst werden können. Treten Fehler oder Abbrüche bei Transfor-

mations- oder Ladevorgängen auf, muss die Datensicherheit mittels automatischer Wieder-

herstellung der Ursprungsdaten gewährleistet werden. Bei hohen Datenmengen sollen leis-

tungsfähige Mechanismen, wie inkrementelle Updates, nur aktualisierte Daten oder Da-

tenmodelländerungen übertragen (vgl. [Schüt01, S. 128f]).

2.6 Mediatorbasiertes Informationssystem

Eine weitere Möglichkeit der Datenintegration ist die Mediator-Wrapper-Architektur. Sie

wird in drei Schichten, wie in Abbildung 2 gezeigt, eingeteilt. Die erste Schicht („Founda-

tion Layer“) bezeichnet die unterschiedlichen Datenquellen. Die Zwischenschicht („Me-

diation Layer“) besteht aus einem Mediator und mehreren Wrappern, abhängig von der

Anzahl der Datenquellen. Der Mediation Layer dient als Middleware und stellt die gewon-

nenen Informationen der Datenquellen der dritten Schicht („Application Layer“), auf der

sich auch die datenanfragende Anwendung befindet, zur Verfügung (vgl. [Wiede92, S.

14]).

Der Datenintegrationsprozess beginnt, sobald die Datenanfrage des Application Layers

abgesetzt wurde. Der Mediator hat nun die Aufgabe, die benötigten Daten der heterogenen

Quellen zu lokalisieren und diese, gemäß des Regel-orientierten Ansatzes aus Kapitel 2.3,

auf ein gemeinsames Modell, dem föderierten Schema, zu übertragen (vgl. [Jense07, S.

36f]. Die Extraktion und die gegebenenfalls notwendige Konvertierung der Quelldaten

Page 12: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

übernimmt dabei ein Wrapper, der

Ein Wrapper sollte nur über Grundfunktionalitäten verfügen, einfach

bar und unter niedrigem Aufwand wiederverwendbar beziehungsweise änderbar sein

[HelHo09, S. 34]). Je nach Anwendungsfall findet im Mediator die Eliminierung von

letten statt. Der Übergang zwischen Mediator und Wrapper als eigen

nach Implementierung fließend

2.5 definiert, stellt ein Beispiel für eine

prozess dar.

Abbildung 2: Mediatorbasiertes Informationssystem

2.7 Peer Data Management

Ein Peer Data Management

tur dar, welche den Zugriff auf heterogene Daten ohne zentralen Mediator gewährleistet.

Anstatt eines föderierten Schemas

le) durch eigene Schemata untereina

Komponenten, die Abfragen an Datenquellen, als auch an andere Peers durchführen

ein Wrapper, der die benötigte Programmlogik kennt und implementiert

Ein Wrapper sollte nur über Grundfunktionalitäten verfügen, einfach

bar und unter niedrigem Aufwand wiederverwendbar beziehungsweise änderbar sein

Je nach Anwendungsfall findet im Mediator die Eliminierung von

er Übergang zwischen Mediator und Wrapper als eigenständige Module

nach Implementierung fließend (vgl. [HelHo09, S. 34]). Ein ETL-Vorgang, wie

definiert, stellt ein Beispiel für einen Mediator-Wrapper-basierten

Mediatorbasiertes Informationssystem (Quelle: nach [HelHo09

Management System

Management System (PDMS) stellt eine verteilte Datenintegrationsarchite

tur dar, welche den Zugriff auf heterogene Daten ohne zentralen Mediator gewährleistet.

Anstatt eines föderierten Schemas werden die sogenannten Peers (Wrapper und Datenque

durch eigene Schemata untereinander in Beziehung gebracht. Peers sind autonome

Komponenten, die Abfragen an Datenquellen, als auch an andere Peers durchführen

7

kennt und implementiert.

aufgebaut, optimier-

bar und unter niedrigem Aufwand wiederverwendbar beziehungsweise änderbar sein (vgl.

Je nach Anwendungsfall findet im Mediator die Eliminierung von Dub-

ständige Module ist je

Vorgang, wie in Kapitel

n Datenintegrations-

[HelHo09, S. 33])

stellt eine verteilte Datenintegrationsarchitek-

tur dar, welche den Zugriff auf heterogene Daten ohne zentralen Mediator gewährleistet.

(Wrapper und Datenquel-

nder in Beziehung gebracht. Peers sind autonome

Komponenten, die Abfragen an Datenquellen, als auch an andere Peers durchführen, um

Page 13: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

8

die globale Anfrage zu beantworten (vgl. [Cudre08]). Abbildung 3 stellt die Kommunika-

tion der Peers untereinander ohne zentralen Mediator dar.

Abbildung 3: Peer Data Management System (Quelle: nach [Cudre08])

Im Hinblick auf Erweiterungen und Strukturänderungen sind PDMS flexibel. Werden

Peers mit neuen Schemata ins Netzwerk integriert, müssen diese ein Mapping-Schema

zwischen ihnen und den bereits vorhandenen Peers bereitstellen. Diese Flexibilität wird

allerdings durch die ineffiziente Anfragebearbeitung bei einer hohen Anzahl von Peers

überschattet. Dabei findet die Datenübertragung entlang des Mapping-Pfades statt, was zu

einem längeren Übertragungsweg und damit zu einer niedrigeren Abarbeitungsgeschwin-

digkeit führt. Jeder Peer verfügt über ein unabhängiges Schema, das sich mittels Transfor-

mation auf ein Referenzschema übertragen lässt. Bei PDMS wird nun versucht, zwischen

den Peers das bereits erwähnte Mapping-Schema zu erzeugen, welches die Transformati-

onsinformationen enthält. Aufgrund dieser Vorgehensweise kann die Anzahl der Mapping-

Schemata maximal auf

� ⋅� − 1

2

ansteigen, wobei n für die Anzahl der Peers steht. Da in der Regel nicht alle Peers mitei-

nander verbunden sind, ist dies ein Ausnahmefall, der aber die mögliche hohe Menge an

Mappings und die damit verbundene niedrige Abarbeitungsgeschwindigkeit veranschau-

Page 14: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

9

licht. Ein weiterer Nachteil ist der potentielle Informationsverlust, der durch die verschie-

denen Transformationen entlang des Mapping-Pfades eintreten kann und die Vollständig-

keit und somit die Qualität der Daten negativ beeinflusst.

2.8 Logische Integration

Die Integration der Daten findet erst statt, wenn eine Anfrage gesendet wurde. Die Daten

aus den unterschiedlichen Quellen werden nicht kopiert, sondern direkt vom Herkunftsort

geladen. Somit wird ein hoher Grad an Aktualität erreicht und es wird keine zusätzliche

Persistenzschicht benötigt. Ein Nachteil ist die höhere Antwortzeit im Gegensatz zu einer

zentralen Datenhaltung. Das System ist abhängig von der Verfügbarkeit und Zugriffsge-

schwindigkeit der einzelnen Datenquellen, wobei lediglich ein lesender Zugriff auf die

integrierten Systeme stattfindet (vgl. [BleSc08, S. 124]).

Für jede Datenquelle wird eine eigene Anfrage generiert, das Anfrageergebnis integriert

und an die anfordernde Anwendung weitergeleitet. Diese Form der Integration wird auch

als virtuelle Integration bezeichnet, da das Anfrageergebnis im Allgemeinen nicht persis-

tent abgelegt wird (vgl. [Vosse08, S. 462]).

2.9 Serviceorientierte Architektur

Nach Melzer (vgl. [Melze10, S. 9f]) sind Serviceorientierte Architekturen (SOA) abstrakte

Konzepte einer Software-Architektur, die Dienste in einem Netzwerk plattformübergrei-

fend anbieten, suchen und nutzen. Die Anwendungen werden funktional zerlegt und als

Services über das Netzwerk angesprochen. Der Vorteil ist die Unabhängigkeit in der Im-

plementierung der Teilprozesse, wodurch die Nutzung als gekapselte Dienste die Wieder-

verwendung erleichtert.

Melzer nennt grundlegende Merkmale von SOA (vgl. [Melze10, S. 11f]):

• Lose Kopplung (Suchen und Einbinden von Diensten bei Bedarf)

• Dynamisches Binden (Einbinden von Diensten zur Laufzeit)

• Verzeichnisdienst (durchsuchbarer Katalog verfügbarer Dienste)

• Verwendung von Standards (einfacher Zugriff auf Dienste durch offene Standards)

• Einfachheit (Dienste auf das Wesentliche beschränken, Zusatzfunktionen ausla-

gern)

• Sicherheit (Vertraulichkeit, Berechtigung, Konsistenz, Glaubwürdigkeit, Verbind-

lichkeit)

Page 15: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

10

Die beteiligten SOA-Kommunikationspartner sind dabei (vgl. [Melze10, S. 14]):

• Dienstanbieter

• Dienstnutzer

• Vermittler

Des Weiteren soll hier auch das Dienstverzeichnis erwähnt werden, welches die Grundlage

für die Dienstsuche des Dienstnutzers darstellt, aber nicht als direkter Beteiligter genannt

wird.

2.10 Service Data Objects

Zur Datenintegration eignet sich der definierte SOA-Standard der Service Data Objects

(SDO). Entwickelt vom Industriekonsortium Open SOA1 als eine von der Persistenz-

technologie unabhängige Spezifikation, beschreibt SDO sowohl Zugriffsmethoden als auch

die Zielarchitektur, um eine einheitliche Schnittstelle zur Behandlung von Daten aus unter-

schiedlichen Quellen zu schaffen (vgl. [Matha08, S. 139]).

SDO definiert drei wesentliche Komponenten (vgl. [Liebh et al. 08, S 80]):

• Datenobjekt: Objektrepräsentation der Daten inkl. Metadaten

• Datengraph: Datentransferobjekt, umfasst mehrere Datenobjekte mittels Objekt-

graph und transferiert geänderte, neu hinzugefügte und gelöschte Datenobjekte

zwischen den Kommunikationspartnern

• Data Access Service: Middleware zwischen Anwendung und Datenquelle (Media-

tor)

Das Zusammenwirken der Komponenten wird in Abbildung 4, in Form einer SDO-

Architektur, dargestellt. Ein Mediator greift hier als Data Access Service (DAS) zunächst

auf die benötigten Datenquellen zu und erstellt aus den Abfrageergebnissen den Daten-

graph, welcher für die weitere Kommunikation zwischen den beteiligten Komponenten als

Transferobjekt genutzt wird. Der Datengraph beinhaltet ein Wurzelobjekt, von dem aus die

enthaltenen Datenobjekte baumartig miteinander verbunden sind. Ändert sich der Daten-

graph durch Verarbeitung in einer der verwendeten Komponenten, wird die neue Struktur

registriert, so dass der Mediator die Veränderung auswerten und gegebenenfalls bei Lese-

1 http://www.osoa.org

Page 16: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

11

und Schreibzugriff die ursprüngliche Datenquelle aktualisieren kann. Dies betrifft neue,

geänderte und gelöschte Datenobjekte.

Zur Analyse der Datenobjekte können zusätzliche Informationen (Metadaten) herangezo-

gen werden. Als Verarbeitungsmechanismen eignen sich XPath2 oder der Zugriff auf vor-

her statisch generierte Datenobjekte über Modelle und Schemata. Zur Anbindung unter-

schiedlicher Datenquellen können verschiedene Mediatoren eingesetzt werden, die für die

jeweilige Abfrage eigene Implementierungen nutzen (vgl. [Rohma10]).

Abbildung 4: Kommunikation mittels SDO (Quelle: nach [Rohma10])

2 http://www.w3.org/TR/xpath

Page 17: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

12

3 Erstellung der Datenintegrationsanwendung

Die in dieser Arbeit vorgestellten Technologien und Strategien zur Datenintegration sollen

anhand einer prototypischen Anwendung zum Einsatz kommen. Als Plattform wird dazu

das Symfony-Framework verwendet. Ziel ist die Erstellung eines Plugins zur Integration

von heterogenen Daten. Als Anwendungsfall dient eine Webanwendung, die Bilddaten von

unterschiedlichen Quellen integriert und in Form einer Galerie darstellt.

3.1 Symfony-Framework

Das Symfony-Framework (sf) ist ein in PHP5 geschriebenes OpenSource-Framework,

welches das Model View Controller (MVC) Architekturmuster implementiert. Es kenn-

zeichnet sich durch ausführliche Konfigurationsmöglichkeiten und setzt bewährte Verfah-

ren in der Softwareentwicklung (Best Practices) ein. Dazu gehört die Verwendung von

Objektrelationaler Abbildung (ORM), der bereits genannten MVC-Architektur, der Aus-

zeichnungssprache YAML, Internationalisierung, Session-Handling, Caching, Routing,

und die Erweiterbarkeit durch Plugins und Bridges, mit denen sich Klassen aus anderen

Frameworks wie Zend oder eZ Components integrieren lassen. Mit Hilfe eines vorhande-

nen Kommandozeilenprogramms lassen sich Aufgaben, wie die Erstellung von Daten-

bankzugriffsklassen oder die Erzeugung von CRUD-Funktionen, automatisiert ausführen

(vgl. [Haber08, S. 15ff]). Aufgrund dieser Tatsache kann Symfony auch als Rapid Applica-

tion Development (RAD) Framework betrachtet werden, da es nach Sommerville (vgl.

[Somme07, S. 405]) eine Menge von Werkzeugen zur Erzeugung und Darstellung von

Daten bereithält.

3.2 Anwendungsszenario

Ein Internetanwender nutzt frei verfügbare Online-Bilddatenbanken, um seine Fotos abzu-

legen. Aufgrund der Einschränkung kostenfreier Leistungen durch Speicherbegrenzungen

registriert sich der Anwender in mehreren Dienstleistungsportalen für digitale Bilder und

verteilt dort seine Fotos. Diese sollen nun auf einer Internetseite einheitlich so angezeigt

werden, dass nicht ersichtlich ist, aus welcher Datenquelle sie stammen. Neben einem Vor-

schaubild soll auch eine vergrößerte Ansicht und ein Bildtitel angezeigt werden. Die Mög-

lichkeit des Downloads der Originaldatei muss ebenfalls vorhanden sein. Verbindungsfeh-

Page 18: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

13

ler, Offline-Bilddatenbanken oder andere technische Probleme dürfen den Betrieb der An-

wendung nicht einschränken. Fehler sollen registriert, aber nicht angezeigt werden.

3.3 Entwicklungsbasis

Die Software ist nach den SOA-Merkmalen aufgebaut. Die Dienste sind lose gekoppelt

und werden bei Bedarf dynamisch gebunden. Etablierte Standards werden Eigenentwick-

lungen vorgezogen und die Lesbarkeit des Programmcodes wird mit Hilfe von Kommenta-

ren erhöht. Programmfunktionen sind auf das Nötigste beschränkt. Zusatzfunktionen kön-

nen zu einem späteren Zeitpunkt in Form von Erweiterungen realisiert werden.

Als Integrationsarchitektur kommt die bereits beschriebene Logische, beziehungsweise

Virtuelle Integration zum Einsatz. Die Quelldaten stehen im Zielsystem nur temporär, also

zum Abfragezeitpunkt zur Verfügung und werden nicht persistent gespeichert. Die Daten-

integrationssoftware implementiert eine Mediatorbasierte Architektur anstelle eines Peer

Data Management Systems, welches zwar transparenten Zugang zur heterogenen Daten-

ebene ohne zentralisiertes Schema bietet und im Hinblick auf Strukturänderungen flexibel

ist, allerdings für die geplante Anwendung nicht in Frage kommt, da bei PDMS jeder Peer

eigens für die Lieferung von Daten, Schemata und Mapping-Informationen verantwortlich

ist. Kein Peer verfügt über das Wissen der Gesamtstruktur des Systems und es kommt auch

keine Zwischenschicht zum Einsatz, die beispielsweise das Mapping der Schemata über-

nimmt. Die in Kapitel 2.7 erwähnte niedrige Abarbeitungsgeschwindigkeit bei einer hohen

Anzahl von Peers spricht im Zusammenhang mit dieser Arbeit ebenfalls gegen die Ver-

wendung von PDMS.

Für die Umsetzung der Konzepte Serviceorientierter Architekturen werden die in Kapitel

2.10 beschriebenen Service Data Objects, für die in PHP bereits ein Modul3 existiert, ver-

wendet. Die Datenverarbeitung läuft dabei nach dem ETL-Prozess ab.

3.4 Architekturdesign

Als Architekturmuster kommt SOA unter Berücksichtigung der in Kapitel 2.9 genannten

Merkmale zum Einsatz. Vor der eigentlichen Umsetzung in Form von Programmierung

erfolgt die Modellierung aller Komponenten und Funktionen mit Hilfe von UML-

Diagrammen. Die Anwendung ist so einfach wie möglich aufgebaut, wodurch nur die be-

3 http://de.php.net/manual/de/book.sdo.php

Page 19: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

14

nötigten Funktionalitäten beschrieben und integriert werden. Des Weiteren wird gewähr-

leistet, dass die Software in Form von zusätzlichen Services erweiterbar ist und alle dafür

benötigten Schnittstellenbeschreibungen offenliegen.

3.4.1 Beteiligte Komponenten

Die beteiligten Komponenten werden mit Hilfe eines Verteilungsdiagramms in Abbildung

5 dargestellt. Die Anwendung läuft auf einem zentralen Webserver, welcher über die Da-

tenintegrationssoftware und die entsprechenden Schnittstellen zur Kommunikation mit

anfragenden Clients sowie abzufragenden Datenquellen verfügt. Webclients (zum Beispiel

Webbrowser) können über HTTP mit dem Webserver kommunizieren. Dieser kann, ab-

hängig von der Anzahl der verwendeten Wrapper, angebundene Datenquellen integrieren,

die wiederum über Programmierschnittstellen verfügen müssen, um einen Zugriff auf de-

ren Daten zu gewährleisten. Die Kommunikation findet im Allgemeinen über den Repre-

sentational State Transfer (REST) statt, kann aber je nach Schnittstelle der Datenquelle

auch in einer anderen Form erfolgen. Hierzu muss der abfragende Wrapper über das ent-

sprechende Wissen und die Technologie verfügen. Neben REST sollen hier noch SOAP

und XML-RPC als mögliche Kommunikationsmittel erwähnt werden.

Abbildung 5: Verteilungsdiagramm

Page 20: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

15

3.4.2 Anwendungsverhalten

Kern der Anwendung ist die Datenintegrator-Komponente. Die Funktionsweise ist in Ab-

bildung 6 näher dargestellt. Beim Aufruf wird zunächst ein leerer Datengraph erzeugt.

Gemäß der SOA-Merkmale wird ein Verzeichnisdienst implementiert, der alle verfügbaren

Dienste, beziehungsweise Wrapper, auflistet und zur Verfügung stellt. Diese werden durch

die lose Kopplung im Bedarfsfall dynamisch eingebunden und versuchen ihrerseits, Daten

der Quelle, für die sie verantwortlich sind, auszulesen. Ist dies gelungen, wird die Antwort

gegebenenfalls transformiert und in Form eines Datenobjektes im Datengraph abgelegt. Im

Fehlerfall findet keine Unterbrechung der Anwendung statt. Aufgetretene Probleme wer-

den in einer Logdatei vermerkt (Logging). Verbleibt der Datengraph aufgrund von Fehlern

oder nicht vorhandener Wrapper leer, so kommt es dennoch zu einer Antwort des Dienstes

in Form eines leeren Objektes. Die Anwendung, welche den Datenintegrationsdienst nutzt,

ist für die weitere Verarbeitung des Datengraphs zuständig. Es werden keine weiteren

Aufgaben vom Datenintegrator übernommen. Ist eine Authentifizierung an der Datenquelle

notwendig, so müssen die entsprechenden Funktionen (zum Beispiel Anmeldung, Ver-

schlüsselung) vom jeweiligen Wrapper implementiert werden. Zugangsdaten oder andere

benötigte Parameter liegen dabei in einer globalen Konfigurationsdatei vor. Die Konfigura-

tion wird initial vom Datenintegrator geladen und ist zur Laufzeit verfügbar.

Abbildung 6: Aktivitätsdiagramm

Page 21: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

16

3.4.3 Klassenmodellierung und Interaktion

Die Umsetzung in PHP erfolgt objektorientiert. Grundlage dafür, und für die spätere Ver-

wendung des Symfony-Frameworks, ist eine aktuelle PHP5-Version. Das Erstellen einer

automatischen Entwicklerdokumentation durch PHPDocumentor4 wird durch das Setzen

spezieller Kommentare gewährleistet.

Der Datenintegrator stellt eine eigenständige Bibliothek dar. Es kommen nur PHP-native

Mittel und andere frei verfügbare Bibliotheken zum Einsatz, die in die Verzeichnisstruktur

der Anwendung integriert werden. Der direkte Zugriff auf die interne Struktur wird durch

Datenkapselung unterbunden und das Umgehen von Invarianten der Gesamtanwendung

verhindert. Die Kommunikation erfolgt über definierte Schnittstellen.

Diese Vorgehensweise gewährleistet einen weitgehend uneingeschränkten Einsatz der

Software, über das Zielframework Symfony hinaus. Um den Datenintegrator auch in ande-

ren Systemen als Plugin zur Verfügung stellen zu können, muss das Zielsystem nur dessen

Schnittstelle implementieren. Aufgrund der Objektorientierung und Kapselung werden

Konflikte innerhalb des Namensraumes (Namespace) vermieden.

Der Aufbau der Bibliothek ist in Abbildung 7 in Form eines Klassendiagramms dargestellt.

4 http://phpdoc.org

Page 22: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

17

Abbildung 7: Klassendiagramm

Die Klasse DataIntegrator wird von der Zielanwendung instanziiert. Diese kann über Auf-

ruf der Methode getData() den Abarbeitungsprozess der gekapselten Programmlogik star-

ten. Der Mediator ist für das Laden einer Konfigurationsdatei zuständig (loadConfig()),

über die der Anwender zusätzliche Parameter setzen und die Anwendung gegebenenfalls

erweitern kann. Auf die Konfiguration wird in Kapitel 3.4.5 näher eingegangen. Das Laden

der Konfigurationsdatei stellt neben kritischen Programmfehlern durch Anwendungsent-

wickler die einzige Ausnahme bei der Unterdrückung von Fehlermeldungen dar. Treten

hierbei Probleme auf, so muss eine entsprechende Meldung direkt ausgegeben werden.

Dies ist aufgrund der benötigten Konfigurationsparameter für das Logging notwendig.

Im Anschluss an die Konfiguration werden der Logger geladen (loadLogger()) und die

verfügbaren Wrapper gesucht und instanziiert (loadWrapper()). In Kapitel 3.4.7 wird näher

auf den Aufbau des Wrappers eingegangen. Alle Wrapper-Klassen (WrapperX) erweitern

die abstrakte Klasse Wrapper, in der sich die Methodensignaturen ohne ausprogrammier-

ten Methodentext befinden. Dabei handelt es sich um die Methoden getData() und mapDa-

ta(), in denen das Abfragen der Datenquellen sowie das Zuordnen der Antwort in ein Da-

Page 23: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

18

tenobjekt erfolgen. Beide Methoden werden automatisch vom Mediator nach dem Instan-

ziieren des jeweiligen Wrappers aufgerufen. Anwendungsentwickler, die den Datenintegra-

tor erweitern wollen, sind gezwungen, die Methoden in eigenen Wrappern zu implementie-

ren, um einen korrekten Ablauf zu gewährleisten. Die abstrakte Klasse Wrapper erzeugt

eine Instanz von DataGraph, falls diese noch nicht vorhanden ist. Der DatenGraph darf

nur einmal im Programmablauf existieren und ist somit als Singleton-Klasse vorhanden.

Das Erzeugen weiterer Instanzen wird durch Setzen des private-Zugriffsmodifikators am

Konstruktor unterbunden. Stattdessen verwendet Wrapper eine Referenz auf eine von Da-

taGraph selbstverwaltete Instanz. Der Datengraph wird dadurch erst zur Laufzeit beim

Laden gefundener Wrapper erzeugt, beziehungsweise erweitert, was sich speichersparend

auf die Anwendung auswirkt. Das Ergebnis der Datenabfrage des Wrappers an der Daten-

quelle wird gegebenenfalls transformiert (mapData()) und erweitert als Datenobjekt mit

der Methode push() den Datengraphen.

Die Abarbeitung des Datenintegrationsprozesses ist im Fehlerfall, wie bereits erwähnt,

nicht zu unterbrechen. Daher werden aufgetretene Ausnahmen vor einer Ausgabe unter-

drückt und separat in einer Logdatei gespeichert. Hierzu muss temporär (im Kontext der

Anwendung) die PHP-native Fehlerbehandlung überschrieben werden. Die Klasse Logger

setzt dazu mit der Funktion set_error_handler() einen eigenen userErrorHandler. Der

Aufbau der Logdatei wird in Kapitel 3.4.6 näher erklärt. Nach Abarbeitung aller Wrapper,

wird der Datengraph vom Mediator abgefragt (getDataGraph()) und an den DataIntegra-

tor übergeben. Die implementierende Anwendung hat nun Zugriff auf dessen Datenobjekte

und eine weitere Verarbeitung kann beginnen. Die beschriebene Interaktion innerhalb des

Systems wird in Abbildung 8 als Sequenzdiagramm verdeutlicht.

Page 24: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

19

Abbildung 8: Sequenzdiagramm

3.4.4 Verzeichnisstruktur

Der Aufbau der Datenintegrator-Komponente im Dateisystem ist in Abbildung 9 darges-

tellt. Erweiterungen durch Anwendungsentwickler in Form zusätzlicher Wrapper müssen

dabei im Ordner wrapper/ abgelegt werden, um eine korrekte Einbindung zu gewährleis-

ten. Die Datei error.log im Verzeichnis logs/ ist die Standard-Logdatei. Diese soll im Be-

darfsfall gelöscht oder in ein anderes Verzeichnis (zum Beispiel /var/tmp/ unter unixoiden

Betriebssystemen) abgelegt werden können. Um einen korrekten Zugriff auf die Datei zu

gewährleisten, muss der Pfad in der Konfigurationsdatei (config/config.ini) anpassbar sein

(vgl. Kapitel 3.4.5). Auf Groß- und Kleinschreibung ist beim Aufbau des Wrapper-

Dateinamens zu achten (vgl. Kapitel 3.4.7). Werden zusätzliche Bibliotheken für die Er-

weiterung des Datenintegrators, zum Beispiel für neue Wrapper, benötigt, sind diese in

einer separaten Verzeichnisstruktur direkt unter DataIntegrator/ abzulegen. Ein Beispiel

Page 25: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

zeigt die Erweiterung der

kumentation befindet sich unter

Abbildung 9: Verzeichnis

3.4.5 Konfiguration

Alle Konfigurationsparameter des Datenintegrators

Datei) config/config.ini hinterlegt

PHP-eigenen Parser (parse_ini_file()

Verwendung einer INI-Datei anstelle von beispielsweise YAML liegt in der höheren Ve

breitung. Der Datenintegrator

Umgebungen eingebunden

sen können. Die Konfigurationsdatei ist folgendermaßen aufgebaut:

1. logging = 1 2. errorLog = logs/error.log 3. [Flickr] 4. api_key = <API_KEY>5. method = flickr.photos.search6. user_id = 51049822@N087. uri = http://api.flickr.com/services/rest/8. uri_farm = farm 9. uri_server = static.flickr.com/

Listing 1: Aufbau der Konfigurationsdatei

Die Verwendung des Log

sektionslosen Parametern

Datenquelle und den entsprechenden Wrapper

die Erweiterung der Software in Kapitel 3.7. Die automatisch erzeugte Quelltextd

kumentation befindet sich unter docs/.

: Verzeichnisstruktur der Datenintegrationsbibliothek

Konfiguration

Alle Konfigurationsparameter des Datenintegrators sind in der Initialisierungsdatei (INI

hinterlegt. Diese ist in Sektionen eingeteilt und kann von einem

parse_ini_file()) gelesen und analysiert werden. Der Vort

Datei anstelle von beispielsweise YAML liegt in der höheren Ve

breitung. Der Datenintegrator verwendet wenige externe Bibliotheken

Umgebungen eingebunden werden zu können, die potentielle Abhängigkeiten

Die Konfigurationsdatei ist folgendermaßen aufgebaut:

errorLog = logs/error.log

<API_KEY> method = flickr.photos.search user_id = 51049822@N08 uri = http://api.flickr.com/services/rest/

uri_server = static.flickr.com/

Listing 1: Aufbau der Konfigurationsdatei

Die Verwendung des Logging-Mechanismus sowie der Ablageort der Logdatei kann i

sektionslosen Parametern logging und errorLog definiert werden. Für jede anzubindende

e und den entsprechenden Wrapper wird eine eigene Sektion erstell

20

Die automatisch erzeugte Quelltextdo-

sind in der Initialisierungsdatei (INI-

. Diese ist in Sektionen eingeteilt und kann von einem

) gelesen und analysiert werden. Der Vorteil bei der

Datei anstelle von beispielsweise YAML liegt in der höheren Ver-

wenige externe Bibliotheken, um schnell in neue

werden zu können, die potentielle Abhängigkeiten nicht auflö-

echanismus sowie der Ablageort der Logdatei kann in den

Für jede anzubindende

eine eigene Sektion erstellt. Dies ist

Page 26: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

21

am Beispiel des Flickr-Wrappers ab Zeile 3, Listing 1, ersichtlich. Für die Paare von

Schlüsseln und Werten gibt es keine Vorgabe, je nach Programmierung des Wrappers,

können hier beliebig viele Parameter existieren. Diese Konfigurationsparameter liegen

global vor und werden über folgenden Aufruf im PHP-Quelltext referenziert:

$this->config['<SEKTION>']['<SCHLÜSSEL>']

Statische Werte wie Serveradressen oder Schlüssel für Programmierschnittstellen (API-

Keys) können somit innerhalb der Wrapper durch Variablen ersetzt werden. Ändern sich

Schlüsselwerte, muss lediglich eine Anpassung der Konfiguration erfolgen. Der Quelltext

bleibt dabei unberührt.

3.4.6 Logging

Anwendungsmeldungen werden bei aktiviertem Logging in einer Logdatei aufgezeichnet.

Um bei der Erweiterung durch neue Wrapper von der Logfunktion Gebrauch machen zu

können, wird folgende Funktion aufgerufen:

trigger_error('<NACHRICHT>', <ERROR_TYPE>);

Der erste Übergabeparameter steht für eine reine Textnachricht, die vom Entwickler defi-

niert wird. Der zweite Übergabeparameter gibt den Fehlertyp an. Es handelt sich dabei um

eine der folgenden Konstanten mit entsprechender Bedeutung:

Fehlertyp Fehlerbeschreibung

E_ERROR Error

E_WARNING Warning

E_PARSE Parsing Error

E_NOTICE Notice

E_CORE_ERROR Core Error

E_CORE_WARNING Core Warning

E_COMPILE_ERROR Compile Error

E_COMPILE_WARNING Compile Warning

E_USER_ERROR User Error

E_USER_WARNING User Warning

E_USER_NOTICE User Notice

E_STRICT Runtime Notice

Page 27: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

22

E_RECOVERABLE_ERROR Catchable Fatal Error

Tabelle 1: Fehlertypen

Der Aufbau der Logdatei ist folgendermaßen definiert:

<DATUM_UHRZEIT> <FEHLERTYP> <FEHLERBESCHREIBUNG> <NACHRICHT> <DATEINAME> <ZEILE> [trace: <WDDX>]

3.4.7 Datengraph und Wrapper

Als Container für die Datenobjekte wird ein Datengraph gemäß der SDO-Beschreibung

aus Kapitel 2.10 verwendet. Wie in der Entwicklungsbasis in Kapitel 3.3 beschrieben,

kommt dafür PHP SDO zum Einsatz. Aufgrund des teilweise noch experimentellen Zu-

stands zum Zeitpunkt dieser Arbeit wurde die PHP-Erweiterung zunächst getestet. Dabei

stellte sich heraus, dass nur wenige Internetdienstanbieter Serversysteme bereitstellen, die

bereits über eine Unterstützung verfügen. Diese Tatsache stellt ein KO-Kriterium dar. Der

zu entwickelnde Datenintegrator soll auf Standards ohne komplexe Abhängigkeiten basie-

ren. Des Weiteren zeigte sich bei der Entwicklung einer einfachen Testanwendung, dass

die Erweiterung von XML-Sequenzen um Attribute nachträglich nicht möglich ist, was

wohl auf den noch unfertigen Stand von PHP SDO zum Zeitpunkt dieser Arbeit zurückzu-

führen ist. Aufgrund dessen und der noch geringen Dokumentationsdichte und wenigen

Beispiele im Internet fällt die Entscheidung gegen PHP SDO. Der Datengraph wird somit

als Eigenentwicklung unter Verwendung von SimpleXML5 und DomDocument6 realisiert.

Die Erzeugung findet in der Klasse DataGraph statt. Der zu verwendende Zeichensatz ist

auf UTF-8 festgelegt:

$this->dataGraph = new DomDocument('1.0', 'UTF-8');

Zur Erweiterung des Datengraphen um Datenobjekte wird die rekursive Methode push()

verwendet. Diese erwartet als Übergabeparameter ein Array und ein optionales Elternele-

ment. Listing 2 zeigt, wie die Methode durch das übergebene Array iteriert und pro Di-

mension eine Entität mit den zugehörigen Attributen erzeugt, die als Schlüssel-Wert-Paare

enthalten sind. Ein möglicher Aufruf der Methode wird in Listing 3 dargestellt.

1. public function push($pArr, $pElement = false) {

5 http://de3.php.net/manual/de/book.simplexml.php 6 http://de3.php.net/manual/de/book.dom.php

Page 28: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

23

2. //determine root node 3. $tCurElement = ($pElement) ? $pElement : $this ->dataGraphRoot; 4. foreach($pArr as $tKey => $tVal) { 5. if (is_array($tVal)) { 6. //create element 7. $tElement = $this->dataGraph->createElemen t($tKey); 8. $tCurElement->appendChild($tElement); 9. $this->push($tVal, $tElement); 10. } else if ($pElement) { 11. //create attribute 12. $tAttr = $this->dataGraph->createAttribute($t Key); 13. $tCurElement->appendChild($tAttr); 14. //set attribute text 15. $tText = $this->dataGraph->createTextNode($tV al); 16. $tAttr->appendChild($tText); 17. } 18. } 19. }

Listing 2: Rekursive Push-Methode zur Erweiterung des Datengraphen

1. $this->DataGraph->push( 2. array( 3. "node" => array ( 4. "title" => $tVal['title'], 5. "thumb" => $tVal['thumb'], 6. "uri" => $tVal['url'], 7. ) 8. ) 9. );

Listing 3: Beispielaufruf der Push-Methode

Durch diese Herangehensweise wird die Struktur des Datengraphen flexibel gehalten und

kann vom Anwender ohne großen Aufwand geändert werden. Ein erzeugter Datengraph

(XML-Dokument) mit einigen Datenobjekten (XML-Entitäten) ist beispielhaft in Listing 4

in Form einer exportierten XML-Datei dargestellt.

1. <?xml version="1.0" encoding="UTF-8"?> 2. <root> 3. <node title="Beispiel 1" thumb="a1_t.jpg" uri="a1 _b.jpg"/> 4. <node title="Beispiel 2" thumb="a2_t.jpg" uri="a2 _b.jpg"/> 5. <node title="Beispiel 3" thumb="a3_t.jpg" uri="a3 _b.jpg"/> 6. </root>

Listing 4: Beispieldatengraph in Form einer XML-Datei

An diesem Beispiel wird ersichtlich, wie die Entitäten und Attribute aus dem an push()

übergebenem Array entstehen. Der Name des Arrays wird als Entitätsname verwendet,

seine Schlüssel und Werte als Attribute.

Das Rahmengerüst eines Wrappers ist in Listing 5 dargestellt. Der Quelltext dient als

Rahmengerüst zur Entwicklung eigener Wrapper. Die bereits angesprochenen abstrakten

Page 29: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

24

Methoden getData() und mapData() aus der abstrakten Klasse Wrapper müssen dabei im-

plementiert werden. Auf die Konfigurationsparameter kann über die Membervariable

$config zugegriffen werden. Zur Erweiterung des Datengraphen dient die bereits erklärte

Methode push().

1. <?php 2. class WrapperFramework extends Wrapper { 3. private $config; 4. private $data; 5. private $rawData; 6. public function __construct($pConfig) { 7. parent::__construct(); 8. $this->config = $pConfig; 9. } 10. public function getData() { 11. //use the following line to log errors 12. //trigger_error("Your message", E_USER_ERROR); 13. } 14. public function mapData() { 15. //use the following line to add objects to the datagraph 16. //$this->DataGraph->push(array()); 17. } 18. } 19. ?>

Listing 5: Wrapper-Rahmengerüst

Aufgrund der dynamischen Bindung von Wrappern zur Laufzeit, muss auf die Übereins-

timmung von Wrapper-Klassenname und Wrapper-Dateiname geachtet werden, damit der

Datenintegrator diese auch finden kann. Wrapper liegen im Verzeichnis wrapper/ mit fol-

gendem Aufbau des Dateinamens:

Wrapper<NAME_DATENQUELLE>.php

Wird ein Wrapper nicht mehr benötigt oder befindet er sich noch in der Entwicklung, kann

durch Veränderung des Dateinamens das Laden durch den Datenintegrator verhindert wer-

den (beispielsweise Änderung des Präfix „Wrapper“ in „_Wrapper“).

3.4.8 Benutzerschnittstelle

Die Bedienung der Beispielanwendung erfolgt über den Webbrowser. Es werden Firefox

ab Version 3.5 und der Internet Explorer ab Version 7 unterstützt. Die Oberfläche basiert

Page 30: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

25

auf XHTML 1.0, CSS 2.0 und wird mit Hilfe der Template-Funktionen von Symfony er-

zeugt. Das Screendesign ist schlicht aufgebaut und verwendet eine einfache Farbgebung.

Abbildung 10 stellt den grafischen Entwurf dar.

Abbildung 10: Grafische Oberfläche der Beispielanwendung

3.4.9 Externe Schnittstellen

Eine Programmierschnittstelle (API) zur Verwendung der Funktionalitäten der Anwendung

von außerhalb ist nicht Bestandteil dieser Arbeit, kann aber zu einem späteren Zeitpunkt

integriert werden. Es existiert eine Schnittstelle zur Implementierung der Datenintegrati-

onsbibliothek durch die Klasse DataIntegrator und den Aufruf der Funktion getData() wie

in Kapitel 3.4.3 beschrieben. Diese Schnittstelle wird vom Symfony-Plugin verwendet.

3.5 Systemumgebung

Die Anwendung setzt eine Webserver-Umgebung sowie die Skriptsprache PHP (ab Versi-

on 5) voraus. Des Weiteren werden die PHP-Erweiterungen SimpleXML und DomDocu-

ment benötigt. Für diese Anforderungen genügt eine aktuelle XAMPP-Installation, in der

Page 31: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

26

auch eine PEAR-Unterstützung enthalten ist. Für das zu verwendende Symfony-

Framework gelten zusätzlich eigene Voraussetzungen und Installationsanweisungen7.

3.6 Umsetzung

Als freie Online-Bilddatenbanken mit Programmierschnittstelle dienen Flickr8 und Photo-

bucket9, auf denen ein Benutzerkonto und ein API-Schlüssel registriert sind. Letzterer

dient zur Authentifizierung einer Anwendung, die auf die Programmierschnittstelle und

somit die Daten des Dienstleisters zugreifen will. Einige Beispielbilder, die in den Daten-

banken hinterlegt sind, werden mit Hilfe einer nach der jeweiligen API-Dokumentationen

erzeugten PHP-Anwendung gesucht und anzeigt.

3.6.1 Entwicklung der Datenintegrationsbibliothek

Der Quelltext wird gemäß dem Klassen- und Sequenzdiagramm aus Kapitel 3.4.3 imple-

mentiert. Bei der Programmierung kommen selbsterklärende Variablen- und Methoden-

/Funktionsnamen zum Einsatz. Die Datenintegrationsbibliothek wird durch den Aufruf

innerhalb einer Beispielanwendung (ohne Symfony-Framework) getestet. Die Einbettung

in ein Symfony-Plugin, welches sich an die Vorgaben der Erstellung von Erweiterungen

für Symfony10 hält, erfolgt nach zufriedenstellendem Testverhalten.

3.6.2 Symfony-Grundinstallation

Für die Entwicklung des Symfony-Moduls genügt zunächst eine einfache Installation des

Frameworks. Für diesen Zweck eignet sich die Sandbox-Version, die lediglich im Webver-

zeichnis der XAMPP-Installation extrahiert wird und danach direkt im Browser gestartet

werden kann:

http://127.0.0.1/sf_sandbox/web/index.php

Im Anschluss wird eine Anwendung innerhalb der Symfony-Sandbox mit Hilfe des mitge-

lieferten Kommandozeilenprogramms erzeugt:

$ php symfony generate:module frontend content

7 http://www.symfony-project.org/installation 8 http://www.flickr.com 9 http://www.photobucket.com 10 http://www.symfony-project.org/gentle-introduction/1_4/en/17-Extending-Symfony

Page 32: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

Ein Aufruf im Browser startet die

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/co ntent/index

Es erscheint eine Beispielseite von Symfony, da noch keine weitere Funktionalität pro

rammiert wurde. Um die Anwendung zu erweitern, wird die automatisch erzeugte PHP

Datei apps/frontend/modules/content/actions/actions.class.ph

per um folgende Zeilen ergänzt:

public function executeShow(){ }

Das dazugehörende Template

wird manuell erzeugt und mit folgendem Inhalt versehen:

<p>Hello, world!</p><p><?php echo time(); ?></p>

Über einen Testaufruf im Browser wird die Anweisung getestet:

http://127.0.0.1/sf_sand

3.6.3 Erstellung des

Nachdem die Datenintegrations

Grundinstallation vorhanden ist, kann mit der Erstellung des Symfony

gin) begonnen werden. Dazu ist

gaben des Frameworks hält

Abbildung 11: Verzeichnisstruktur

Die Datei config/config.php

rameter, welche von Symfony automatisch geladen werden.

Ein Aufruf im Browser startet die erzeugte Anwendung:

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/co ntent/index

Es erscheint eine Beispielseite von Symfony, da noch keine weitere Funktionalität pro

rammiert wurde. Um die Anwendung zu erweitern, wird die automatisch erzeugte PHP

apps/frontend/modules/content/actions/actions.class.php editiert und im Klassenkö

per um folgende Zeilen ergänzt:

public function executeShow()

mplate apps/frontend/modules/content/templates/

wird manuell erzeugt und mit folgendem Inhalt versehen:

<p>Hello, world!</p> <p><?php echo time(); ?></p>

Über einen Testaufruf im Browser wird die Anweisung getestet:

http://127.0.0.1/sf_sand box/web/frontend_dev.php/content/show

Erstellung des Symfony-Plugins

Datenintegrationsbibliothek erzeugt wurde und eine Symfony

Grundinstallation vorhanden ist, kann mit der Erstellung des Symfony

Dazu ist eine Verzeichnisstruktur notwendig, die sich an die Vo

hält:

Verzeichnisstruktur des Symfony-Plugins

config/config.php dient als Container für Plugin-spezifische Konfigurationsp

rameter, welche von Symfony automatisch geladen werden. In der aktuellen Version dient

27

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/co ntent/index

Es erscheint eine Beispielseite von Symfony, da noch keine weitere Funktionalität prog-

rammiert wurde. Um die Anwendung zu erweitern, wird die automatisch erzeugte PHP-

editiert und im Klassenkör-

ntend/modules/content/templates/showSuccess.php

box/web/frontend_dev.php/content/show

bibliothek erzeugt wurde und eine Symfony-

Grundinstallation vorhanden ist, kann mit der Erstellung des Symfony-Plugins (sfDIPlu-

, die sich an die Vor-

spezifische Konfigurationspa-

In der aktuellen Version dient

Page 33: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

28

diese Datei lediglich als Platzhalter für zukünftige Erweiterungen. Die Konfiguration des

Loggings und der Wrapper wird direkt in der Datenintegrationsbibliothek, wie in Kapitel

3.4.5 gezeigt, vorgenommen. Diese Vorgehensweise ist effizient, da die Software ohne

großen Aufwand schnell in andere Frameworks integrierbar sein soll, aber auch eigenstän-

dig einsetzbar ist. Somit kann die Kernsoftware unabhängig von Plugins, die diese einset-

zen, gepflegt werden.

Im Verzeichnis lib/ befinden sich die PHP-Quelltexte für den Datenintegrator wie in Kapi-

tel 3.4.4 beschrieben. Listing 6 zeigt einen Auszug der dort enthaltenen Datei

sfDI.class.php mit der Methode getContent()zur Erzeugung der Datenintegrator-Instanz

und zur Umwandlung der erhaltenen Daten in ein SimpleXML-Objekt.

1. public static function getContent() 2. { 3. require_once('DataIntegrator/DataIntegrator.php '); 4. $DataIntegrator = new DataIntegrator(); 5. return simplexml_import_dom($DataIntegrator->ge tData()); 6. }

Listing 6: Aufruf des Datenintegrators innerhalb des Symfony-Plugins

Die Dateien LICENSE und README enthalten die Lizenzbestimmungen und eine Instal-

lations- und Anwendungsanleitung. Diese werden automatisch vom Symfony Plugin-

Repository ausgelesen, wenn ein neues Plugin veröffentlicht wird. Die Erzeugung eines

PEAR-kompatiblen Programmpaketes setzt die Datei package.xml voraus. In ihr befinden

sich Metadaten zum Plugin wie Autor, Veröffentlichungsdatum, Version, Abhängigkeiten

und eine Auflistung der verwendeten Dateien inklusive einer Prüfsumme. Mit Hilfe von

Werkzeugen wie dem Symfony-Plugin sfTaskExtraPlugin11 kann die Datei package.xml

automatisch generiert werden:

$ pear.bat channel-discover plugins.symfony-project .org $ php symfony plugin:install sfTaskExtraPlugin $ php symfony plugin:package sfDIPlugin

Im Anschluss erfolgt die Erstellung des PEAR-Paketes:

$ pear.bat package

11 http://www.symfony-project.org/plugins/sfTaskExtraPlugin

Page 34: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

29

Das entstandene Archiv kann im Symfony Plugin-Repository12 anderen Anwendungsent-

wicklern zur Verfügung gestellt werden. Dazu wird ein Benutzerkonto angelegt und der

Registrierungsprozess für ein neues Plugin durchlaufen. Abbildung 12 zeigt das Ergebnis.

Abbildung 12: Fertiges Symfony-Plugin im Online-Repository

Das Plugin-Repository von Symfony stellt die Möglichkeit bereit, Quelltexte auch in der

Versionsverwaltungssoftware Subversion abzulegen und somit die kollaborative Arbeit zu

erleichtern.

3.6.4 Symfony-Plugin installieren und anwenden

Das im Online-Repository registrierte Plugin13 soll innerhalb der Grundinstallation von

Symfony aus Kapitel 3.6.2 eingerichtet und angewendet werden. Dazu wird die Software

ins Verzeichnis plugins/ heruntergeladen und installiert:

$ php symfony plugin:install plugins/sfDIPlugin-<VE RSION>.tgz

Die Aktualisierung einer bereits existierenden Version erfolgt durch Aufruf des folgenden

Kommandos:

$ php symfony plugin:upgrade plugins/sfDIPlugin-<VE RSION>.tgz

Um das Plugin verwenden zu können, wird die Beispielanwendung aus Kapitel 3.6.2 in-

nerhalb der Datei apps/frontend/modules/content/templates/showSuccess.php um folgende

Zeilen erweitert:

<?php echo '<pre>'; ?> <?php print_r(sfDI::getContent()); ?> <?php echo '</pre>'; ?>

12 http://www.symfony-project.org/plugins 13 http://www.symfony-project.org/plugins/sfDIPlugin

Page 35: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

30

Ein Test der Anwendung erfolgt im Browser:

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/co ntent/show

Abbildung 13 zeigt die Ausgabe in Form eines Datengraph-Auszugs im Browserfenster.

Der Datengraph kann von Anwendungsentwicklern in eigenen Programmen weiterverar-

beitet werden.

Abbildung 13: Browserausgabe des Pluginaufrufs

3.7 Erweiterung der Software

Am Beispiel der Online-Bilddatenbank Photobucket soll die Erweiterung der Datenintegra-

tionssoftware demonstriert werden. Zu Beginn wird eine neue PHP-Datei namens Wrap-

perPhotobucket.php im Verzeichnis plugins/sfDIPlugin/lib/DataIntegrator/wrapper/ ange-

legt und mit dem Quelltext aus Listing 5 in Kapitel 3.4.7 gefüllt. Es erfolgt die Erweiterung

der Datei plugins/sfDIPlugin/lib/DataIntegrator/wrapper/config.ini um eine Sektion für

Photobucket:

[Photobucket] api_key = 149830132 secret = 2cf4f5ed553d02e30e40c84bd1d34780 user = tommyschmidt

Page 36: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

31

Die ausprogrammierte Wrapper-Datei ist im Anhang auf Seite A.11 zu finden. Der Wrap-

per wird beim Start der Anwendung automatisch eingebunden. Gültige Abfrageergebnisse

werden für die Weiterverarbeitung im Datengraph hinterlegt.

Page 37: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

32

4 Zusammenfassung

Im Hinblick auf die eingangs erwähnte zunehmende Vernetzung und die steigende Anzahl

von Dienstleistungen und Datenquellen wurde in dieser Arbeit eine Lösung beschrieben,

heterogene Daten anwendungsübergreifend in einem zentralen System zu integrieren.

Die anfängliche Recherche zum Thema Datenintegration zeigte, dass es in diesem Bereich

zahlreiche Lösungen und fertige Technologien gibt. Es stellte sich heraus, dass Mediator-

basierte Informationssysteme eine hohe Verbreitung finden, was auch die Wahl zu Gunsten

dieses Systems zur Umsetzung einer Datenintegrationsanwendung beeinflusste. Das erar-

beitete Wissen ermöglichte eine rasche Planung von Entwicklungsbasis und Architekturde-

sign, bei denen eine gezielte Auswahl der recherchierten Technologien zum Einsatz ka-

men, die gerade im Hinblick auf die verwendete Skriptsprache PHP, angemessen sind. Der

detaillierte Entwurf in Form von UML-Diagrammen ermöglichte die Umsetzung der Prog-

rammierung in kurzer Zeit. Es hat sich in dieser Arbeit gezeigt, dass eine höhere Zeitinves-

tition in der Designphase letztendlich in schnell umzusetzende und wartungsfähige Syste-

me resultiert. Aufgrund der Tests von zu verwendenden Programmbibliotheken stellten

sich Schwierigkeiten schon in einer frühen Projektphase heraus, so dass korrigierend ein-

gegriffen werden konnte. Als Beispiel sei hier die letztendlich nicht verwendete PHP-

Erweiterung PHP SDO genannt. Die fertige Beispielanwendung und das entstandene Sym-

fony-Plugin wurden im Internet veröffentlicht und stehen als OpenSource zur Verfügung.

Die dabei entwickelte Datenintegrationssoftware wird zum Zeitpunkt dieser Arbeit bereits

produktiv für einen Prototyp zur Verwaltung von sozialen Netzwerken eingesetzt. Dabei

geht es um die Integration und Darstellung der Daten eines Benutzers zur zentralen Ver-

waltung aus allen internetbasierten sozialen Netzwerken, in denen er registriert ist.

4.1 Ausblick

Die in dieser Arbeit erstellte Datenintegrationssoftware und das daraus entstandene Sym-

fony-Plugin stellen eine erste Version als Basis für zukünftige Erweiterungen dar. Die

Software wurde gemäß des SOA-Merkmals Einfachheit auf die grundlegenden Funktionen

eines Mediatorbasierten Informationssystems beschränkt. Somit wird eine einfache War-

tung gewährleistet. Mögliche Erweiterungen können in Form von Symfony-Plugins oder

eigenständigen PHP-Programmbibliotheken entwickelt werden. Das Logging sollte in ei-

ner zukünftigen Version in der Lage sein, tägliche Logdateien zu schreiben, zu komprimie-

Page 38: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

33

ren und nach Ablauf eines zu definierenden Zeitraums (Rotationsprinzip) diese wieder zu

überschreiben, um Speicherplatz zu sparen. Des Weiteren sollte eine Caching-Funktion

integriert oder die bereits von Symfony bereitgestellte Technologie in diesem Zusammen-

hang verwendet werden, um häufig auftretende Anfrageergebnisse zwischenspeichern und

bei Bedarf ausgeben zu können, ohne die Datenquelle erneut abzufragen. Die bereits in

Kapitel 2.4 angesprochene Erkennung von Dubletten stellt ebenfalls eine Erweiterungs-

möglichkeit zur Vermeidung von inkonsistenten Datensätzen dar. Hier können etablierte

Algorithmen zur Ähnlichkeitsbestimmung zum Einsatz kommen.

Sobald der Funktionsumfang der Datenintegrationssoftware gestiegen ist, macht es Sinn,

die enthaltenen Methoden über eine Programmierschnittstelle für Anwendungsentwickler

verfügbar zu machen. Dies gewährleistet eine gezielte Nutzung einzelner Programmbe-

standteile sowie neue Erweiterungsmöglichkeiten der Software.

Page 39: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

34

Literaturverzeichnis

[BleSc08] BLEIHOLDER, Jens; SCHMID, Joachim: Datenintegration und

Deduplizierung. In HILDEBRAND, Knut; MIELKE, Michael; GEBAUER,

Marcus; HINRICHS, Holger: Daten- und Informationsqualität: Auf

dem Weg zur Information Excellence. Wiesbaden :

Vieweg+Teubner, 2008. – ISBN 3834803219

[Conra97] CONRAD, Stefan: Föderierte Datenbanksysteme. Berlin [u.a.] :

Springer, 1997. – ISBN 3-540-63176-3

[Cudre08] CUDRÉ-MAUROUX, Philippe: Peer Data Management System.

02.04.08. URL http://people.csail.mit.edu/pcm/papers/pdms.pdf. -

Abrufdatum: 16.06.10. - mailto: [email protected]. - Massachusetts

Institute of Technology

[Haber08] HABERKERN, Timo: Das Symfony Framework: Enterprise

Anwendungen mit PHP. Frankfurt, M. : Entwickler.press, 2008. –

ISBN 978-3-939084-14-3

[HelHo09] HELMIS, Steven; HOLLMANN, Robert: Webbasierte Datenintegration:

Ansätze zur Messung und Sicherung der Informationsqualität in

heterogenen Datenbeständen unter Verwendung eines vollständig

webbasierten Werkzeuges. Wiesbaden : Vieweg+Teubner, 2009. –

ISBN 978-3834807236

[Hergu03] HERGULA, Klaudia: Daten- und Funktionsintegration durch föderierte

Datenbanksysteme. Kaiserslautern : Technische Universität

Kaiserslautern, 2003. – ISBN 3-936890-28-5

[Jense07] JENSEN, Sven: Eine Methodik zur teilautomatisierten Generierung

von Simulationsmodellen aus Produktionsdatensystemen am Beispiel

einer Job Shop Fertigung. Kassel : Kassel University Press, 2007. –

ISBN 3899582896

Page 40: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

35

[LesNa07] LESER, Ulf; NAUMANN, Felix: Informationsintegration: Architekturen

und Methoden zur Integration verteilter und heterogener

Datenquellen. Heidelberg : dpunkt.verlag GmbH, 2007. – ISBN

3898644006

[Liebh et al. 08] LIEBHART, Daniel; SCHMUTZ, Guido; LATTMANN, Marcel; HEINISCH,

Markus; KÖNINGS, Michael; KÖLLIKER, Mischa; PAKULL, Perry;

WELKENBACH, Peter: Integration Architecture Blueprint: Leitfaden

zur Konstruktion von Integrationslösungen. München : Carl Hanser

Verlag, 2008. – ISBN 3446417044

[Matha08] MATHAS, Christoph: SOA intern: Praxiswissen zu serviceorientierten

IT-Systemen. München : Carl Hanser Verlag, 2008. – ISBN

3446411895

[Melze10] MELZER, Ingo: Service-orientierte Architekturen mit Web Services:

Konzepte - Standards - Praxis. Heidelberg : Spektrum Akad. Verlag,

2010. – ISBN 978-3-8274-2549-2

[Rohma10] ROHMANN, Dirk: SDO (service data objects). 17.03.10. URL

http://www.itwissen.info/definition/lexikon/SDO-service-data-

objects.html. - Abrufdatum: 07.06.10. - mailto:

[email protected]. – DATACOM Buchverlag GmbH

[Schüt01] SCHÜTTE, Reinhard: Data Warehouse Managementhandbuch:

Konzepte, Software, Erfahrungen. Berlin [u.a.] : Springer, 2001. –

ISBN 3-540-67561-2

[Somme07] SOMMERVILLE, Ian: Software Engineering 8. Harlow [u.a.] : Addison

Wesley [u.a.], 2007. – ISBN 0321313798

[Vosse08] VOSSEN, Gottfried: Datenmodelle, Datenbanksprachen und

Datenbankmanagementsysteme. München : Oldenbourg

Wissenschaftsverlag GmbH, 2008. – ISBN 978-3486275742

Page 41: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

36

[Wache02] WACHE, Holger: Semantische Mediation für heterogene

Informationsquellen. Berlin : Akad. Verl.-Ges. Aka, 2003. – ISBN 3-

89838-261-3

[Wiede92] WIEDERHOLD, Gio: Mediators in the architecture of future

information systems. März 1992. URL

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.11.8981&r

ep=rep1&type=pdf. - Abrufdatum: 14.05.10. - mailto:

[email protected]. – Stanford University California

Page 42: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

III

Abbildungsverzeichnis

Abbildung 1: One-Shot-Integrationsstrategie (Quelle: nach [Conra97, S. 74]) .................... 4

Abbildung 2: Mediatorbasiertes Informationssystem (Quelle: nach [HelHo09, S. 33]) ....... 7

Abbildung 3: Peer Data Management System (Quelle: nach [Cudre08]) ............................. 8

Abbildung 4: Kommunikation mittels SDO (Quelle: nach [Rohma10]) ............................. 11

Abbildung 5: Verteilungsdiagramm .................................................................................... 14

Abbildung 6: Aktivitätsdiagramm ....................................................................................... 15

Abbildung 7: Klassendiagramm .......................................................................................... 17

Abbildung 8: Sequenzdiagramm ......................................................................................... 19

Abbildung 9: Verzeichnisstruktur der Datenintegrationsbibliothek .................................... 20

Abbildung 10: Grafische Oberfläche der Beispielanwendung ............................................ 25

Abbildung 11: Verzeichnisstruktur des Symfony-Plugins .................................................. 27

Abbildung 12: Fertiges Symfony-Plugin im Online-Repository ......................................... 29

Abbildung 13: Browserausgabe des Pluginaufrufs .............................................................. 30

Page 43: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

IV

Quelltextverzeichnis

Listing 1: Aufbau der Konfigurationsdatei…………………………………………….. 20

Listing 2: Rekursive Push-Methode zur Erweiterung des Datengraphen….………….. 23

Listing 3: Beispielaufruf der Push-Methode…………………………………………... 23

Listing 4: Beispieldatengraph in Form einer XML-Datei……………………………... 23

Listing 5: Wrapper-Rahmengerüst…………………………………………………….. 24

Listing 6: Aufruf des Datenintegrators innerhalb des Symfony-Plugins……………… 28

Page 44: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

V

Glossar

API Programmierschnittstelle (Application Programming Interface)

Beta Unfertige Version eines Computerprogramms für Testzwecke

Caching Schneller Zugriff auf bereits vorliegende Inhalte

Cloud Computing Dynamisch angepasste und über das Internet bereitgestellte IT-

Infrastrukturen

CRUD Grundlegende Datenzugriffsoperationen Anlegen, Lesen, Aktualisie-

ren, Löschen (Create, Read, Update, Delete)

DOM Schnittstellenspezifikation für den Zugriff auf HTML- oder XML-

Dokumente (Document Object Model)

DomDocument PHP-Erweiterung zur Objektrepräsentation eines HTML- oder XML-

Dokuments

eZ Components OpenSource-Bibliothek von unabhängigen PHP-Modulen

Framework Programmiergerüst mit definierter Anwendungsarchitektur

Invarianz Nichtänderbarkeit von Typen in Ober- und Unterklassen

Logdatei Automatisch geführtes Protokoll von Aktionen innerhalb eines Com-

putersystems

Logging Vorgang des Führens einer Protokolldatei (Logdatei)

Mapping Konvertierung einer Nachricht von einer Struktur in eine andere

Mashup Kombination bestehender Inhalte und Technologien zu neuen Me-

dieninhalten im Internet

Middleware Anwendungsneutraler Vermittler zwischen Programmen und Prozes-

sen

Page 45: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

VI

MVC Architekturmuster in der Softwareentwicklung zur Trennung zwi-

schen Datenmodell, Präsentationsschicht und Anwendungslogik

(Model, View, Controller)

Namespace Anordnung von Objekten in einer Art Baumstruktur zur eindeutigen

Referenzierung über Pfadangaben

OpenSource Quelloffene Software mit festgelegter Lizenz zur Weiterentwicklung

und Weiterverwendung

ORM Konzept zur Abbildung von Objekten in relationalen Datenbanken

Parser Umwandlung von Eingabedaten in ein für das Zielsystem zur Wei-

terverarbeitung geeignetes Format

PEAR Bibliothek mit Modulen und Erweiterungen für PHP

Persistenzschicht Ebene zur Speicherung von Datenstrukturen in nichtflüchtigen Spei-

chermedien (zum Beispiel Datenbank auf separatem Server)

PHP Freie Skriptsprache zur Erstellung von hauptsächlich internetbasierter

Software

PHPDocumentor Software-Dokumentationswerkzeug zur automatischen Erstellung

von Entwicklerdokumentationen für PHP-Quelltexte

Plugin Programm zur Erweiterung einer Software

Prototyp Funktionsfähiges Versuchsmodell einer Software als Testversion

oder Machbarkeitsstudie

Release Fertige und veröffentlichte Version einer Software

RPC Aufruf von Funktionen über Rechnergrenzen hinweg (Remote Pro-

cedure Call)

REST Softwarearchitektur zur Anfrage von Ressourcen über eigene URI

Page 46: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

VII

Routing Wegvermittlung von Nachrichten in Rechnernetzen

Sandbox Abgeschirmte Version einer Software für Test- und Entwicklungs-

zwecke

Screendesign Grafischer Entwurf zur Präsentation auf Bildschirmen

Session-Handling Erweiterung des zustandslosen HTTP-Protokolls zur Verwaltung

unterschiedlicher Nutzer und deren Sitzungsdaten

SimpleXML PHP-Erweiterung zur Konvertierung von XML in eine Objektstruk-

tur und den damit verbundenen Bearbeitungsmöglichkeiten

SOAP Netzwerkprotokoll zum Datenaustausch und Aufruf von Funktionen

in anderen Namensräumen unter Verwendung von XML basierten

Nachrichten

Software as a Ser-

vice

Geschäftsmodell zur Bereitstellung von Software als Dienstleitung

über das Internet

UML Vereinheitlichte Modellierungssprache für IT-Systeme (Unified Mo-

deling Language)

Unixoid Unix-Verhaltensweise implementierend

URI Identifikator für Internetressourcen (Uniform Resource Identifier)

WDDX Austauschformat einer Datenrepräsentation im XML-Format

XAMPP Vorgefertigte Webserver-Installation mit Datenbank und Skriptspra-

chenunterstützung für unterschiedliche Betriebssysteme

XML Plattformunabhängige und textbasierte Auszeichnungssprache für

hierarchisch strukturierte Daten (Extensible Markup Language)

XPath Abfragesprache zur Adressierung von Elementen in XML-

Dokumenten

Page 47: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

VIII

YAML Auszeichnungssprache zur Serialisierung von Daten in Form von

assoziativen Listen

Zend Framework Objektorientiertes PHP5-Framework

Page 48: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.1

Anhang A: Quelltexte

Page 49: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.2

Page 50: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.3

Page 51: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.4

Page 52: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.5

Page 53: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.6

Page 54: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.7

Page 55: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.8

Page 56: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.9

Page 57: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.10

Page 58: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.11

Page 59: Erstellung eines Symfony-Plugins zur Integration von ... fileTommy Schmidt Matrikelnummer: 20072935 Scheffelstr. 10 98693 Ilmenau Erstellung eines Symfony-Plugins zur Integration von

A.12