Format von XML-Konfigurationsdateien
Alle hier beschriebenen Services lassen sich über XML-Dateien konfigurieren, die einem bestimmten Format folgen. Dieses soll im Folgenden näher beschrieben werden.
Grundlage der XML-Dateien ist die Datei configure_1_3.dtd, die sich im Verzeichnis ./etc/dtd des Integration Servers befindet. Die Besonderheit dieser Art XML ist, dass die XML-Einträge zur Laufzeit in Methodenaufrufe der entsprechenden Klasse umgewandelt werden.
Der Befehlsumfang der XML-Konfiguration ist relativ klein und sieht folgendermaßen aus.
Befehl |
Bedeutung |
Set |
Ruft eine Set-Methode der derzeit aktuellen Instanz auf. |
Put |
Schreibt ein Mapping in die aktuelle Map. |
Call |
Ruft eine Methode der derzeit aktuellen Instanz auf. |
New |
Erzeugt eine neue Instanz einer Klasse. |
Get |
Ruft eine Get-Methode der derzeit aktuellen Instanz auf. |
XML-Dateirumpf
<!DOCTYPE Configure PUBLIC
"-//EBD Integration//DTD Configure 1.0//EN"
"
http://www.lobster.de/dtd/configure_1_1.dtd
">
<
Configure
class
=
"[Name der zu konfigurierenden Klasse]"
>
[Befehle fuer die Konfiguration]
</
Configure
>
Beim Klassennamen handelt es sich um den voll qualifizierten Klassennamen, also inklusive des Packages, in dem sich die Klasse befindet.
Set
Mittels des Befehls Set wird eine einzelne Set-Methode der aktuellen Instanz aufgerufen. Als Argument wird der Wert angegeben, der gesetzt werden soll. Da Set-Methoden laut Definition nur ein Argument besitzen dürfen, wird hier auf das Arg-Tag verzichtet. Der zu setzende Wert wird als Value des XML-Tags übergeben.
Hat eine Klasse beispielsweise die Methode
public void setName(String val); |
definiert, sähe der XML-Aufruf folgendermaßen aus.
<
Set
name
=
"name"
>Wert</
Set
>
Wie man sieht, ist als Wert für das Attribut name, der Methodenname ohne das vorangehende set zu verwenden, wobei der erste Buchstabe nach dem set im Methodenname immer klein zu
schreiben ist.
Existieren mehrere Set-Methoden mit gleichem Namen und verschiedenem Typ oder ist der Typ der Set-Methode anders als String, sollte immer der Typ des übergebenen Wertes explizit angegeben werden.
Dies erfolgt über das Attribut type und kann folgende Werte annehmen.
int |
Bezeichnet einen Wert vom primitiven Typ int. |
boolean |
Bezeichnet einen Wert vom primitiven Typ boolean. |
long |
Bezeichnet einen Wert vom primitiven Typ long. |
float |
Bezeichnet einen Wert vom primitiven Typ float. |
double |
Bezeichnet einen Wert vom primitiven Typ double. |
short |
Bezeichnet einen Wert vom primitiven Typ short. |
Hat eine Klasse beispielsweise die Methode
public void setPort(int val); |
definiert, sähe der XML-Aufruf folgendermaßen aus.
<
Set
name
=
"port"
type
=
"int"
>25</
Set
>
Put
Die Methode Put erwartet, dass die aktuelle Instanz eine Methode
public void put(Object key, Object val); |
besitzt. Der Key wird bei diesem Aufruf über das Attribut name und der zu setzende Wert als Value des XML-Tags gesetzt. Der XML-Aufruf sähe bei der oben gezeigten Methode daher folgendermaßen aus.
<
Put
name
=
"key"
>Value</
Set
>
Da die Methode selbst nur Instanzen von Objekten und keine Primitivtypen akzeptiert, ist eine Angabe des Attributs type in diesem Zusammenhang nicht möglich.
Call
Über den Befehl Call können beliebige Methoden mit einer beliebigen Anzahl von Parametern aufgerufen werden. Beispielsweise würde der Methodenaufruf
public void put(Object key, Object value); |
innerhalb der XML-Konfigurationsdatei folgendermaßen aussehen.
<
Call
name
=
"put"
>
<
Arg
>key</
Arg
>
<
Arg
>value</
Arg
>
</
Call
>
Haben einzelne Parameter einen primitiven Typen, ist, wie für Set beschrieben, dieser über das Attribut type bei dem jeweiligen Argument entsprechend festzulegen.
New
Über den Befehl New kann eine neue Instanz der angegebenen Klasse erzeugt werden. Soll ein anderer Konstruktor als der Standardkonstruktor verwendet werden, sind die entsprechenden Parameter als Arg-Elemente zu übergeben. Anhand der Reihenfolge und der Typen der Argumente wird automatisch der dazu passende Konstruktor für die Initialisierung herangezogen.
Werden weitere Befehle innerhalb des New-Bereichs eingefügt, beziehen diese sich auf die neu erzeugte Instanz.
Soll beispielsweise eine ArrayList mit einer Initialgröße von 10 Elementen erzeugt und dieser zwei Texte hinzugefügt werden, würde dies mit folgendem XML-Fragment passieren.
<
New
class
=
"java.util.ArrayList"
>
<
Arg
type
=
"int"
>10</
Arg
>
<
Call
name
=
"add"
>
<
Arg
>Text1</
Arg
>
</
Call
>
<
Call
name
=
"add"
>
<
Arg
>Text2</
Arg
>
</
Call
>
</
New
>
Dieses XML-Fragment würde üblicherweise seinen Platz innerhalb eines Arguments für einen Set-Befehl finden, der eine Methode aufruft, die wiederum als Parameter eine Liste erwartet.
Get
Der Befehl Get ruft eine Get-Methode der aktuellen Instanz auf. Werden weitere Befehle innerhalb des Get-Befehls hinzugefügt, beziehen sich diese auf das zurückgegebene Objekt. Der Name der Methode wird im XML äquivalent zum Set-Befehl gebildet, d. h. das get wird weggelassen und der erste Buchstabe des Rests zu einem Kleinbuchstaben umgewandelt.
Hat man beispielsweise innerhalb einer verlinkten Liste Elemente, die ebenfalls Listen darstellen, würde das Holen des ersten Elements und das Hinzufügen eines Textes zu diesem Element über folgendes XML-Fragment erfolgen.
<
Get
name
=
"first"
>
<
Call
name
=
"add"
>
<
Arg
>Neuer Text</
Arg
>
</
Call
>
</
Get
>
Weitere Befehle
Neben den bereits erwähnten Befehlen sind weitere Tags möglich, die hier kurz erwähnt werden sollen und vor allem innerhalb der Angabe von Argumenten Verwendung finden.
Array |
Wird verwendet, um ein Array vom angegebenen Typ zu übergeben. Die einzelnen Elemente werden dabei über das Tag Item übergeben. Der Typ des Arrays wird über das Attribut type gesetzt, wobei hier bei Arrays von Objekten der voll qualifizierte Klassenname angegeben werden muss. |
SystemProperty |
Ruft die Methode System.getProperty auf. Das zu lesende Property wird über das Attribut name gesetzt, ein eventuell zu verwendender Defaultwert über das Attribut default. |