SAGA D.C. GmbH SAGA.M31 - Galaxy - Create Web Services in 15 minutes   SAGA D.C. GmbH
Einführung

Jeder Entwickler kennt die Probleme, die der Zugriff auf Daten verschiedener Quellen mit sich bringt: Datenbanken, LDAP Verzeichnisdienste, Mainframe Applikationen und externe Applikationen sind nur Beispiele hierfür. Jede dieser Datenquellen hat ihre Eigenarten und Besonderheiten und als ob das noch nicht Genug sei, muss die Quelle nun auch noch in die eigene Programmiersprache implementiert werden. Oftmals reicht es auch der einfache Zugriff auf die Daten nicht aus, sie müssen auch zwischen den verschiedenen Quellen ausgetauscht werden. Um diese Aufgaben leichter, schneller und zuverlässiger umzusetzen, gibt es nun ein spezielles Produkt: SAGA.M31 - Galaxy

Das Ziel von SAGA.M31 - Galaxy ist es, eine einheitliche Schnittstelle für den Datenzugriff zu schaffen, unabhängig davon, wo sich die Daten letzten Endes befinden. Ein revolutionärer Ansatz der nicht nur die Datenintegration an sich, sondern auch die Migration auf andere Datenquellen vereinfacht. Diese einheitlichen Schnittstellen die von Galaxy zur Verfügung gestellt werden, sind die so genannten Contaniner mit denen wir uns später im Detail auseinandersetzten werden. Aber Container sind erst der Anfang, SAGA.M31 - Galaxy bietet eine Schnittstelle an, um Container als Web Service über HTTP bereit zu stellen (beschrieben durch eine WSDL-Datei) ohne hierfür eine einzige Zeile Code schreiben zu müssen. Galaxy ermöglicht hiermit die Erstellung eines Web Services in weniger als 15 Minuten!

Neben der Schnittstelle für Web Services bietet SAGA.M31 - Galaxy die folgenden Features:

Anforderungen

SAGA.M31 - Galaxy ist eine J2EE (Java 2 Enterprise Edition) Web Applikation die auf einen "J2EE Application Server" läuft. Mit den folgenden Servern wurde Galaxy bereits getestet:

Als Laufzeitumgebung für den Application Servers wird Java Version 1.4.x empfohlen, ältere Versionen sowie die neue Version Java 5 werden nicht unterstützt.

Darüber hinaus benötigt Galaxy eine MySQL Datenbank zur Speicherung der Konfiguration. MySQL kann kostenlos unter http://www.mysql.com herunter geladen werden. Es wird hierbei eine Version der 4.0.x Serie von MySQL empfohlen.

Download und Installation

Das Installationspaket kann auf der Galaxy Website herunter geladen werden. Im Paket findet sich in der Datei install.txt eine Beschreibung der Installationsprozedur. Bevor nun de Schritte in diesem Dokument durchlaufen sollten noch überprüft werden, dass...

SQL Connector und Container Tutorial

Einleitung

In diesem Abschnitt wird zunächst ein SQL Connector für den Zugriff auf eine Datenbank erstellt und konfiguriert. Anschließend wird eine Abfrage für diesen Connector erstellt, deren Ausgabe in einen Container eingebettet wird. Der SQL Connector nutzt die JDBC Schnittstelle um Abfragen abzusetzen. Er stellt zwei Typen von Feldern zur Verfügung: Tabellen und einfache Felder (Strings). Das folgende Beispiel zeigt die Erstellung und Verwendung von beiden Datentypen.

Erstellen der Datenbank

Auf dem MySQL Server muss zunächst eine Datenbank mit dem Namen TSC angelegt werden, 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:

Tomcat
Websphere

Die Tabelle addresslist hat die folgende Struktur:

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 SQL Connectors

Zunächst muss der Menüpunkt "Create Connector" aus dem Galaxymenü gewählt werden. Es öffnet sich eine Seite mit einer Auswahlliste, in der der Typ des neuen Connectors bestimmt wird. Hier muss der Typ "SQL" ausgewählt und die Auswahl mit dem Button "GO!" bestätigt werden.

Auf der nächsten Seite müssen die Parameter für den Connector spezifiziert werden. Im Falle des SQL-Connectors sind es die folgenden:
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]

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

SQL Abfrage, die alle Mitarbeiter auflistet

