|
Das Webanwendungsbeispiel 'Auktion' wurde mit der Software Development Platform (SDP)
Version 6
entwickelt. Im
Folgenden werden die wichtigsten Bausteine der Webanwendung 'Auktion' (siehe Abbildung)
beschrieben.

Die Webanwendung 'Auktion' beinhaltet viele Komponenten. An dieser Stelle ist kein
Lernprogramm zum Erstellen der gesamten Beispielanwendung vorgesehen. Die nachfolgenden
Erläuterungen sollen vielmehr wichtige Entwicklungs- und
Konstruktionsaspekte charakterisieren, die einen optimalen Einsatz verschiedener mit
der Workbench gelieferter Tools
garantieren. So erhalten Sie neue Einblicke, die Sie auf die Arbeit mit Ihren eigenen Webanwendungen
übertragen können.
Wie aus der vorangehenden Abbildung ersichtlich, wurde der Webinhalt parallel
zur Daten- und Geschäftslogik entwickelt. Webdesigner haben Darstellung und Layout
der Webseiten entwickelt, während die
Geschäftslogik für diese Seiten von Java- und Webservice-Entwicklern codiert wurde. In den
folgenden Abschnitten
wird beschrieben, wie diese Schlüsselkomponenten erstellt wurden und welchen Beitrag diese
Komponenten zur Webanwendung 'Auktion' leisten.
- Entity-Beans mit dem EJB-Zuordnungseditor zu Datenbanktabellen
zuordnen.
- Sitzungsfassade mit SDO-Datenobjekten über den Assistenten
'Session-Bean-Fassade' generieren.
- Layout der Website mit Web Site Designer definieren.
- Webseitenschablonen mit Page Designer erstellen.
- JavaServer Faces-Komponenten zu JSP-Seiten mit Page
Designer hinzufügen.
- Swing-Benutzeroberfläche mit dem Java Visual Editor erstellen.
- Webservice erstellen.
Enterprise JavaBeans (EJB) erleichtern Java-Anwendungen den Zugriff auf in
relationalen Datenbanken gespeicherte Daten. Entity-Beans können mit BMP
(bean-managed
persistence) oder CMP (container-managed persistence) entwickelt werden. CMP bietet eine größere
Flexibilität als BMP, da der EJB-Container bei Verwendung von CMP alle auf Datenbanken bezogenen
Aufrufe
wie von der Bean gesteuert übernimmt. Standardmäßig werden von den Tools
der Rational-Workbench CMP-Entity-Beans generiert. Eine CMP-Entity-Bean enthält keinen
SQL-Zugriffscode. Dadurch kann die Bean auf anderen J2EE-Servern, die andere
Datenbanken verwenden, implementiert werden, ohne dass dazu der Code neu programmiert
werden müsste.
Die Zuordnung von Objekten zu relationalen Datenbanken kann auf unterschiedliche Weise
erfolgen: mit dem Top-down-Verfahren, dem Bottom-up-Verfahren oder dem
Meet-in-the-Middle-Verfahren. Das
Top-down-Verfahren setzt bei den vorhandenen Objekten an, definiert dann, wie erforderlich, zunehmend
detailliertere Schichten und schließt mit dem Entwurf der Datenbank ab. Beim
Bottom-up-Verfahren wird ein vorhandenes Datenbankschema verwendet, um dann die
zugehörigen Schichten zu entwickeln, die die Objekte definieren. Beim Meet-in-the-Middle-Verfahren
werden eine vorhandene Datenbank und vorhandene Objekte verwendet und anschließend die
Zwischenschichten für die Zuordnung der Objekte zu den entsprechenden Datenbanktabellen
entwickelt.
Bei der Auktionsanwendung wurde das Bottom-up-Verfahren für die Entwicklung der
Entity-EJBs verwendet. Die Cloudscape-Datenbank war vorhanden und enthielt Tabellen, die
den erforderlichen EJBs entsprachen. Nach dem
Herstellen einer Verbindung zu der Datenbank mit Hilfe des
Assistenten für Datenbankverbindungen haben wir von einigen Ausnahmen abgesehen mit dem Assistenten
für EJB-zu-RDB-Zuordnung EJBs erstellt, die eine Zuordnung von mindestens einer
Tabelle aufweisen. Die folgende Abbildung veranschaulicht die bei der
Auktionsanwendung verwendeten EJBs und die zugehörigen Beziehungen.

