| home | suche | kontakt/johner | institut | hinweise studierende | tech-docs | blog | mindmailer |
![]() |
XML
Wohlgeformtheit
- jedes Starttag hat ein Endtag: Bsp: <Artikel>Architektur</Artikel>
- Hinweis: in HTML gibt es Tags ohne Endtag, z.B. <br>, was nicht der Wohlgeformtheit entspricht.
- Sonderzeichen, < und & dürfen nicht in Elementinhalten vorkommen
- Attributswerte sind in doppelten Anführungszeichen ( " ) gesetzt.
- Nur Starttags dürfen Attribute enthalten, Attribute in einem Tag dürfen nur ein einziges Mal vorkommen. Erlaubt ist: <Artikel gruppe="Sachbuecher">XML Buch</Artikel> Verboten ist dagegen <Artikel>XML Buch</Artikel gruppe="Sachbuecher"> und <Artikel gruppe="Sachbuecher" gruppe="Unterhaltung">XML Buch</Artikel>
- Es darf nur ein Wurzelelement in der XML Datei geben
XML Schema (Abgekürzt XSD)
XSD ist der Nachfolger der DTD. Die DTD verwendet kaum Datentypen, z.B. PCDATA (geparste Zeichen) und CDATA (nicht geparste Zeichen), mit der DTD kann man auch nur sehr umständlich definieren wenn ein Element z.B. mindestens 3 mal vorkommen soll aber nicht mehr als 7 mal vorkommen darf.
Diese Nachteile räumt das Schema auf. Wie eine DTD gibt auch die XSD die Struktur für ein XML Dokument vor. Es gibt Datentypen, die man auch aus der Programmierwelt kennt, wie String, double, integer, date, ...
Eigenschaften von Attribute
Es gibt die Eigenschaften default, ref, fixed und use die auf ein Attribut angewendet werden können. Default gibt einen Wert vor, falls das Attribut keinen Inhalt besitzt, mit ref wird auf ein anderes Element in der XML Datei verwiesen, fixed schreibt einen festen Wert für das Attribut vor, mit use kann man sagen ob das Attribut optional ist, required oder prohibited (verboten).
JAXB
JAXB steht für Java API for XML Binding. Mit JAXB kann man aus Java Klassen ein XML Schema generieren, aus dem Schema können wieder Java Klassen erstellt werden außerdem lassen sich so sehr einfach Daten (XML) zwischen zwei Programmen austauschen.

- Quelle: www.devx.com/Java/Article/34069
Schema Generator
Mit dem Schema Generator, erzeugen wir eine XML Schema Datei aus unseren Java Klassen.
In Eclipse klickt man dazu auf Run > Run...
Unter Project muss unser JAXB Projekt ausgewählt sein, für die Main class geben wir folgendes an:
com.sun.tools.jxc.SchemaGeneratorFacade
Im Reiter Arguments setz man den Pfad zu den Klassen die im Schema erscheinen sollen, für das Beispiel Fuhrpark ist das src/fuhrpark/*.java
Wenn der Fehler cannot read... erscheint, statt src/fuhrpark/*.java den Parameter src/fuhrpark/Fuhrpark.java nehmen.
Schema Compiler
Mit dem Schema Compiler können wir uns Java Code aus einem Schema erzeugen.
Dazu öffnen wir (wie beim Schema Generator) im Eclipse das Run Fenster. In der Main class muss stehen
com.sun.tools.xjc.XJCFacade
im Reiter Arguments muss man die Argumente wie den Zielordner für den Java Code und die Schema Datei angeben.
für unser Fuhrpark Beispiel sind die Argumente
-d src
-p generated
schema1.xsd
Marshalling
Als Marshalling wird bezeichnet, wenn man Java Klassen in XML überführt. Beispiel aus der Vorlesung Stunde 8, Beispiel Code
JAXBContext jc = JAXBContext.newInstance("fuhrpark");
|
Damit wir beim ausführen auch das XML Dokument erhalten welches wir erwarten, muss folgendes beachtet werden. Im obersten Projektverzeichs (Projektroot) die Datei index.jaxb anlegen. In die index.jaxb schreibt man die Klassen die später auch in der XML Datei stehen sollen.
Im Fuhrpark müssen wir noch Annotieren. Die Klasse Fuhrpark soll unser Root Element in der XML Datei sein, die geschieht mit der Annonation @XmlRootElement. Jetzt sollen noch die Autos eines Fuhrparkes mit in die XML Datei aufgenommen werden, dafür schreiben wir @XmlElement(required = true) vor die Collection mit den Autos.
@XmlRootElement
|
Unmarshalling
Beim Unmarshalling geht man genau den umgekehrten Weg wie beim marshalling. Aus XML werden Java Klassen.
Dafür übergibt man dem unmarshaller die XML Datei, die wir vorher beim marshalling erstellt und wir erhalten im Gegenzug einen neuen Fuhrpark mit den vorher bereits angelegten Autos
JAXBContext jc = JAXBContext.newInstance("fuhrpark");
|
Webservices
Definition eines Webservices
Ein Webservice ist durch eine URI eindeutig bezeichnete Software Anwendung, deren Schnittstelle als XML-Artefakt definiert, beschrieben und gefunden werden kann.
Mit Webservices können unterschiedliche Software Anwendung mit XML Nachrichten miteinander kommunizieren. Die XML Nachrichten werden über Internetprotokolle ausgetauscht.
URI | Den URIs (Uniform Resource Identfier) ist untergeordnet die URNs (Uniform Resource Name) und der wohl bekannteste Vertreter die URLs (Uniform Resource Locator). |
Software Anwendung | Beispiele für Webservice Anwendungen sind Websuchen, (Währungs-) konvertuerungen, Übersetzungen |
Schnittstellen XML-Artefakt | Hierfür eigenet sich WSDL (Webservice Definition Language). Eine WSDL Datei beschreibt welche Methoden ein Webservice bieten. Zusätzlich werden die Übergabeparameter und Rückgabewerte der Methoden beschrieben. |
WSDL (Webservice Definition Language)
Die WSDL Datei beschreibt welche Methoden ein Webservice bieten. Mit welchen Parametern man diese Methode aufrufen muss und welchen Rückgabewert wir von der Methode erwarten können.
Welche Implementierung steckt hinter der WSDL Datei
Der Betrachter der WSDL Datei weiß nicht, was im Hintergrund abläuft und wie die Methoden implementiert sind. Die Implementierung kann daher in Perl, in .Net oder in Java sein (oder in anderen Sprachen).
Transportprotokoll einer WSDL Datei
Als Transportprotokoll werden die Internetprotokolle verwendet, zur Verfügungen stehen Protokolle wie http, ftp und smtp (eMail).
Aufbau einer WSDL Datei
Die WSDL Datei besteht aus PortType, Binding, Service und Messages.
Service | Der Service beschreibt unter welche Adresse (z.B. URL und Port) der Webservice erreichbar ist und verknüpft diese Adresse mit dem Binding. |
Binding | Gibt vor wie die Nachrichten ausgetauscht werden, z.B. SOAP (oder HTML,...) und überwelches Protokoll dies geschehen soll z.B. HTTP (oder FTP, SMTP). Für jede Methode des Webservices wird einzeln definiert wie Übergabeparamter und Rückgabewerte übergeben werden, z.B. im Klartext oder encoded. |
PortType | Beschreibt die Operationen des Webservers (in welcher Reihenfolge die Übergabeparamter übergeben werden müssen). Es gibt vier unterschiedliche Nachrichtentypen
|
Message | Beschreibt von welchem Datentyp die Übergabeparamter bzw. Rückgabewerte sind, z.B. int oder string. |

- WSDL Fragmente, Beispiel spielplatz.johner-institut.de/Klinik/
Komplexe Datentypen
Neben primitiven Datentypen wie int und string können auch eigene, komplexe Datentypen in der WSDL Datei verwendet.
Komplexe Datentypen werden mit XML Schema beschrieben.
Austausch von Nachrichten
Nachrichten können unter anderem mit SOAP ausgetauscht werden. Eine SOAP Nachricht enthält einen Envelope und einen Body. Der Envelope definiert den Verwendeten Namespace. Im Body steht die Methode und die Parameter.
Bei einem Request Aufruf ist im Body die Methode genannt die am Server ausgeführt werden soll, mit den Übergabeparametern (fall Paramter notwendig sind).
Bei einem Response, steht im Body die Methode von der die Rückgabewerte stammen und die konkreten Rückgabewerte.
Vorteil von JAXB beim Einsatz von Webservices
Für komplexe Datentypen wird XML Schema in der WSDL Datei verwendet. Mit dieser Schema Definition, kann auf Client Seite mit JAXB Java Code erzeugt werden.
In Eclipse funktioniert der Ablauf automatisch, man wählt ein Webservice Client aus und gibt die WSDL des Webservices an. Eclipse generiert dann den Code um sofort loslegen zu können. Es gibt eine Proxy Klasse mit der der Webserver angesprochen werden kann, auch die komplexen Datentypen wurden aufeglöst und daraus Java Klassen erzeugt.
SOAP
SOAP steht für Simple Object Access Protocol. Mit SOAP können unterschiedliche Anwendungen (z.B. Webservices) mittels XML kommunizieren. Als Transportschicht wird meist HTTP verwendet (FTP, SMTP sind auch möglich). Durch die Verwendung von XML ist SOAP plattformunabhängig.
SOA
SOA steht für serviceorientierte Architektur, es ist ein Konzept wie man Software umsetzen kann, keine fertige Lösung. Mit SOA will man weg von großen monolithischen Anwendungen, hin zu kleinen Service orientierten Einheiten.
Ein Service ist durch eine Schnittstelle beschrieben und stellt eine fest definierte Funktion zur Verfügung. Webservices sind eine gute Möglichkeit den SOA Gedanken umzusetzen.
Die einzelnen Services lassen sich nach Wunsch kombinieren und so komplexe Prozesse und Geschäftlogik darstellen.
Services können...
- Prozesse flexibel zusammen gestellt werden
- Geschäftslogik abgebildet werden
- Ablauflogik vom Applikationscode trennen
- existierenden Applikationen integrieren
Warum weg von monolithischen Anwendungen?
Viele Anwendungen arbeiten mit...
- eigenen Daten
- festkodierter Geschäftslogik und Abläufen von Prozessen
- eigenem Rollenkonzept
Die bringt die Nachteile mit sich...
- Redudanten Daten. Jedes Programm hält seine eigenen Daten, es gibt keine zentrale Datenablage
- Daten sind möglicherweise inkonsistent
- Gleiche Funktionalität wurde mehrfach implementiert
- geringe Flexibilität
- neue Geschäftsprozesse lassen sich nur langsam umsetzen, das Rad muss jedesmal neu erfunden werden
SOA räumt auf mit diesen Nachteilen. Services haben wohldefinierte Schnittstellen, können beliebig oft wiederverwendet werden und können beliebig mit einander kombiniert werden um Prozesse abzubilden.
Zu viele Services vs. zu wenige Services
Setzt man zu wenige Services um, erhöhen sich die Erstellungs und Wartbarkeitskosten. Services haben eine geringere Wiederverwendbarkeit, durch die erhöhte Komplexität.
Setzt man dagegen auf zu viele Services, erhöhen die Integrationskosten, da man plötzlich statt ein paar wenigen Services plötzlich eine große Anzahl an Services integrieren muss.
Eigener WebService
Mit der Annotation @WebService wird eine Klasse zu einem WebService. Soll eine Methode für den WebService freigegeben werden, geht das mit @WebMethod. Optional können auch der Webservicename, Methodenname, Rückgabewert und Parameter umbenannt werden.
- Webservicename: @WebService(name = "WebService Name")
- Methodenname: @WebMethod(operationName = "neuerMethodenName")
- Rückgabewert: @WebResult(name = "neuerRückgabewertName")
- Parameter: @WebParam(name = "neuerParameterName")
Mit JAX-WS lässt sich mit wenig Konfiguration der eigene WebService veröffentlichen.
Links:
Unterschied zwischen Orchestrierung und Choreographie
Bei der Orchestrierung gibt es einen zentralen Dirigent der die Verwaltung der einzelnen Webservices übernimmt. BPEL ist ein Beispiel für Orchestrierung.
Bei der Choreographie kennen die Webservices selbst den oder die nächsten Webservices den sie aufrufen müssen.
BPEL
BPEL steht für Business Process Execution Language. BPEL ist eine XML-basierte Sprache zur Beschreibung von Geschäftsprozessen, deren einzelne Aktivitäten durch Webservices implementiert sind.
BPEL ist damit ein Webservice, der andere Webservices aufruft, BPEL orchestriert.
Mit der BPEL Sprache stehen Programmierkonstrukte zur Verfügung wie z.B. in Java. Mit XML lässt sich damit plötzlich Programmieren ohne vorher eine Programmiersprache gelernt zu haben. Es gibt Konstrukte um Webservices augzurufen, Variablen lassen sich zu weisen, es gibt IF-, WHILE und SWITCH-Statements.
Vor- und Nachteile von vielen Komponenten
Vorteile: | Nachteile: |
einzelne Komponente ist trivial aufgebaut | aufwendiges Integrieren, wird sehr schnell komplex durch die vielen Komponenten |
granulare Bestandteile lassen sich beliebig austauschen | das Testen wird damit auch aufwendiger |
sehr feine Programmierung von BPEL aus. Feine Adaption an eigene Bedürfnisse | die Voreile einer Programmier-IDE lassen sich nicht nutzen |
die Wiederverwendbarkeit ist sehr eingeschränkt, da ein Komponente nur triviale Funktion besitzt |
Vorteile von BPEL
Dienste sind lokations und plattformübergreifend nutzbar |
Wiederverwendbarkeit von Services/Komponenten |
einfaches austauschen von Komponenten und Imlementierungen |
Anpassen der Geschäftslogik ohne zu programmieren (die Logik steckt nicht länger im Code) |
RMI
RMI steht für Remote Method Invocation, also ein entfernter Methode Aufruf. Mit RMI lassen sich innerhalb Java Welt Methoden in einer zweiten JVM aufrufen.
Stubs und Skeletons
Stubs und Skeletons sind Proxies die sich um den Transport der Nachrichten kümmern, die zwischen Server und Client verschickt werden.
Seit Java 5 müssen Stubs und Skeletons nicht mehr selbst erstellt werden, die JVM übernimmst dies.
Hier kommt ein Screencast zu RMI!
JMS
JMS steht für Java Message Service, mit JMS lassen sich Nachrichten zwischen zwei oder mehreren (Java) Clients austauschen. Bei JMS wird nicht zwischen Server und Client unterschieden, alle sind Clients.
Vorteile von JMS
Asynchroner Aufruf möglich (Sender muss nicht warten bis er eine Antwort erhält). Lose Kopplung wird damit erreicht. |
System arbeiten unabhängig von der Verfügbarkeit der anderen Systeme und deren Verarbeitungsgeschwindigkeit. |
Systeme müssen sich nicht gegenseitig kennen. |
Man unterscheidet zwischen Arten des Verschicken, point to point und publish subscriber.
Point-to-point
Bei der point-to-point sendet der producer (der Nachrichtenverschicker) seine message zu einer queue. Der consumer (der Nachrichtenempfänger) kann die message aus der queue holen und lesen.
Für point-to-point gilt:
- Nur ein consumer erhält die Nachricht.
- Der producer muss nicht laufen wenn der consumer die message abholt.
- Der consumer muss nicht laufen wenn der producer die Nachricht schickt.
Benötige Interfaces
TopicConnectionFactory |
TopicConnection |
TopicSession |
Topic |
TopicPublisher |
TopicSubscriber |
Publish Subscriber
messages können zu einem bestimmten topic veröffentlicht werden, keiner oder viele subscriber erhalten die messages. Publish subscriber kann mit dem Fernsehn verglichen werden. Es gibt viele Sendungen die ausgestrahlt werden, wenn man die Sendung sehen möchte schaltet man den Fernseher ein, andernfalls lässt man den Fernseher aus.
Für publish subscriber gilt:
- Viele consumer können die message erhalten.
- Der publisher muss eine subscription erstellen, bevor die subscriber sich verbinden können.
- Ist ein subscriber nicht online zu der Zeit in der die message verschickt, er hält er die message nicht. Der Subscriber muss ständig online sein um alle messages zu erhalten. Gilt nicht falls eine permanente subscription erstellt wurde, in dem Fall bekommt der subscriber die messages zugeschickt, sobald er online ist.
Benötigte Interfaces
QueueConnectionFactory |
QueueConnection |
QueueSession |
Queue |
QueueSender |
QueueReceiver |
JMS Nachrichtentypen
StreamMessage | Primitive Datentypen z.B. int, double |
MapMessage | enthält eine Map mit key-value Paaren. key ist ein String, value ist ein primitiver Datentyp |
TextMessage | String |
ObjectMessage | serialsiertes Java Object (wird mit implements java.io.Serializable erreicht) |
BytesMessage | Bytestream |
EAI
EAI steht für Enterprise Application Integration. EAI ist ein Konzept bei dem man verschiedene Applikationen auf (unterschiedlichen) Betriebsystemen versucht miteinander zu verbinden.
Warum kommt es zu EAI Projekten?
- Prozessoptimierung
- keine Medienbrüche
- keine Handarbeit
- Prozesse lassen sich besser protokollieren
- bessere Dokumentation
- bessere Abbrechnung
- Mergers & Acquisitions
- Unternehmenszusammenschlüsse
- Best of Breed
- die beste Software für einen bestimmten Bereich wählen und mittels Schnittstellen mit anderer Geschäftssoftware verbinden
- Bessere Lieferanten-/Kundenbeziehung
- neue Applikationen schneller produktiv bringen
1. Ebene Betriebsystem, Dateien
Protokolle | Format |
FTP | ebXML |
SMTP | SWIFT |
SMB | EDIFACT |
NFS | OCI |
HTTP | OpenTRANS |
WebDAV |
Heterogenität
- unterschiedliche Betriebsysteme
- MSB, LSB
- Sprache
- Dezimaltrenner
2. Ebene Datenbank
TODO
3. Ebene Funktionintegration
Dies ist die Ebene der APIs z.B. BABI. Um Anwendungen auf anderen Rechnern aufzurufen, nutzen wir
- Webservices
- Java RMI
- CORBA
- COM bzw. DCOM
Dadurch sind wir aber abhängig von der Programmiersprache.
4. Ebene Prozessintegration
Anwendungen stellen Teilprozesse dar. Die Teilprozesse werden zu einem Gesamtprozess orchestriert.
Technologien / Standards:
- SOA
- BPEL
- Message-Oriented-Middleware (asychroner Nachrichten austausch)
5. Ebene GUI Integration
Um GUIs auf trivialem Weg zu integrieren nutzen wir Frames oder IFrames.
Weitere Ansätze sind
- Portale
- Screen Scraping
Portale
- hohe Personalisierung
- Auswahl des Inhaltes
- Layout (Seitenaufteilung, Farben)
- verschiedene Frontends
- Browser
- WAP
- PDA, Smartphone
- Übergreifende Funktionalität
- Benutzerverwaltung, Autorsierung, Authentifizierung
- Suche
Portale besitzen die Vorteile...
- alle Inhalte auf einer Seite, auf einem Blick (Managment-Cockpit)
- geringer Schulungsaufwand, einheutliches Layout
Einsatzgebiete:
- Web 2.0, Communities
- Intranet
Produkte:
- Liferay
- JBoss
- Jetspeed
- Websphere
Portale sind unter JSR 168 standardisiert. Mehr dazu im Punkt JSR 168.
Screen Scraping
maschinelles Auslesen der Eingaben auf der GUI: Produkte für Screen Scraping sind z.B. JACADA, Winfuse, WebFuse, HostFuse.
Diese Methode besitzt jedoch einige Nachteile
- Methoden Aufrufe finden sychron statt
- aufwendiges Scripten
- sobald die GUI verändert wird, muss neu gescriptet werdenProdukte:
- keine Transaktionsicherheit
Portale
JSR 168
Mit JSR 16 ist eine API für Portale definiert. Es stehen die Methoden ...
Methodenname | Beschreibung |
doView | Gibt die Seite aus, in ihr steht HTML Code |
processAction | wird aufgerufen wenn der Benutzer einen Link klickt |
doHelp | wird aufgerufen wen das portlet sich im Help-Modus befindet |
zur Verfügung.
Es gibt weiter Variablen die den Zustand des Fensters beschreiben
WindowState | Beschreibung |
MINIMIZED | das Fenster ist gerade minimiert |
MAXIMIZED | das Fenster ist gerade maximiert |
NORMAL | das Fenster ist gerade im normal Zustand |
Das Portlet selbst kann sich in verschiedenen Zuständen befinden.
PortletMode | Beschreibung |
HELP | es wird die Methode doHelp() aufgerufen |
VIEW | es wird die Methode doView() aufgerufen |
EDIT | Portlet befindet sich im Editier Modus |












