 |
Zurück
Weiter
Programmieren der AppLogics
Bevor ein AppLogic eine Methode an einem entfernten Objekt
aufrufen kann, muß es die Objektreferenzen vom Session
Objekt bekommen. Danach sind verschiedene andere Schritte notwendig,
um sicherzustellen, daß ein nachfolgendes AppLogic alle
benötigten Objektreferenzen erhalten kann. Hier die Schritte,
die ein AppLogic dazu ausführen muß:
- Anfordern des Session Objektes, das die
UID/Zeichenketten-mit-Objektreferenzen Paare enthält.
- Überprüfen der Input Parameter, ob sie den
Voraussetzungen entsprechen, z.B. Check auf NULL Werte.
- Anfordern der Objekt Referenzen vom Session Objekt
durch Verwendung der UIDs aus der Input Parameter Liste.
- Implementieren der Geschäftslogic: Die passenden Methoden
an den Objektreferenzen aufrufen. Dies kann neue Objektreferenzen
erzeugen oder bestehende löschen, was im nächsten Punkt
verwaltet wird.
- Verwalten der Objekt Referenzen im Session Objekt:
hinzufügen oder löschen. Speichern des Session
Objektes.
- Vorbereiten der nächsten HTML-Seite für den HTML
Client oder der Datenliste für den Thin-Client.
Ein Beispiel hierzu ist in Listing 5
erläutert (Code gekürzt).
|
Listing
|
Erklärung
|
public class bankNewAccountAppLogic
extends CorbaAppLogic {
|
|
public int execute() {
TemplateMapBasic map;
String newUID;
_bankRef myBank;
_accountRef myAccount;
|
Dies ist der Start der execute Methode mit der
Variablendeklaration.
|
// get session object and test it for null
CorbaSession mySession = this.getSessionObject();
if (mySession == null) {
return
result("<HTML>Wrong session</HTML>");
}
|
- Anfordern des Session
Objektes, das die UID/Zeichenketten-mit-Objektreferenzen
Paare enthält.
|
// verify correctness of precondition
String AccountName =
valIn.getValString("AccountName");
if ( null == AccountName ||
0 == AccountName.trim().length() ){
log("Input error on AccountName");
return result("<HTML><BODY>AccountName
should not be null!</BODY></HTML>");
}
// extract the ORs from valIn
IValList myValList=CorbaUtil.extractORs(valIn);
// get the UID-String for "bank" from myValList
String bankUID =
myValList.getValString( new
CorbaVariableAndParameter().createParameter(
"bank"));
if (bankUID == null)
return result("<HTML><BODY>Lost
connection to the bank</BODY></HTML>");
|
- Überprüfen der Input
Parameter, ob sie den Voraussetzungen entsprechen, z.B.
Check auf NULL Werte. Die HTML Seite sollte eine UID
für das bank Objekt beinhaltet haben. Wenn
dies nicht der Fall ist, müssen wir die Applikation
stoppen und eine Fehlermeldung zurückgeben: "Lost
connection to the bank", oder: "Die Verbindung zur Bank
wurde verloren".
|
// get the object reference(s) out of the
// session object by using the UIDs
// from the input parameter list
try {
// get the _ObjectRef from the session
_ObjectRef oRef =
(ObjectRef)mySession.getValue(bankUID);
if (oRef == null)
return result("<HTML><BODY>Sorry,
action not allowed.</BODY></HTML>");
// narrow the _ObjectRef to _bankRef
myBank = bank._narrow(oRef);
} catch (SystemException e) {
return result("<HTML>Lost connection to the
bank</BODY></HTML>");
}
|
- Anfordern der Objekt Referenzen vom
Session Objekt durch Verwendung der UIDs aus der
Input Parameter Liste: Mit der UID das bank Objekt
vom Session Objekt anfordern, wenn es nicht
vorhanden ist (z.B. nach Drücken des
"zurück"-Knopfes im Browser), Fehlermeldung
ausgeben. Andernfalls die von der Session
zurückgegebene CORBA Objektreferenz durch
"narrow" in eine _bankRef umwandeln, was
das Proxy-Objekt erzeugt.
|
// business logic: get an account reference
// from the bank
try {
// get a new _accountRef from myBank
myAccount =
myBank.newAccount(AccountName);
} catch (SystemException e) {
return result("<HTML><BODY>Lost connection
to the bank</BODY></HTML>");
} catch (reject r) {
return result( "<HTML><BODY>Attempt to
create the account for "+AccountName
+" failed: rejected</BODY></HTML>");
}
|
- Implementieren der
Geschäftslogic, hier: newAccount(.) am
bank Objekt aufrufen, was ein account
Objekt zurückgibt. Mögliche Ausnahmen: CORBA
SystemException; reject: benutzerdefinierte
Ausnahme, die bei dem Versuch ausgelöst wird, ein
neues account Objekt zu erzeugen, das den selben
Namen erhalten soll wie ein schon bestehendes
account Objekt.
|
// manage the object reference(s)
try {
// store the _accountRef in mySession and
// get back a unique ID
newUID = mySession.addValue(myAccount);
} catch (SystemException e) {
return result("<HTML><BODY>Lost connection
to the bank</BODY></HTML>");
}
// save the session object
this.saveSession(null);
|
- Verwalten der Objekt Referenzen im
Session Objekt: hinzufügen oder löschen.
Speichern des Session Objektes.
|
// prepare the values passed back to the HTML page
// add the account to myValList
myValList.setValString( new
CorbaVariableAndParameter().createParameter(
"account"), newUID);
// create the TemplateMapBasic map from myValList
map = new CorbaParameterPassing(
).createParameterTemplateMap( myValList);
try {
// adding NAME and BALANCE to the
// TemplateMapBasic
map.putString("NAME", myAccount.get_name());
map.putString("BALANCE",
new Float(myAccount.get_balance()).toString());
} catch (SystemException e) {
return result("<HTML><BODY>Lost connection
to the bank</BODY></HTML>");
}
return
evalOutput("Bank_Example/Templates/account.html",
(ITemplateData)null,
(ITemplateMap)map, null, null);
}
}
|
- Vorbereiten der nächsten
HTML-Seite für den HTML Client oder der Datenliste
für den Thin-Client. In diesem Fall benötigt
die HTML-Seite noch den Namen des aktuellen Kontos und
den aktuellen Kontostand, was mit map.putString(.)
an das von createParameterTemplateMap(.)
vorbereitete TemplateMapBasic hinzugefügt
wird. Die Ausgabe erfolgt über return
evalOutput(.), eine NAS Methode.
|
Listing 5: Das AppLogic
bankNewAccountAppLogic (Quelle: Code von Christian Ey, © 98
Netscape)
Zurück
Weiter, Autor:
Christian Ey,
http://www.inweb.de/chetan
|
 |