Bei der Auktionsanwendung greift der ferne Client nicht direkt auf Entity-Beans
zu. Alle Anforderungen und Antworten werden von Sitzungsfassaden bearbeitet. Die
Beans
werden für den Zugriff auf die Back-End-Daten verwendet. Dies ermöglicht auf der Serverseite einen
gemeinsamen
Zugriff auf den persistenten Datenspeicher. Im folgenden Abschnitt
finden Sie nähere Erläuterungen zu Sitzungsfassaden.
Weitere Informationen zur Zuordnung von Entity-Beans können Sie dem
Hilfethema
Bottom-up-Zuordnung
generieren entnehmen.
Die Sitzungsfassade stellt die Schnittstelle zwischen dem Client und der
Back-End-Einrichtung
dar, die den Datenaustausch mit den SDO-Komponenten (Service Data Object) und letztendlich der
Datenbank ermöglicht. Eine Sitzungsfassade ist sinnvoll, wenn vom Client Anforderungen gesendet
werden, für
die mehrere Objekte ausgeführt werden müssen. Ein separates Senden dieser Anforderungen an
die einzelnen Objekte könnte Datenverkehr und Latenzzeit im Netz
beeinträchtigen. Die Sitzungsfassade verhält sich wie ein zwischengelagerter Puffer: Sie empfängt
eine allgemeine Anforderung vom Client und sendet die entsprechenden Anforderungen gezielt an die
erforderlichen Objekte. Dies ermöglicht eine Verringerung des Datenverkehrs und vereinfacht
die Entwicklung des Clients.
Nach dem Erstellen der Fassade können Sie die von der Fassade verwalteten EJBs
auswählen, indem Sie im Menü des Tools EJBs zuordnen
auswählen. Daraufhin
generiert die Fassade über die Entity-Beans die erforderlichen SDO-Komponenten. Die
Auktionsanwendung beinhaltet zwei Fassaden, die anhand der folgenden Gruppierungen
konzipiert wurden:
- Bei der Systemfassade handelt es sich um eine Schnittstelle zu den systemspezifischen
Back-End-EJBs, z. B. Kategorie und Rolle.
- Die Benutzerfassade ist für benutzerspezifische Daten wie Angebot, Artikel und
Rolle vorgesehen.
Durch die Gruppierung der EJBs und die Verwendung von zwei unterschiedlichen Fassaden
können Sie die Anwendung entlasten, da die Benutzer nur noch auf die
EJBs zugreifen, die sie benötigen. Die Entity-Beans, die die Funktionsweise der Website
selbst steuern, z. B. Kategorie, werden von der Systemfassade gesteuert.
Die EJBs, auf die von einer Fassade verwiesen wird, werden mit Hilfe
des Assistenten zum Erstellen
einer Session-Bean-Fassade einzeln nacheinander ausgewählt (siehe Abbildung). Auf ein EJB können
falls erforderlich auch mehrere Fassaden verweisen. Dies ist in der Auktionsanwendung jedoch nicht
der Fall.

Sie können weitere Funktionen hinzufügen, indem Sie Methoden zu den Fassaden
hinzufügen. Die Benutzerfassade umfasst z. B. eine Methode, die eine Liste aller Benutzer
zurückgibt, und eine andere Methode, die eine Liste der aktiven Benutzer zurückgibt. Mit diesen
Methoden als Beispiel könnte bei Bedarf eine weitere Methode zur Benutzerfassade
hinzugefügt
werden, die eine Liste der Benutzer zurückgibt, die als inaktiv markiert sind.
Weitere Informationen zu Sitzungsfassaden können Sie der Veröffentlichung "Design Patterns: Session
Facade" unter java.sun.com entnehmen.
Die Navigationssicht des Tools 'Web Site Designer' bietet eine grafische Übersicht zum
Aufbau der Website. In dieser Sicht werden die einzelnen Seiten und die hierarchische Ordnung dieser
Seiten angezeigt. Dies erleichtert Ihnen die Verwaltung von Layout und Organisation
der Seiten innerhalb der Website. Wenn Sie Seiten
per Drag-and-drop im Editor verschieben, werden die
Navigationssteuerelemente in den Seitenschablonen automatisch aktualisiert. Sie können beispielsweise
bei der nachfolgend abgebildeten Navigationsstruktur für die
Auktionsanwendung die Reihenfolge der Navigationsregisterkarten ändern, indem
Sie die Seite Verkaufen (Sell) vor die Seite 'Durchsuchen' (Browse) setzen. Web Site Designer
generiert daraufhin automatisch bei den Registerkarten auf allen Seiten die richtige
Reihenfolge. Diese
Änderungen können Sie auch in der aktiven Anwendung sichtbar machen, indem Sie alle Seiten, die
die Navigationsschablone verwenden, erneut speichern.

