 |
Zurück
Weiter
Implementierung unseres Frameworks:
Speicherung in der Session
Um unsere Objektreferenzen in der Session ("Sitzung") zu
speichern, müssen wir die Objektreferenzen in Zeichenketten
umwandeln und dann in einem GXVAL-Objekt speichern. Dieses
wird anschließend in einer von uns modifizierten Session
gespeichert, die, wie schon zuvor beschrieben, nur
GXVAL-Objekte aufnehmen kann.
Um dies zu bewerkstelligen, erzeugen wir eine neue Klasse namens
SessionStorage, die die Klasse Session2 beerbt (wird
von NAS zur Verfügung gestellt). Dabei fügen wir die
Methoden addValue, setValue, getValue und
removeValue hinzu. Diese Methoden akzeptieren Objekte jeder
Klasse als Ein- und Ausgabeparameter, und erfordern daher
zusätzliche Konvertierungsmethoden. Diese heißen
convert und reconvert und haben die Aufgabe, ein Objekt
beliebigen Typs in ein GXVAL Objekt zu konvertieren und
umgekehrt. Da wir an dieser Stelle nicht wissen können, von
welchem Typ die in der Session zu speichernden Objekte
tatsächlich sind, sind die Konvertierungsmethoden abstrakt und
müssen von einer Unterklasse implementiert werden.
convert und reconvert "werfen" Exceptions, um
Ausnahmebehandlungen zu ermöglichen. In
Listing 3 wird die Klasse
SessionStorage noch einmal erklärt. Beachten Sie hierbei
bitte, daß der Code in diesem Listing verändert wurde, um
die Auflistung zu verkürzen und trotzdem den logischen
Fluß zu bewahren.
|
Listing
|
Erklärung
|
package StorageAndParameters;
import com.kivasoft.*;
import com.kivasoft.session.*;
import com.kivasoft.types.*;
abstract public class SessionStorage extends Session2
{
/*.
* Function:
* -manages GXVAL objects in the session object
* -provides methods to add, set, get and remove the values
*/
public SessionStorage(ISession2 session)
{
super(session);
}
|
SessionStorage ist eine Unterklasse der
Session2 Klasse. Sie stellt ein IValList
Objekt zur Verfügung, das GXVAL Objekte
speichern kann. Wir definieren die Methoden addValue
(Wertepaar hinzufügen), setValue (setzen),
getValue (bekommen) und removeValue
(löschen), um den Speicher zu manipulieren.
SessionStorage ist eine abstrakte Klasse, da die
Methoden convert und reconvert abstrakt sind.
|
public String createMyOwnVariable()
{
/* Precondition:
* - anObject is not null
* Postcondition:
* -this session object contains one more pair of
* (Variable name/GXVAL object)
* Returns:
* - a unique variable name
*/
return new VariableAndParameter().createVariable();
}
|
createMyOwnVariable ist eine Factory-Methode, die
von setValue aufgerufen wird, um eine
Variablenkennung zurückzugeben. Sie muß von der
Unterklasse überschrieben werden.
|
abstract public GXVAL convert( Object anObject)
throws Exception;
/* Precondition:
* - anObject is not null
* Returns:
* - a GXVAL object
* Exception:
* - the overwriting method may throw an exception */
|
convert muß von der Unterklasse definiert
werden. Es implementiert die Konvertierung eines Objektes in
ein GXVAL Objekt. Weil die überschreibende
Methode eine Ausnahme "werfen" könnte, müssen wir
dies hier spezifizieren.
|
abstract public Object reconvert( GXVAL aValue)
throws Exception;
|
reconvert muß von einer Unterklasse
definiert werden. Es implementiert die Konvertierung eines
GXVAL Objektes in ein Objekt.
|
public String addValue( Object anObject)
throws Exception {...}
|
addValue nimmt ein Objekt, erzeugt eine Variable
und speichert das Paar im Session-Objekt durch Aufruf
von setValue
|
public boolean setValue( String keyString, Object
anObject) throws Exception {
boolean result; [...]
// convert the object
GXVAL sOts = convert( anObject);
// store the (key/GXVAL object) pair in this session
result = (this.getSessionData().setVal( keyString, sOts)
== GXE.SUCCESS)
return result;
}
|
setValue speichert die Variable zusammen mit dem
konvertierten Objekt im Session Objekt
|
public Object getValue( String keyString)
throws Exception { [...]
GXVAL sOR = this.getSessionData().getVal(keyString);
return reconvert( sOR);
}
|
getValue bekommt das GXVAL Objekt vom
Session Objekt und benutzt die Variable als
Suchschlüssel. Dann ruft es die reconvert
Methode auf und konvertiert das GXVAL Objekt zu einem
Objekt.
|
public int removeValue( String keyString)
/* Precondition:
* - the key string is not null
*/
{
[...]
return this.getSessionData().removeVal( keyString);
}
|
removeValue löscht ein
Variable/GXVAL-Objekt Paar vom Session Objekt
und gibt folgende Werte zurück:
- GXE.SUCCESS: alles OK
- GXE.INVALID_ARG: Vorbedingung(en) nicht
erfüllt
- anderer GXE Fehler: wenn es nicht möglich
war, das Paar zu löschen
|
Listing 3: Die Klasse SessionStorage (Quelle:
Code von Christian Ey, © 98 Netscape)
Zurück
Weiter, Autor:
Christian Ey,
http://www.inweb.de/chetan
|
 |