Um eine neue Abfrage zu erstellen, muss im Menü zunächst der Link "SQL Connector" ausgewählt werden. Dies führt zur Basisseite des Connectors, in der alle Instanzen dieses Typs aufgelistet sind. Dort können die folgenden Aktionen ausgeführt werden:

Um eine neue Abfrage zu erstellen, muss der Link "Add Query" bei dem gerade erstellten Connector betätigt werden.

Das erstellen der Abfrage wird in drei Schritten abgewickelt. Im ersten Schritt wird die Abfrage erstellt und getestet.

Um nun eine vollständige Liste aller Mitarbeiter zu erhalten, muss dass folgende SQL Statement eingetragen werden:

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.

Die Checkbox "Result always tabular" ist angewählt, da das Ergebnis dann immer als Tabelle zurückkommen wird. Ist sie nicht angewählt, so werden die Spalten als einzelne Felder zurückgeliefert, sofern das Ergebnis nur einen Datensatz enthält. Diese Form wird weiter unten im Dokument behandelt.

Das "Limit" Feld dient zum limitieren Anzahl der zurückgelieferten Zeilen. Ist eine Abfrage so formuliert, dass zu viele Datensätze zurückgeliefert werden, so kann dies zu Speicherproblemen in der Anwendung führen. Um dies dem entgegenzuwirken, wurde das Limit eingeführt. Ein Wert von 0 bedeutet keine Limitierung der Zeilenzahl.

Als Übung werden nun die ausgegebenen Spalten auf die folgenden Reduziert:

Das SQL Statement sollte nun so aussehen:

SELECT ContactId, FirstName, LastName FROM addresslist;

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

Mit dem Button "Go To Next Step" kann in den nächsten Schritt gesprungen werden:

Hier werden Namen vergeben, unter denen die zurückgelieferten Felder später verfügbar sein sollen. Liefert die Abfrage eine Tabelle zurück, so muss auch für diese ein Name vergeben werden. In unserem Fall nennen wir sie "Users TSC Inc.". Die Namen der anderen Felder werden wir nicht anpassen, Galaxy schlägt automatisch die Namen der Spalten hierfür vor.

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

Ein erneuter Klick auf den Button "Go To Next Step" führt uns zu Schritt drei, der eine Zusammefassung der Abfrage darstellt. Mit einem Klick auf "Save Changes" wird sie gespeichert, und wird ab nun zum einbinden in einen Container bereitstehen. Erneut wird die Basisseite des SQL-Connectors präsentiert, in der die neu angelegten Felder eingesehen werden können:

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 Link "Create Containers" im Menü betätigt werden. Im angezeigten Formular werden die Basisdaten für einen Container erfasst:

Hier sollten die Basisdaten aus der Grafik übernommen werden.

Im Beispiel wurde ein Handle angelegt. Ein Handle ist eine Kurzform des Namens und wird zum ansprechen des Containers verwendet. Das Textfeld muss zunächst über den "Add"-Link aktiviert damit ein Handelname eingetragen werden kann.

Um die Web Services Schnittstelle von Galaxy zu nutzen, ist ein Handle erforderlicht

Ein Klick auf "Next Step" führt zum nächsten Abschnitt, der Konfiguration der Ausgabefelder. Hier muss zunächst in der Auswahlliste "Fields in Connector" der vorher angelegte Connector ausgewählt werden. Nach der Auswahl werden alle verfügbaren Ausgabefelder des Connectors in der Tabelle unterhalb angezeigt. In jeder Zeile befindet sich eine "Add"-Link, um das entsprechende Feld dem Container hinzuzufügen. Um nun das Feld "Users TSC Inc." (die Tabelle, die im vorherigen Abschnitt erstellt wurde) bereitzustellen, muss der Link für dieses Feld betätigt werden:

Das Feld wurde der Liste "Container Output Fields" hinzugefügt, nun kann über das Textfeld "Field Name" ein Name spezifiziert werden. Der Name eines Containerfeldes wird vom Namen eines Connectorfeldes getrennt, um im Falle einer Migration auf eine andere Datenquelle lediglich das Connectorfeld im Hintergrund austauschen zu können, ohne dabei die Schnittstelle des Containers selbst zu verändern. Diese Vorgehensweise bringt den Vorteil mit sich, bei einem Wechsel der Datenquellen die Applikationen die den Container nutzen nicht ändern zu müssen.

