SAGA D.C. GmbH > SAGA.M31 - Galaxy
 

Erstellen von Containern mit Zugriff auf eine Datenbank

Dieses Tutorial beschreibt die Schritte die notwendig sind, um einen Connector zu erstellen, der Daten aus einer Datenbank auslesen kann.

Anforderungen

Dieses Dokument setzt vorraus, dass Galaxy bereits auf einem System installiert ist, eine Beschreibung der Installationsprozedur findet sich auf der Galaxy Webseite, sowie im Installationspaket, dass dort ebenfalls heruntergeladen werden kann.

Für die Installation werden die folgenden Komponenten benötigt:

  • Ein Applicationserver (z.B. Jakarta Tomcat oder IBM's WebSphere)
  • Eine Java Laufzeit Umgebung ab Version 1.4
  • Eine Datenbank zum Speichern der Konfiguration, z.B. MySQL.

Darüber hinaus wird eine weitere Datenbank benötigt, in der die Daten gespeichert sind, die über Galaxy ausgelesen werden sollen. Dort werden die entsprechenden Rechte benötigt, um eine Tabelle anzulegen, sowie Testdaten dort bereitzustellen. Hierfür kann z.B. der MySQL-Server dienen, der auch die Konfiguration von Galaxy speichert.

Erstellen eines einfachen Containers

Hier werden die Schritte beschrieben, die durchlaufen werden müssen, um einen Galaxy-Container mit Zugriff auf eine Datenbank zu erstellen.

Einrichten der Datenbank

Auf dem MySQL Server muss zunächst eine Datenbank mit dem Namen TSC angelegt werden, die zunächst nur eine Tabelle, addresslist beinhalten wird. Diese Tabelle beinhaltet eine Liste aller Mitarbeiter und deren Kontaktdetails, die bei der fiktiven Firma TSC Inc. arbeiten.

Um die Tabelle sowie die Beispielinhalte zu erstellen, steht das SQL-Skript TSC_sample.sql zur Verfügung.

Um mit einer anderen Datenbank als MySQL zu arbeiten, sind die folgenden Schritte notwendig:

  • Hinzufügen der bennötigten JDBC Klassen in Klassenpfad des Applikationsservers. (Bei einem Tomcat muss lediglich das entsprechnde ".jar"-Archiv im Ordner '$TOMCAT_HOME/shared/lib' abgelegt werden.)

  • Neustart des Appilationsservers

Nach dem erzeugen hat die Tabelle addresslist die folgende Struktur:

Name Type Beschreibung
ContactId String Eindeutige ID für diesen Eintrag
FirstName String Vorname
LastName String Nachname
Telephone String Telefonnummer
Email String Email-Adresse

Erstellen des Connectors

Nach dem Anmelden am Galaxy-Server muss zunächst der Menüpunkt "Connectors" aus dem Menü gewählt werden, anschließend der Unterpunkt "Create Connector".

Es öffnet sich eine Seite mit einer Auswahlliste, in der der Typ des neuen Connectors bestimmt werden muss:

Create Connector

Um nun eine Datenbank als Datenquelle zu definieren, muss der Typ "SQL" ausgewählt und die Auswahl mit dem Button "Create!" bestätigt werden.

Auf der nächsten Seite müssen die Parameter für den Connector spezifiziert werden:

Connector Configuration

Beschreibung der Parameter:

Eigenschaft Beschreibung Beispiel
Connector Name Name des Connectors SampleAppConnector
SQL Driver Class Treiberklasse des JDBC-Connectors com.mysql.jdbc.Driver (für MySQL)
SQL Driver URL JDBC-Url unter der die Datenbank erreichbar ist jdbc:mysql://[host]:3306/TSC ([host] durch Hostnamen ersetzen)
User Name Benutzername zur Identifizierung [Konfigurationsspezifisch]
Password Passwort zur Authentifizierung [Konfigurationsspezifisch]

Über die Auswahlliste ist es möglich die Basisdaten für einen Datenbanktypen in die Felder eintragen zu lassen. Für viele der aktuellen SQL Datenbanken sind vordefinierte Parameter vorhanden, die nur noch durch Angaben wie Host, Username oder dem Passwort ergänzt werden müssen.

Note
Die JDBC-Treiberklassen müssen im Klassenpfad des Applikationsservers vorhanden sein.

Nachdem die entsprechenden Werte eingetragen wurden, wird die Connectorkonfiguration über den Button "Save Connector" gespeichert.

Erstellen des Requests

Um einen neuen Request zu erstellen, muss im Menü zunächst der Menüpunkt "Connectors" angewählt werden. Eine Baumstruktur der verfügbaren Connectoren ist zu sehen. Hier muss zunächst der soeben erstellte Connector ausgewählt werden, wodurch auf der rechten Seite detailierte Informationen hierzu angezeigt werden.

Hier können die folgenden Aktionen durchgeführt werden:

  • Eine neue Abfrage erstellen (Abfragetyp in der Auswahlliste aussuchen und auf Create klicken)
  • Den Connector editieren (Zahnrad Symbol)
  • Den Connector löschen (X-Symbol, nur möglich wenn kein Container von dem Connector abhängig ist)

Zum erstellen einenes neuen Requests dient nun die Auswahlliste "New Request Type", in der der Typ des neuen Requests festgelegt wird:

Connector Overview

  • Read - Erstellt einen Request, der Daten ausliest
  • Delete - Erstellt einen Request, der Daten löscht
  • Update - Erstellt einen Request, der Daten ändert
  • Insert - Erstellt einen Request, der neue Daten einfügt

Da ein lesender Request erstellt werden soll, muss dort entsprechent der Eintrag "Read" ausgewählt werden. Nach dem die Auswahl durch "Create!" bestätigt wurde, öffnet sich die folgende Seite:

Connector Request Creation

Für den neuen Request muss zunächst mal ein Name definiert werden, dieser wird im Feld "Request Name" eingetragen. Nun wird das SQL-Statemnt formuliert, das bei der Ausführung des Requests abgesetzt werden soll. Um dieses zu Testen, kann der Button "Run Query" genutzt werden. Die Daten, die zurückgeliefert werden, werden angezeigt und dienen als Basis zur Auswahl der Ausgabefelder.

Note
Da hier, je nach SQL-Statment, sehr viele Datensätze gefunden werden, dient das Feld "Limit Sample Data" zur Begrenzung der Anzahl an zurückgelieferten Datensätzen

Das folgende SQL-Statement z.B. listet alle Datensätze aus der Tabelle adsresslist auf:

SELECT * FROM addresslist;

Nach dem nun der "Run Query"-Button betätigt wurde, sollte eine Liste mit allen Datensätzen in unteren Teil der Seite sichtbar sein:

Run Query Example

In der Zeile "Output provided as" kann eingestellt werden, ob die Daten als Felder oder als Tabelle zurückgegeben werden sollen. Da mit dem oben angegebenen SQL-Statement mehrere Datensätze ausgegeben werden, wäre es sinnvoll diese als Tabelle zurückgeben zu lassen. Ein Klick auf [Switch to Table] genügt um die zurückgabe als Tabelle zu aktivieren. Lediglich ein Tabellen Name muss noch angegeben werden. In unserem Fall geben wir hier "Userlist" an

Nun werden die ausgegebenen Spalten auf die folgenden Reduziert:

  • ContactId
  • FirstName
  • LastName

Hierzu muss das SQL-Statement wie folgt ersetzt werden:

SELECT ContactId, FirstName, LastName FROM addresslist;

Ein erneuter Klick auf "Run Query" zeigt das Resultat:

Run Query Example

Nach erfolgreichem durchführen der Abfrage kann ausgewählt werden, welche Felder dieser Request bereitstellen soll. Dazu einfach an jedes Feld ein Häkchen setzen und den Button "Add Selected as Fields" drücken:

xxx

Für jedes so erzeugte Ausgabefeld kann ein Name spezifiziert werden, unter dem das Feld später verfügbar sein wird. Galaxy schlägt automatisch die Namen der Spalten hierfür vor, diese können unverändert bleiben.

Da in dieser Abfrage keine Eingabefelder definiert sind, ist auch der Abschnitt "Input Fields" auf der gezeigten Seite nicht sichtbar. Im nächsten Abfragebeispiel werden wir auch von dieser Technik gebrauch machen.

Mit einem Klick auf "Save" wird der Request gespeichert, und steht vo nun an zum Einbinden in einen Container bereit. Erneut wird die Baumstruktur der Connectoren präsentiert, in der der neu angelegte SQL Request sichtbar ist:

xxx

Erstellen des Containers

Nun wird ein Container erstellt, der die eben erstellte Abfrage einbindet, um diese Informationen bereitzustellen.

Um einen Container zu erstellen, muss der Menüpunkt "Create Container" im Menü betätigt werden. Im angezeigten Formular werden die Basisdaten für den neuen Container erfasst:

xxx

Die Werte für die einzelnen Textfelder können aus der Grafik übernommen werden.

Note
Das Handle ist eine Kurzform und wird zum ansprechen des Containers (z.B. über den XML-Service) verwendet.

Als nächstes müssen die Ausgabefelder aus dem zuvor erstellten Request in den Container eingebunden werden. Ein Klick auf den Link "Add more Output Fields" führt auf die bekannte Baumansicht der Connectoren und deren Requests. In dieser Baumstruktur wird nun der zuvor erstellte Request ausgewählt. Es erscheint eine Liste der verfügbaren Ausgabefelder in der rechten Ansicht. Hier wählen wir die zuvor definierte Tabelle "Userlist" an, und fügen sie mit Hilfe des Buttons "Add Selected Fields" zum Container hinzu:

xxx

Der Button führt wieder zurück zur Bearbeitung des Containers. Um den Container zu speichern und anschließend zu testen genügt ein Klick auf den Button "Save and Sample Run":

xxx

Es wird nun die "Sample Run" Seite präsentiert. Diese dient zum Testen der erstellten Container. Die folgenden Optionen können spezifizierte werden:

  • Ob die XML Abfrage/Antwortsstruktur angezeigt werden soll (Checkbox "Show XML Request/Response")
  • Wenn ja, welche Version der Struktur gewünscht ist (V1/V2)
  • Ob ein Trace erstellt werden soll (Checkbox "Show the Trace"). Ein Trace zeigt detaillierte Informationen der Connectoren und kann so bei der Fehlersuche in einem Container helfen.

Nun kann der Testlauf über den Button "Fire!" ausgelöst werden.

Im Ergebnis wird die zurückgelieferte Tabelle als HTML-Tabelle dargestellt:

xxx

Wurde die Darstellung der XML-Struktur ausgewählt, so wird diese wird unterhalb des Resultates angezeigt:

xxx

Erstellen eines Containers mit Eingabefeldern

In diesem Abschnitt wird demonstriert, wie mit Hilfe von Galaxy Requests realisiert werden können, die in Abhängig zu Eingabefeldern stehen. Als Beispiel dient hier das Auslesen von detaillierten Informationen eines bestimmten Datensatzes aus der Testtabelle. Um diese zu erhalten, muss die ID des Datensatzes angegeben werden, aus dem die Informationen stammen sollen.

Erstellen des Request

Wie im ersten Abschnitt muss zunächst ein SQL-Request erstellt werden. Der Menüpunkt "Connectors" führt zur Übersicht, wo wieder der erstellte Connector ausgewählt wird. Nach Selektion des Request Typs "Read" und Betätigung durch "Create!" öffent sich die Konfigurationsseite für Requests.

Hier muss ein Name für den Request vergeben werden, in diesem Beispiel nennen wir ihn "UserDetail".

Um nun alle Felder eines bestimmten Datensatzes zu erhalten dient die folgende SQL-Abfrage:

SELECT * FROM addresslist where ContactId = '3';

xxx

Dieser Request wählt zunächst statisch den Benutzer mit der ContactId 3 aus. Um den Request flexibel zu gestalten, sollte an dieser Stelle ein variabler Wert eingesetzt werden. Dies geschieht mit Hilfe von Eingabefeldern, die später bei der Ausführung des Requests spezifiziert werden müssen. Um ein solches Feld zu definieren, wird der Wert 3 durch einen in # gefassten Namen ersetzt. In unserem Beispiel haben wir hier #contactId# eingesetzt.

Hinweis
Mit dieser Notation (# inputParameter #) wird definiert, dass der entsprechende Wert erst zur Laufzeit definiert und in die Abfrage eingesetzt wird.

Nach dem nun die SQL-Abfrage nun wie folgt modfifziert wurde:

SELECT * FROM addresslist WHERE ContactId = '#contactId#';

muss vor erneuter Ausführung durch "Run Query" zunächst der Button "Update Fields" betätigt werden. Dieser durchsucht die SQL-Abfrage nach benötigten Eingabefeldern und bietet Textfelder für jedes gefundene Eingabefeld an. Hier können nun Beispielwerte eingetragen werden, um den Request zu testen. Wird hier der Wert 3 eingetragen, so wird das gleiche Ergebnis wie im vorherigen Lauf erzielt und der zurückgelieferte Datensatz wird unten angezeigt:

xxx

Erstellen des Containers

Als nächstes wird ein Container erstellt, der die Detailabfrage bereitstellt. Im Menü muss hierzu der Menüpunkt "Containers" und anschließend "Create Container" ausgewählt werden.

Hier sind die Daten entsprechend der Abbildung einzutragen:

xxx

Jetzt werden über den Link "Add more output Fields" die Ausgabefelder definiert.

Zuerst muss auf der linken Seite der gerade erstellte Request ("UserDetail") ausgewählt werden, um rechts eine Liste aller Felder zu erhalten, die dieser Request bereitstellt. Hier müssen dem Container nun alle Felder über den Link "Add Selected Fields" hinzugefügt werden, die im vorherigen Schritt erstellt wurden. Diese sind:

  • Emailaddress
  • FirstName
  • LastName
  • Job
  • Telephone

xxx

Anschließend sollte die Konfiguration wie folgt aussehen:

xxx

In dem Abschnitt "Open Dependencies" ist nun das gelb Markierte Feld "contactId" zu sehen, welches benötigt wird um den Request auszuführen. Um dieses als Eingabefeld zu übernehmen muss das Feld selektiert und anschließend der Button "Add selected Fields" betätigt werden. Das Feld erscheint nun im Abschnitt "Input Fields":

xxx

Abschließend Speichern und testen wir den Container mit Hilfe des "Save and Sample Run" Buttons. Die folgende Sample Run Page wird präsentiert:

xxx

Diesmal wird ein Textfeld angezeigt, in dem der Wert spezifiziert werden muss, der in die SQL-Abfrage eingefügt wird. Hier kann nun eine der ContactID's der Tabelle eingetragen werden, um Details für diesen Mitarbeiter abzufragen.

Nach einem Klick auf "Fire!" wird das Ergebnis präsentiert:

xxx

Wurde die Checkbox "Show XML Request/Response" aktiviert, so sind auch wieder die XML-Strukturen für diesen Container zu sehen:

xxx

Der Container ist nun erstellt und getestet und kann über die verschieden Schnittstellen von Galaxy abgefragt werden.

Galaxy XML Strukturen

Galaxy bietet zwei XML Strukturen an, die für die Anfrage/Antwort verwendet werden können:

  • Version 1 oder Kurz V1
  • Version 2 oder Kurz V2

Warum zwei Versionen?

Nun, die erste Version wurde verwendet, bevor die Web Services Schittstelle in Galaxy implementiert wurde. Bei der Implementierung wurde festgestellt, dass es mit dieser Version zu Kompatibilitätsproblemen kommt, speziell im Zusammenspiel zwischen der J2EE und .NET Plattformen.

Also wurde eine neue Struktur, Version 2, eingeführt, um dem entgegenzuwirken. Da diese vom Aufbau her einfacher strukturiert ist, ist es leichter, Galaxy in bestehende Implementierungen wie dem Microsoft Office XP Web Services Toolkit 2.0 zu integrieren. Dieses Ermöglicht z.B. die Integration von Daten aus Web Services in Officedokumente wie Tabellen oder Briefe.

Um die Applikationen, die bereits mit Version 1 betrieben werden nicht ändern zu müssen, wurde diese Version beibehalten. Galaxy liefert auf Basis der Abfragestruktur die entsprechend Antwort zurück.

Sollten beim durcharbeiten dieses Tutorials Fragen oder Probleme auftreten, oder gibt es Anregungen zu unserem Produkt so sind wir entweder über galaxy@sagadc.com oder unsere Website http://www.sagadc.com jederzeit für Sie da.

Um mehr Informationen zu SAGA.M31 - Galaxy zu erhalten besuchen Sie auch die Galaxy Website, wo neben hilfreichen Informationen auch ein öffentliches Forum zur Verfügung steht.

Vielen dank für Ihr Interesse an SAGA.M31 - Galaxy