Zusätzlich zu der hier beschriebenen Navigationssicht stellt
Web Site Designer auch eine Detailsicht bereit, die die weiteren
Seitenelemente in einer übersichtlichen, editierbaren Tabelle präsentiert (siehe Abbildung). Diese
Tabelle vereinfacht das Aktualisieren von Seiteneigenschaften wie Titel, Autor und
Navigationskennsatz.
Weitere Informationen zum Verwalten des Website-Layouts mit Web Site Designer können Sie dem
Abschnitt
Website-Struktur
erstellen der Onlinehilfe entnehmen.
Die Workbench beinhaltet ein grafisches Entwicklungsprogramm für das Entwickeln von
Seitenschablonen und Webseiten.
Seitenschablonen stellen wiederverwendbare Teile von Inhaltscode dar, mit denen bei den
verschiedenen Bereichen einer Website eine einheitliche Darstellung bzw. Funktionsweise
erzielt werden kann. Um diese Einheitlichkeit zu erreichen, müssen die Webseiten lediglich auf die
entsprechenden Schablonen verweisen. Vom Einsatz der Schablonen profitieren die Benutzer,
die in der Website problemlos navigieren können, ebenso wie die Entwickler, die nur den
für die
jeweiligen Seiten spezifischen Code programmieren müssen.
Seitenschablonen ermöglichen darüber hinaus eine einfache Verwaltung des
Website-Inhalts. Änderungen an einer Schablonendatei werden automatisch auf allen Seiten, die
auf die betreffende Schablone verweisen, übernommen. Dazu ein Beispiel: Die Schablone
'maintemplate.jtpl' der Webanwendung 'Auktion' liefert das allgemeine Layout der Auktionsseiten. Zu
dieser Schablone können Sie über die Palette von Page Designer Webseitenelemente
hinzufügen, indem Sie die betreffenden Elemente per Drag-and-drop auf die Webseite
verschieben. Der erforderliche HTML-Code wird automatisch generiert. Die Auktionsschablone kann
auf diese Weise beispielsweise problemlos so geändert werden, dass sie das
aktuelle Datum mit Uhrzeit in die Fußzeile aufnimmt.
Die Schlüsselelemente der Auktionsschablone sind die
Steuerelemente für die Navigation. Die Navigationsleiste der Webanwendung 'Auktion' sieht
zwei
Navigationsvarianten vor:
- Navigationsregisterkarten: Zeigen Bereiche der Website an.
- Navigationspfade ("Bread Crumbs"): Zeigen dem Benutzer durch entsprechenden
Text an, an welchem Punkt der Website er sich befindet (z. B. Home
> Durchsuchen > Liste).