Aus der Grafik ist ersichtlich, dass der gewählte Name keine Leer- oder Sonderzeichen enthällt. Dies ist wichtig, um Kompatibilitätsprobleme mit verschiedenen Implementierungen von Web Service-Clients zu vermeiden.

Ein erneuter Klick auf "Next Step" führt zur Konfiguration der benötigten Eingabefelder.

Da in diesem Fall keine Eingabefelder benötigt werden, kann hier direkt wieder der "Next Step" Button betätigt werden. Bei der Konfiguration des zweiten Containers werden auch Eingabefelder benötigt, dieses Thema wird also später noch erläutert.

Der vierte und letzte Schritt der Containerkonfiguration zeigt eine Übersicht der vorgenommenen Konfiguration an. Ein Klick auf "Save Container" speichert den Container schließlich in der Datenbank und führt zur Containerübersicht, wo der neu erstellte Container nun zu sehen ist.

Von hier aus kann der Container nun über den Link "Sample Run" getestet werden. Hierbei kann gewählt werden, ob

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

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

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

Erstellen einer Abfrage mit Eingabefeldern

In diesem Abschnitt wird demonstriert, wie mit Hilfe von Galaxy Abfragen realisiert werden können, die Abhängig von einer Eingabe sind. 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.

Wie vorher wird zunächst die Basisseite des SQL Connectors über den Menülink "SQL Connector" ausgewählt. Hier wird nun mit Hilfe des Links "Add Query" eine neue Abfrage in dem Erstellten Connector erstellt.

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

SELECT * FROM addresslist where ContactId = '3';

Wurde nach Eingabe der Abfrage der "Run Query"-Button betätigt, so stellt sich das Ergebnis wie folgt dar:

Da diese Abfrage nun zunächst mal statisch auf den Benutzer mit der ContactId 3 abzielt, muss, um die Abfrage variabel zu gestalten, an dieser Stelle ein variabler Wert eingesetzt werden. Dies geschieht mit Hilfe von Eingabefeldern, die später bei der Abfrage 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.

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 wie folgt modfifziert wurde:

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

Muss vor erneuter Ausführung durch "Run Query" zunächst der Button "Parse Query" betötigt werden. Dieser durchsucht die SQL-Abfrage nach benötigten Eingabefeldern und bietet Textfelder für jedes gefundene an. Hier können nun Beispielwerte eingetragen werden, um die Abfrage 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:

Einem Klick auf "Next Step" führt zur Zuordnung der Felder. Hier kann für jedes Ein- und Ausgabefeld ein Name vergeben werden. Bei Ausgabefeldern ist dieser Standardmäßig mit dem Namen der Tabellenspalte vorbelegt, bei Eingabefeldern wird als Standard der in # gefasste String angenommen.

Im nächsten Schritt ist nochmals die Konfiguration der Abfrage zusammengefasst, ein Klick auf "Save Changes" speichert die Abfrage in die Datenbank

Erstellen des Containers für die Detailabfrage

Als nächstes wird ein Container erstellt, der die Detailabfrage bereitstellt. Im Menü muss hierzu der Link "Create Container" ausgewählt werden.

Im ersten Schritt sind die Daten entsprechend der Abbildung einzutragen:

Ein Klick auf "Next Step" führt zur Definition der Containerfelder, die ausgeliefert werden sollen. Hier müssen dem Container nun alle Felder über den Link "Add" hinzugefügt werden, die im vorherigen Schritt erstellt wurden. Diese sind:

Im nächsten Schritt ist diesmal das vorher definierte Eingabefeld "contactId" zu sehen, da die ausgewählten Ausgabefelder von diesem Eingabefeld abhängig sind. Mit einem Klick auf "Add as New" wird dieses Feld als Containereingabefeld hinzugefügt. Auch hier kann, wie bereits bei den Ausgabefeldern ein Name definiert werden um bei eventueller Anderung der Datenquelle die Schnittstelle nach Außen hin zu wahren.

Im Beispiel wird hier der Name "userID" vergeben:

Schritt 4 zeigt wieder eine Übersicht des erstellten Containers, die mit "Save Container" bestätigt und gespeichert werden muss.

Der erstellte Container kann nun wieder über den Link "Sample Run" getestet werden. 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 über 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:

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 Verison 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

 
  » Impressum » Haftungsausschluß » AGB » Kontakt » Datenschutz  
 
© 2006, SAGA D.C. GmbH - Alle Rechte vorbehalten

Powered by SAGA.M31 - Galaxy -