Textauszug aus dem Heft 03.02 des Javamagazins.
Im Titelthema erfolgt die Vorstellung von Cameleon OSP im Anschluss an
Webmacro und Velocity wie folgt:
. . .
Cameleon - die Alternative |
Im letzten Abschnitt dieses Beitrags werfen wir nun einen Blick auf
das Web-Framework Cameleon [5] www.must.de/cameleon.html. Viele
Leser,
denen Cameleon noch nicht bekannt ist, werden sicherlich einwenden,
warum
ein weiteres Framework betrachtet werden muss, wenn bereits ausreichend
bekannte und gute Alternativen bestehen. Der Ansatz, der von Cameleon
verfolgt
wird, ist durchaus als außergewöhnlich zu betrachten: Es ist
vorgesehen, Applikationenen mittels Swing, Servlets oder JSP auf der
Grundalge
von Data-Objects zu bilden. Hierbei wird besonders Wert darauf gelegt,
Datenbank-Applikationen weitgehend zu unterstützen.
Der besondere Vorteil liegt bei Cameleon darin, dass auf der
Grundlage
von Datenbanken, die durch Data-Objects abgebildet werden, die
Applikation
als Swing-Anwendung, JSP oder Servlet aufgebaut werden kann. Somit
besitzen
verschiedene Darstellungen die gleiche Datengrundlage.
DataStructures |
Data Structures bilden unter Cameleon die Grundlage für
Applikationen,
egal welchen Typs. Durch Data Structures (Data Objects) werden
Datenbank-Tabellen
durch eine Klasse abgebildet und können somit einfach bearbeitet
werden.
In Listing 1 sehen Sie die Datenstruktur der
Cameleon-Beispielapplikation
Cooblook. Auf der Grundlage einer solchen Datenstruktur können nun
User-Interfaces mit Hilfe von Swing, JSP oder Servlets gestaltet
werden.
Weitere Informationen hierzu sind den beiliegenden Hilfe Dokumenten zu
finden.
Listing 1 |
//elementary!
/* package de.jugs.cookbook; import de.must.dataobj.*; /** public static final String tableName = "Cookbook"; public static final AbstractAttribute cookNI = new
NumericAttribute("Rezeptnummer
intern", "RezeptNI"); public static final AbstractAttribute[] attributes
= { public static final Index[] indices = { public DoCookbook(DataObjectConstructionDetails
dataObjectConstructionDetails)
{ public String getTableName() { public AbstractAttribute[] getAttributes() { public Index[] getIndices() { } |
Servlet |
Um den Vorgang der Servlet-Programmierung mit Cameleon noch etwas genauer zu erläutern, werden wir in diesem Abschnitt die grundlegenden Schritte anhand des beiliegenden Cookbook-Beispiels nachvollziehen.
Die gesamte Applikation basiert auf einem zentralen Servlet, zu
finden
unter dem Package de.jugs.cookbook.Main. Die Servlet-Klasse muss
jeweils
von de.must.markup.MainStd abgeleitet werden. Das Servlet ist
zunächst
dafür verantwortlich, dass Zugriff auf globale Eigenschaften
gewährt
wird und eine Session angelegt wird. Listing 2 zeigt die betreffende
Klasse
am Beispiel der Cookbook-Applikation:
Listing 2 |
//elementary!
/* package de.jugs.cookbook; import de.must.middle.GlobalStd; /** public Main() { protected GlobalStd getGlobal() { protected GlobalStd getGlobal() { protected Class getSessionClass() { } |
Alle speziellen Einstellungen werden anschließend in einem getrennten Session-Objekt hinterlegt. Hierzu wird eine Klasse von de.must.markup.SesssionStd abgeleitet Die Servet-Implementierung des Cookbbok-Beispiels ist unter de.jugs.cookbook.Session abgelegt.
Das dritte wichtige Element im Framework ist die Container-Klasse, welche Input/Output-Felder an Datenbanktabellen anbindet. Die Container-Klasse des Cookbook-Beispiels ist mit dem Namen Cookbook Administration bezeichnet und wird von DataPropertyAdministration abgeleitet. Wie zu erwarten, befindet sich die Implementierung der Beispielklasse unter dem Package de.jugs.cookbook.CookbookAdministration Hier ein kleiner Ausschnitt der Klasse zur Initialisierung eines Text-Fields:
createTextField(sessionData.getResourceString
("TEXT_RECIPE_TITLE"), "RezeptBez");
Zugriff auf das entsprechende Session-Objekt wird durch Übergabe an den Konstruktor der Klasse realisiert:
public CookbookAdministration(SessionData sessionData)
{
...
}
Um die verschiedenen Bestandteile der Applikation nun in ein Gesamtschema einzureihen werfen Sie einen Blick auf Abbildung 5:
Die Übersicht verdeutlicht noch einmal anschaulich, welche
Beziehungen
zwischen den einzelnen Komponenten bestehen. Das Servlet „Main“ ist der
einzige Bestandteil der Applikation, auf den ein Benutzer später
von
„außen“ zugreifen kann. Die wichtigste Verwaltungsarbeit
übernimmt
das Session-Objekt. Hier werden zentrale Einstellungen für den
Layouter
hinterlegt. Um die Darstellung / Präsentation vorzunehmen, werden
Objekte innerhalb eines Containers gesammelt (Frame-like Container).
Zur
Verfügung stehen hierbei die Objekte TextField, TextArea und
ComboBox.
Die HTML-Ausgabe wird anschließend automatisch vom Layouter
generiert
(de.must.markup.HostLayout).
Listing 3 |
//elementary!
/* package de.jugs.cookbook; import de.must.markup.*; /** private Layout layout; public Session() { protected void build(SessionData sessionData) {
protected GlobalStd getGlobal() { } |
. . .
Autor des Artikels: Sebastian Eschweiler