home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  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: http://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");
      Marshaller m = jc.createMarshaller();
      m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
      m.marshal(sixt, System.out);

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
public class Fuhrpark {
  private String fuhrparkname;
  
  @XmlElement(required = true)
  private Collection<Auto> fahrzeuge = new Vector<Auto>();

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");
      Unmarshaller unmarshaller = jc.createUnmarshaller();
      Fuhrpark fuhrpark = 
        (Fuhrpark)unmarshaller.unmarshal(new FileInputStream("input.xml"));

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.

 

URIDen URIs (Uniform Resource Identfier)  ist untergeordnet die URNs (Uniform Resource Name) und der wohl bekannteste Vertreter die URLs (Uniform Resource Locator).
Software AnwendungBeispiele für Webservice Anwendungen sind Websuchen, (Währungs-) konvertuerungen, Übersetzungen
Schnittstellen XML-ArtefaktHierfü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.

 

ServiceDer Service beschreibt unter welche Adresse (z.B. URL und Port) der Webservice erreichbar ist und verknüpft diese Adresse mit dem Binding.
BindingGibt 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

  • One-Way: es gibt nur input Werte (Client übergibt Parameter)
  • Request-response: input und output (Client übergibt Parameter und erhält einen Rückgabewert vom Server)
  • Notification/Response: output und input (Server sendet eine Nachricht und erwartet eine Antwort vom Client)
  • Notification: output (Client wird vom Server benachrichtigt)
MessageBeschreibt von welchem Datentyp die Übergabeparamter bzw. Rückgabewerte sind, z.B. int oder string.

 

 

WSDL Fragmente, Beispiel http://spielplatz.johner-institut.de/Klinik/?wsdl

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.

Beispiel eines komplexen Datentyps

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.

Prozess greift auf Services zu

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:

JAX-WS Konfiguration

Komplettes WebService Beispiel

Orchester
Choreographie

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.

 

 

BPEL Beispiel

Vor- und Nachteile von vielen Komponenten

 

Vorteile:Nachteile:
einzelne Komponente ist trivial aufgebautaufwendiges Integrieren, wird sehr schnell komplex durch die vielen Komponenten
granulare Bestandteile lassen sich beliebig austauschendas Testen wird damit auch aufwendiger
sehr feine Programmierung von BPEL aus. Feine Adaption an eigene Bedürfnissedie 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.

 

Quelle: http://java.sun.com/developer/onlineTraining/rmi/RMI.html

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

StreamMessagePrimitive Datentypen z.B. int, double
MapMessageenthält eine Map mit key-value Paaren. key ist ein String, value ist ein primitiver Datentyp
TextMessageString
ObjectMessageserialsiertes Java Object (wird mit implements java.io.Serializable erreicht)
BytesMessageBytestream

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

Integrationsebenen

1. Ebene Betriebsystem, Dateien

 

ProtokolleFormat
FTPebXML
SMTPSWIFT
SMBEDIFACT
NFSOCI
HTTPOpenTRANS
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 ...

MethodennameBeschreibung
doViewGibt die Seite aus, in ihr steht HTML Code
processActionwird aufgerufen wenn der Benutzer einen Link klickt
doHelpwird aufgerufen wen das portlet sich im Help-Modus befindet

 zur Verfügung.

Es gibt weiter Variablen die den Zustand des Fensters beschreiben

WindowStateBeschreibung
MINIMIZEDdas Fenster ist gerade minimiert
MAXIMIZEDdas Fenster ist gerade maximiert
NORMALdas Fenster ist gerade im normal Zustand


Das Portlet selbst kann sich in verschiedenen Zuständen befinden.

PortletModeBeschreibung
HELPes wird die Methode doHelp() aufgerufen
VIEWes wird die Methode doView() aufgerufen
EDITPortlet befindet sich im Editier Modus

 

Beispielcode

Beispiel