portal Michała Hanćkowiaka
Begin main content
## IDL ................................................

module HelloApp
{
    interface Hello
    {
        string sayHello();
    };
};


## kli ................................................

lappend auto_path ./combat-tcl-0.7.4
package re combat
  #% 0.7

set m [corba::string_to_object file://[pwd]/Hello.ior]

#source Hello.tcl
#combat::ir add $_ir_Hello

# alternatywa...
combat::ir add \
{ {module {IDL:HelloApp:1.0 HelloApp 1.0} { {interface {IDL:HelloApp/Hello:1.0\
Hello 1.0} {} { {operation {IDL:HelloApp/Hello/sayHello:1.0 sayHello 1.0}\
string {} {}}}}}}}

$m sayHello


## ser ................................................

lappend auto_path ./combat-tcl-0.7.4
package require combat
  #% 0.7

class HelloWorld {
  inherit PortableServer::ServantBase
  public method _Interface {} {
    return "IDL:HelloApp/Hello:1.0"
  }
  public method sayHello {} {
    return "Jak sie masz ???"
  }
}

source Hello.tcl
combat::ir add $_ir_Hello

set obj [HelloWorld #auto]

set poa [corba::resolve_initial_references "RootPOA"]
[$poa the_POAManager] activate
set ref [$poa servant_to_reference $obj]

set ior [corba::object_to_string $ref]
set f [open Hello.ior "w"]; puts $f $ior; close $f

vwait qqq


## kli uzywajacy CosNaming czyli NamingService ................................................
# + NamigService tworzy "drzewo kontekstow"
#  (kontekst to cos w rodzaju katalogu)
# + w kontekstach umieszcza sie obiekty i/lub pod-konteksty
# + CosNaming zawiera 2 wazne interfejsy:
#    NamingContext - glowne operacje
#    NamingContextExt - pewne ulatwienia, np. resolve_str dla resolve
# + pod-konteksty moga pochodzic z innego serwera!
#  (rozproszony NamingService???)
# + opisy CosNaming ???
#    spec, java docs, plik idl (COS_ns.idl)

source COS_ns.tcl
  # + COS_ns.tcl to skompilowany przez idl2tcl plik IDL NameService...
combat::ir add $_ir_COS_ns
set ns [corba::string_to_object http://mhanckow.students.wmi.amu.edu.pl/pliki/nsd.ior]
  # + podlaczamy sie do serwera z NamingService poprzez plik nsd.ior

# listujemy zawartosc kontekstu korzenia ...
$ns list 10 x y; join $x \n
  #% binding_name {{id EventChannelFactory kind {}}} binding_type nobject
binding_name {{id PropertySetDefFactory kind {}}} binding_type nobject
binding_name {{id PropertySetFactory kind {}}} binding_type nobject
binding_name {{id propset1 kind {}}} binding_type nobject

set q1 [$ns resolve_str "propset1"]
  # + $q1 to ref do obiektu Corby, wyciagnieta z NamingService
  # + mozna uzywac "/" do podania sciezki przez drzewo kontekstow !!!
set q1 [$ns resolve {{id "propset1" kind ""}}]
  # + inny sposob zrobienia tego samego co wyzej...
  # + argument to tablica struktur NameComponent

$ns rebind {{id "qqq1" kind ""}} $q1
  # + tworzymy nowy wpis dla tego samego obiektu !
  # + rebind dziala jak bind, ale zapisuje stary wpis

$ns list 10 x y; join $x \n
  #% binding_name {{id EventChannelFactory kind {}}} binding_type nobject
binding_name {{id PropertySetDefFactory kind {}}} binding_type nobject
binding_name {{id PropertySetFactory kind {}}} binding_type nobject
binding_name {{id propset1 kind {}}} binding_type nobject
binding_name {{id qqq1 kind {}}} binding_type nobject

# tworzenie podkontekstu
set ctx1 [$ns new_context]
$ns bind_context [$ns to_name "katalog1"] $ctx1
  # + to_name to metoda, ktora zamienia sciezke z "/" na liste komponentow

$ns list 10 x y; join $x \n
  #% binding_name {{id EventChannelFactory kind {}}} binding_type nobject
binding_name {{id PropertySetDefFactory kind {}}} binding_type nobject
binding_name {{id PropertySetFactory kind {}}} binding_type nobject
binding_name {{id propset1 kind {}}} binding_type nobject
binding_name {{id qqq1 kind {}}} binding_type nobject
binding_name {{id katalog1 kind {}}} binding_type ncontext

$ns rebind [$ns to_name "katalog1/qqq1_raz_jeszcze"] $q1
  # + umieszczam obiekt w katalog1

set q1a [$ns resolve_str "katalog1/qqq1_raz_jeszcze"]
set q1b [$ns resolve {{id "katalog1" kind {}} {id "qqq1_raz_jeszcze" kind {}}}]
set q1c [$ns resolve [$ns to_name "katalog1/qqq1_raz_jeszcze"]]
  # + wszystkie linijki robia to samo ...

set ctx2 [$ns resolve_str "katalog1"]
  # + $ctx2 to ref do pod-kontekstu "katalog1"
$ctx2 list 10 x y; join $x \n
  #% binding_name {{id qqq1_raz_jeszcze kind {}}} binding_type nobject

uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...