Durch das Einfügen eines Tags, das die entsprechende
Schablone aufruft, können Sie alle Seiten der Website mit derselben Navigationsleiste
ausrüsten, ohne die Navigation dazu auf allen Seiten fest codieren zu müssen. Die Verweise zu der
Schablone können Sie mit dem Editor für Schablonenzuordnung auf den Webseiten einfügen.
Mit dynamischen Schablonen eröffnen sich in diesem Bereich weitere Perspektiven. Sie
können beispielsweise dafür sorgen, dass sich der Inhalt von Webseiten je nach Rolle oder
Zugriffsmöglichkeiten der Benutzer ändert oder dass benutzerspezifische
Informationen auf einer Webseite eingefügt werden. Die Auktionsanwendung stellt
mit Hilfe dynamischer Schablonen
sicher, dass die Verwaltungslinks der Navigationsleiste nur den als Administratoren angemeldeten
Benutzer angezeigt werden und dass statt der Registerkarte "Anmeldung" nach
der Anmeldung
eines Benutzers die Registerkarte "Abmeldung" angezeigt wird.
Weitere Informationen zum Erstellen von Webseitenschablonen können Sie dem Hilfethema
Seitenschablone
erstellen entnehmen.
Bei JSF (JavaServer Faces) handelt es sich um eine Technologie, die das Erstellen von
Benutzeroberflächen für dynamische, auf einem Anwendungsserver ausgeführte Webanwendungen
erleichtert. JSF ist eine auf offenen Standards basierende Sprache und verwendet eine
JSF-Standard-Tagbibliothek. Die Tags werden in den HTML-Code eingefügt, um dynamische Webseiten
zu erstellen.
Das JSF-Framework verwaltet die Benutzeroberflächenstatus
den Serveranforderungen entsprechend und bietet ein einfaches Entwicklungsmodell für die
Handhabung von serverseitigen Ereignissen, die vom Client aktiviert werden. Ein JSF kann
beispielsweise, ähnlich dem Klicken auf eine Schaltfläche, ein unterschiedliches Verhalten bei
unterschiedlichen
Ereignissen annehmen. Page Designer verfügt über integrierte, auf einer Palette präsentierte
Funktionen, die Sie
auf eine Webseite ziehen können. Diese Drag-and-drop-Funktionen erleichtern das Verwenden von JSF-,
HTML- und anderen Elementen für Scripterstellung. Dies ist nicht nur für die Steuerung der
Basisfunktionen eines Feldes, z. B. den Werttyp eines Textfeldes (Integer, alphanumerisch),
hilfreich, sondern ermöglicht auch das Definieren von Regeln zur Gültigkeitsprüfung. In
Page Designer können die JSF-Steuerelemente an die den einzelnen Seiten zugeordneten SDO-Daten
gebunden werden.
Die Palette von Page Designer kann zum Hinzufügen zusätzlicher Funktionen zu
JSF-Seiten
verwendet werden. So kann beispielsweise auf der Seite mit den Artikeldetails die Schaltfläche
"Jetzt kaufen" hinzugefügt werden, damit Benutzer den betreffenden Artikel
gegebenenfalls zu dem vom Verkäufer für den Artikel vorgesehenen Preis kaufen können.
Die folgende Abbildung zeigt die JSF-Steuerelemente für die Seite mit den Auktionsdetails. Wie in
der unteren rechten Ecke der Abbildung zu sehen, ist das
inputText-Feld für neue Gebote über das Markierungsfeld Nur ganze Zahlen (Integer
only) so eingerichtet, dass nur ganze Zahlen akzeptiert werden. Dem inputText-Feld sind
darüber hinaus Einstellungen für Gültigkeitsprüfung, Funktionsweise und
Zugriffsmöglichkeiten zugewiesen, die über
die Registerkarten (unter h:inputText) in der unteren linken Ecke der Abbildung definiert sind. Über die Registerkarte
für Gültigkeitsprüfung können bestimmte Prüfregeln mit Java definiert werden. Eine gültige
Eingabe für das inputText-Feld für ein neues Gebot ist beispielsweise eine ganze Zahl, die
ungleich null ist, größer ist als das Startgebot und das aktuelle Gebot mindestens um den Wert 1
übersteigt.

