Bindung des Netscape Application Servers an CORBA 

Home > Deutsch > Ressourcen > NAS und CORBA > kapitel_12
(C) Christian R. Ey
last modified:
Sun Jan 20 20:40:25 GMT+01:00 2002
-- Impressum / Contact --

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ß:

  1. Anfordern des Session Objektes, das die UID/Zeichenketten-mit-Objektreferenzen Paare enthält.
  2. Überprüfen der Input Parameter, ob sie den Voraussetzungen entsprechen, z.B. Check auf NULL Werte.
  3. Anfordern der Objekt Referenzen vom Session Objekt durch Verwendung der UIDs aus der Input Parameter Liste.
  4. 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.
  5. Verwalten der Objekt Referenzen im Session Objekt: hinzufügen oder löschen. Speichern des Session Objektes.
  6. 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>");  
    }
  1. 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>");
  1. Ü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>");  
    }
  1. 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>");  
    }
  1. 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);
  1. 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);  
    }
}
  1. 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