Erstellen von Containern mit Zugriff auf eine Datenbank
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 |
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:
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:
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.
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:
- 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:
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.
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:
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:
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:
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:
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:
Die Werte für die einzelnen Textfelder können aus der Grafik übernommen werden.
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:
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":
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:
Wurde die Darstellung der XML-Struktur ausgewählt, so wird diese wird unterhalb des Resultates angezeigt:
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';
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.
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:
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:
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
Anschließend sollte die Konfiguration wie folgt aussehen:
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":
Abschließend Speichern und testen wir den Container mit Hilfe des "Save and Sample Run" Buttons. Die folgende Sample Run Page wird präsentiert:
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:
Wurde die Checkbox "Show XML Request/Response" aktiviert, so sind auch wieder die XML-Strukturen für diesen Container zu sehen:
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