Für das inputText-Feld für neue Gebote (newbid),
das auf der Seite für Artikeldetails der Auktionsanwendung angezeigt wird, wurde der nachfolgende
Code generiert:
<h:inputText styleClass="inputText" id="newbid" required="true" size="14">
<f:convertNumber integerOnly="true" />
<f:validateLongRange minimum="#{pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean==null ?
pc_Itemdetail.userFacadeLocalGetBidItemSDOByKeyResultBean.startingbid :
pc_Itemdetail.userFacadeLocalGetFindHighestBidResultBean.currentbid+1}">
</f:validateLongRange>
</h:inputText>
Weitere Informationen zum Entwickeln von
Faces-JSP-Dateien können Sie dem Hilfethema
JavaServer
Faces entnehmen.
Die Auktionsanwendung beinhaltet neben den Webseiten auch einen
Java-Swing-Client, der Administratoren die Verwaltung von Benutzerinformationen, z. B. Namen und
Kennwörtern, ermöglicht. Durch die Verwendung eines Swing-Clients kann die gesamte Verarbeitung
auf der Clientmaschine erfolgen und die bei Webanwendungen übliche Wartezeit somit reduziert
werden. Der Benutzerverwaltungsclient verfügt über eine Liste mit allen Benutzern der Anwendung. Der
Administrator kann auf die Benutzerdaten zugreifen und benutzerspezifische Attribute
verwalten, ohne dabei warten zu müssen, bis die betreffenden Webseiten erneut geladen werden. Darüber
hinaus sind die von einem Swing-Client bereitgestellten Oberflächen übersichtlicher und
anwendungsorientierter.
Die Swing-Clientanwendung wurde mit dem Java Visual Editor wie unten angegeben
entwickelt. Mit dem Visual Editor können Sie Ihre Anwendung grafisch orientiert entwickeln, während
der Code automatisch generiert wird. Dadurch entfällt die Notwendigkeit, komplizierten
Swing-Code manuell zu programmieren.
Die vorangehende Abbildung zeigt die Benutzerverwaltungsanwendung im Java Visual
Editor. Rechts sehen Sie die Sitzungsfassaden. Diese Fassaden verwenden SDO-Objekte für den Zugriff
auf die Geschäftslogik. Die durchgezogenen Linien, die die Fassaden mit der
Benutzeroberfläche verbinden, sind bestimmten Ereignissen der Benutzeroberfläche
zugeordnet. Die gestrichelten Linien geben die an die SDO-Objekte übergebenen Parameter und die von den
SDO-Objekten zurückgegebenen Werte an. Diese grafische orientierte Anwendungsentwicklung
erfordert weniger Zeit als das Programmieren von kompliziertem Java-Swing-Code und
vereinfacht Änderungen an der Benutzeroberfläche.
Die Benutzeroberfläche für die Benutzerverwaltung wurde direkt im Java Visual Editor
erstellt. Neue Swing-Komponenten können auf der Palette ausgewählt und zur Anwendung hinzugefügt
werden. Alle Komponenten können mit den bereitgestellten Tools, Assistenten, der Feedback-Funktion
und den Eigenschaften der Eigenschaftsseite so angepasst werden, bis die gewünschte Darstellung
und Funktionsweise erzielt ist. Darüber hinaus können alle Komponenten wie Tabellen und Textfelder,
die Inhalte anzeigen können, so gebunden werden, dass sie die von einer Datenquelle
bereitgestellten Daten anzeigen.
Nach der Entwicklung muss die Benutzerverwaltungsanwendung auf der
Website implementiert
werden. Dazu wird die gesamte Anwendung in eine EAR-Datei gepackt und in die Verzeichnisstruktur
der Website gestellt. Es werden weitere Scripts und HTML-Ressourcen erstellt, um die Anwendung
über WebStart, wie in der Dokumentation zu
WebSphere Application Client (im Lieferumfang von
WebSphere Application Server enthalten) angegeben, ordnungsgemäß zu implementieren. Ressourcen, die
auf der Clientseite ausgeführt werden, werden aus Sicherheitsgründen mit einem Zertifikat versehen. Sobald
alle Vorbereitungen, wie in der Dokumentation beschrieben, getroffen sind,
kann die Anwendung
auf einem Client, der lediglich über einen Browser und Java
WebStart verfügen muss, implementiert werden.
Nach dem Erstellen der Komponenten der Webanwendung wird die Webanwendung
'Auktion' implementiert und auf einem Anwendungsserver ausgeführt. In der Beispielsammlung der
Webanwendung 'Auktion'
sind weitere Komponenten verfügbar.
Weitere Informationen können Sie dem Hilfethema
Java
mit dem Visual Editor bearbeiten entnehmen.
Webservice erstellen
Der Webservice wurde parallel zur Webanwendung erstellt, da dieser Service nicht
von der Webanwendung abhängig ist. Der Webservice stellt eine andere Möglichkeit zum
Zugriff auf die Geschäftslogik dar und bietet nicht die Funktionalität der Webanwendung. Im
Abschnitt Webservice finden Sie nähere Informationen zu diesem Bestandteil der
Auktionsanwendung. |