Die Klasse DLESessionConfig

Alle Konfigurationsparameter der DLE, Session- und Servicebezogen, befinden sich in einer Instanz der Klasse DLESessionConfig. Bei der Initialisierung der DLE wird diese Instanz der DLE üblicherweise übergeben. Um eine Konfigurationsinstanz zu erstellen, existieren grundsätzlich mehrere Möglichkeiten. Sie kann zum Beispiel programmatisch erstellt werden, aus einer XML Definition ausgelesen werden, oder, da die Klasse DLESessionConfig serialisierbar ist, aus einem JNDI konformen Verzeichnisdienst (zum Beispiel LDAP) gelesen werden.

DLESessionConfig programmatisch erstellen

Um die Konfiguration programmatisch zu erstellen, wird zunächst eine neue Instanz der Klasse erstellt. Zu dieser Instanz können dann Sessioneinstellungen, Dienste und Diensteinstellungen hinzugefügt werden.

DLESessionConfig cfg = new DLESessionConfig();
cfg.setProperty(“ListOfPackages“, “BASE;DEMO“);
cfg.addService(
“PackageService“,
“at.visionflow.dle.engine.pack.DLEPackageService“);
cfg.addService(
“defaultConnector“,
“at.visionflow.dle.engine.connectors.DLEJDBCConnector“);
cfg.setServiceProperty(
“defaultConnector“,
“JDBCURL“,
“jdbc:db2:DB2INST“);

Die Klasse erstellt keine Standardvorgaben, es müssen also alle benötigten Dienste und Parameter korrekt angegeben werden.
Mit der Methode setProperty(String propertyName, Object value) können Sessioneinstellungen vorgenommen werden.
Die Methode addService(String serviceName, String className) fügt einen neuen Dienst zur Konfiguration hinzu. Die Klasse, die den Dienst implementiert wird durch die DLE über den angegebenen Klassennamen instanziert, sobald das erste Mal auf den Service zugegriffen wird. Werden eigene Dienstimplementierungen verwendet, ist darauf zu achten, daß die Klasse im Klassenpfad der DLE ist. Die einzelnen Dienste sind über spezielle Interfaces definiert, die diese Implementierungsklassen implementieren müssen. Welcher Dienst welches Interface benötigt, ist in der entsprechenden Dienstdokumentation nachzulesen.
Die Methode setServiceProperty(String serviceName, String propertyName, Object value) wird verwendet um für einen bereits hinzugefügten Dienst weitere Einstellungen zu setzen. Welche Einstellungen für welchen Dienst möglich sind, ist auch in der entsprechenden Dienstdokumentation nachzulesen. Die Methode wirft eine IllegalArgumentException, falls der Dienst noch nicht hinzugefügt wurde.

Konfiguration aus einer XML Definition erstellen

Die Klasse DLEXMLConfigurator liest eine XML Definition und erstellt aus ihr eine neue Instanz einer DLESessionConfig.
Angegeben werden kann der Dateiname der Konfigurationsdatei oder eine URL, die auf eine gültige Konfigurationsdatei verweist.

DLEXMLConfigurator configurator = new DLEXMLConfigurator();
// Konfiguration über Dateinamen lesen
DLESessionConfig cfg =
configurator.config(“etc/SessionConfig.xml“);
// Gleiche Funktionalität, aber über eine URL
URL url = new URL(“file:etc/SessionConfig.xml“);
DLESessionConfig cfg =
configurator.config(url);
// Konfiguration über einen HTTP Server laden
url = new URL(“http://host:7001/Config.xml“);
DLESessionConfig cfg =
configurator.config(url);

Syntax der XML Definition

Die XML Definition gliedert sich in zwei Hauptbereiche: Die Konfiguration von Sessioneinstellungen und die Konfiguration der Dienste.
Der Rahmen der Definition baut sich dabei wie folgt auf:

<?xml version=“1.0“?>
<DLEConfig>
<Properties>
<!—Sessioneinstellungen 
</Properties>
<Services>
<!—Dienste 
</Services>
</DLEConfig>

Unter dem Properties Block können die einzelnen Sessioneinstellungen angegeben werden. Hier können auch eigene Einstellungen oder Eigenschaften definiert werden, die dann später innerhalb der DLE abgefragt werden können.

<?xml version=“1.0“?>
<DLEConfig>
<Properties>
<!—Sessioneinstellungen 
<Property name=“SmtpHost“ value=“mail.my.org“/>
<Property name=“BrickCallStack“ value=“150“/>
<Property name=“CustomProperty“ value=“anyValue“/>
</Properties>
<Services>
<!—Dienste 
</Services>
</DLEConfig>

Welche Sessioneinstellungen von der DLE verwendet werden, ist weiter unten beschrieben.
In dem Services Block werden die einzelnen Dienste konfiguriert. Dazu muß für jeden Dienst zumindest ein Dienstname und eine Implementationsklasse angegeben werden. Optional können zu einem Dienst, genauso wie für die Session, Einstellungen spezifiziert werden. Welche Einstellungen welcher Dienst verwendet, ist in der entsprechenden Dienstbeschreibung nachzulesen. Neben den Einstellungen, die ein Dienst verwendet, können auch eigene Einstellungen hinzugefügt werden, die innerhalb der DLE abgefragt werden können. Diese werden in einem Properties Block, genauso wie die Sessioneinstellungen pro Dienst angegeben.

<?xml version=“1.0“?>
<DLEConfig>
<Properties>
<!—Sessioneinstellungen 
<Property name=“SmtpHost“ value=“mail.my.org“/>
<Property name=“BrickCallStack“ value=“150“/>
<Property name=“CustomProperty“ value=“anyValue“/>
</Properties>
<Services>
<!—Dienste 
<Service name=“PackageService“ class=“at.visionflow.dle.engine.pack.DLEPackgeService/>
<Service name=“MetadataService“ class=“at.visionflow.dle.engine.metadata.DLELocalMetaDataService>
<Properties>
<Property name=“Shared“ value=“True“/>
</Properties>
</Service>
<Service name=“defaultConnector“ class=“at.visionflow.dle.engine.connectors.DLEJDBCConnector>
<Properties>
<Property name=“JDBCURL“ value=“jdbc:db2:TESTDB“/>
<Property name=“JDBCUser“ value=“scott“/>
<Property name=“JDBCPassword“ value=“tiger“/>
</Properties>
</Service>
</Services>
</DLEConfig>

Konfiguration über JNDI Verzeichnisdienst lesen

Da die Klasse DLESessionConfig serialisierbar ist, kann diese auch zentral in einem Verzeichnisdienst abgelegt und aus diesem wieder ausgelesen werden.
Folgendes Beispiel speichert eine Konfiguration in einem Websphere 4 Namensverzeichnis.

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
// Context erstellen
Properties p = System.getProperties();
p.put(
“javax.rmi.CORBA.UtilClass“,
“com.ibm.rmi.javax.rmi.CORBA.Util“);
p.put(
Context.INITIAL_CONTEXT_FACTORY,
“com.ibm.websphere.naming.WsnInitialContextFactory“);
p.put(
Context.PROVIDER_URL,
“iiop://appserver.my.domain:900“);
Context context = new InitialContext(p);
//Konfiguration erstellen
DLESessionConfig cfg = new DLESessionConfig();
//Konfiguration speichern
context.bind(“DLEConfig“, cfg);

Über den Context kann man dann eine einmal gespeicherte Konfiguration von jedem Client aus laden:

DLESessionConfig cfg = (DLESessionConfig) context.lookup(“DLEConfig“);