portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

TAS - zadania dodatkowe

Temat A - RPC

Temat B - RMI

Temat C - Corba

Zadanie C.1 "dodanie SSL do JavaIDL" (zadanie nieaktualne !!!)
Dodać obsługę SSL (czyli bezpieczne gniazdka) do brokerów Combat i JavaIDL oraz sprawdzić czy to działa...
Wskazówki: Combat/ pakiet "tls" j. Tcl, zamienić "socket" na "tls::socket" w iiop.tcl, materiały o pakiecie "tls" ...
UWAGA: trzeba użyc tls::handshake po stronie ser i kli, inaczej gniazdka bezp. trochę inaczej się zachowują niż zwykłe...
JavaIDL/ interfejs ORBSocketFactory (?) 1, 2
Motywacja: zabezpieczenie ob. corby przed niepowołanym użyciem przy pomocy trudnego do odgadnięcia oid-u,
a dzieki ssl nie można podejrzeć oid-a w sieci...

Zadanie C.1a "corba i SSL" (zadanie nieaktualne !!!)
Odpowiedz na pytanie: czy "broker w którym wymieniono zwykłe gnazdka na gniazda SSL"
to to samo co "broker z obsługą SSL (SSLIOP)".
W tym celu wykonaj eksperyment z combat-em i brokerem JacORB.
JacORB ma obsługę SSL; sprobuj uruchomić przykłady javowe z Zadania 20
używając plików keystore i .props z jacorb-3.5/demo/ssl/resources:
$ jaco -Dcustom.props=jsse_server_props HelloServer2
W brokerze combat można łatwo wymienic socket na tls::socket, patrz materiały.
Wskazówki:
1. zwróć uwagę na nr portu w pliku IOR produkowanym przez serwer JacORB+SSL;
przyda sie opcja "-ORBListenEndpoints iiop://:30000/ssl_port=30000"
2. jak wyciągnąc pliki .pem z java keystore? patrz tutaj; obsługa SSL w Javie: JSSE, javax.net.ssl.

Zadanie C.1b (*) "dodanie SSL do combat-a (SSLIOP)"
Celem zadania jest dodanie 100% obsługi SSL (wg spec. Corby) do brokera Combat.
W tym celu należy:
1. w pliku iiop.tcl combata wymienić socket na tls::socket (patrz zadanie C.1)
2. w kliencie zmodyfikować ssl-owy obiekt IOR tak, aby wyglądał jak zwykły ob. IOR
(patrz plik combat_ior_01a.tcl w tym katalogu, oraz ssl_cli.tcl - tu to jest właściwie już zrobione!)
3. w serwerze zwykły ob. IOR zamienić na ssl-owy; trzeba do profilu z tag=0 dodac komponent z tag=20
(patrz wskazówki w ssl_cli.tcl).
Potrzebna będzie znajomość j. Tcl i jego rozszerzenia OOP Itcl (patrz: tcl_materialy).
Poszukaj także w spec Corby rozdziału o "IOR Profiles" gdzie wszystko jest wytłumaczone.
Przetestuj swoje rozwiązanie z brokerem JacORB.
W ew. minireferacie należy DOKŁADNIE omówić rozwiązanie problemu, oraz
zrobić krótki przegląd tematyki Corba Security (samodzielnie poszukać materiałów).

Zadanie C.1c (*) "dodanie SSL do JavaIDL (SSLIOP)"
patrz nieaktualne zadanie C.1; przetestuj swoje rozwiązanie z JacORB;

Zadanie C.2 "problemy iiop.net"
Nowa wersja brokera iiop.net dziala dobrze jako klient corby, ale pojawil sie inny probelm:
serwer HelloServer.exe (z nowych przykładów) przestaje dzialac po pewnym czasie;
to sie dzieje po 2min. braku aktywnosci, zdaje sie ze to jest std. zachowanie ob. remotingowych .NET ?!?!?!
1. W ramach tego zadania prosze pokazać jak temu przeciwdziałać...
2. Proszę też rozstrzygnąć kwestię, czy valuetype jest obsługiwane przez ten broker...

Zadanie C.3 "COS pod iiop.net"
Proszę podać przykład współpracy brokera iiop.net z jakimś std. serwisem corby
np. może to być PropertyService
(to wymaga przetworzenia pliku IDL serwisu oraz pokazania obsługi typu "any")

Zadanie C.4 "problemy valuetype"
Proszę sprawdzić czy "valuetype" działają między combat-em a brokerem Javy (innym niż JavaIDL!).
Można wypróbować openorb lub JacORB. Patrz też zadanie Zadanie 32 w temacie C...

Zadanie C.5 "prosty eksperyment z EventService"
Przeprowadź eksperyment, w którym użytkownicy na różnych maszynach
podłączają się do wspólnego kanału zdarzeń,
jedni jako dostawcy zdarzeń, inni jako odbiorcy zdarzeń.
Najprościej będzie to zrobić w j.Tcl z użyciem pakietu combat,
patrz przykład z zadania 36 (PZR).
Materiały: coss4.pdf, ...
07.01.2015, problem z przykładem combatowym do EventService...
problem był spowodowany przez zaporę !!!
klienci EventService (Supp i Cons) są SERWERAMI Corby, czyli muszą być dostępni z zewnątrz!!!
adres i nr portu serwera combatowego można wymusić w ten sposób:
corba::init -ORBServerPort 10000 -ORBHostName 111.222.333.444

Zadanie C.6 "problem usuwania ob. Corby/serwantów"
Zbadaj czy ob. Corby może mieć metodę, która usuwa jego samego ORAZ serwanta,
patrz: met. POA deactivate_object i ServantManager (główna spec. Corby),
wskazówką może być zadanie 24 (PZR),
przemyśl, jak to wygląda w j. Java i w językach bez GC (np. w j. Tcl).
Pytanie: Jak najwygodniej dostac sie do POA i oid-u, z poziomu metody servanta?

set poa [corba::resolve_initial_references "POACurrent"]
puts "poa=[$poa get_POA], oid=[$poa get_object_id]"
  # w JavaIDL chyba tez to można zrobić...

Zadanie C.7 (*) "bezpieczeństwo dla NameService"
Dodaj do serwisu Corbowego "NameService" uwierzytelnianie+autoryzację.
Przypomnijmy: uwierzytelnianie= user/hasło, autoryzacja= sprawdzanie praw usera do obiektu.
Wskazówka: trzeba po stronie serwera stworzyć "dekoratora", który będzie
przechwytywał wywołania do NameService i sprawdzał co trzeba.
Użytkownicy mogą mieć nadane prawa "r" i/lub "w" do kontekstów w NameService.
"Fabryka dekoratorów" powinna realizować uwierzytelnianie.

Zadanie C.8 "odporność na 'kill' dla NameService"
2 kopie zwykłego serwera NameService;
dekorator/front end/proxy przekazujący żądania do OBU serwerów!
dekorator ma interfejs NamingContextExt

Zadanie C.9 "rozszerzanie NameService"
użyć dziedziczenia z interfejsu NamingContextExt;
dodać metodę "string pokazKontekst(in string sciezka)";
metoda ta powinna pokazywać zawartość kontekstu w postaci "grafiki tekstowej";
przekazywać inne żądania do zewn. serwera NameService...

Zadanie C.10 "rozszerzanie NameService o login/logout"
jest to uproszczona wersja zadania C.7, połączona z C.9;
do NamingContextExt dodać metody login(user,haslo), logout();
w trybie "bez zalogowania" dopuszczać tylko metody readonly;
musi być obsługa wielu użytkowników, czyli niezbędna będzie "fabryka dekoratorów"...

Sugestia do zadań C.7-C.10:
W brokerze Combat/tcl, servant NIE musi być obiektem Itcl,
może to być komenda "zachowująca się" jak obiekt,
np proc lub obiekt XOTcl (XOTcl to inne niż Itcl rozszerzenie OOP tcl-a);
można wtedy b. elegancko przekazywać wywołania metod (z dekoratora do oryg. obiektu),
patrz przykłady niżej oraz materiały o j. Tcl:

# servant = proc
#
proc qqq1 {met args} {
    # + args to lista zawierająca pozostałe args
  if {$met=="_Interface"} {
    return "IDL:omg.org/CosNaming/NamingContextExt:1.0"
  }
  return [uplevel "$::ns $met $args"]
    # + zakładam, że zm. globalna ns zawiera ref do NameService
    # + uplevel a nie eval, bo komenda musi sie wykonać w kontekscie wywołania!
    # + uwaga: w tym rozwiązaniu jest możliwy wyciek pamięci,
    #   powodowany przez ref do ob. corby (proc _combat_obj_*)
}
set ref [$poa servant_to_reference qqq1]

# servant = obiekt XOTcl
#
package re XOTcl
xotcl::Class ServantNS
  # + jeśli w IDL używamy atrybutów to są potrzebne dodatkowe kroki,
  #   parametry klasy + met. cget/configure
ServantNS instproc init {ns_} { # konstruktor
  xotcl::my instvar ns; # dekl. zm. obiektu
  set ns $ns_
}
ServantNS instproc _Interface {} {
  return "IDL:omg.org/CosNaming/NamingContextExt:1.0"
}
ServantNS instproc unknown {met args} {
  xotcl::my instvar ns
  return [uplevel "$ns $met $args"]
}
set obj [ServantNS new $ns]
set ref [$poa servant_to_reference $obj]

Zadanie C.11 (*) "rmi-over-iiop, czy warto"
jest to rozszerzenie zadania 30 (PZR) - przełączanie ob. rmi w tryb iiop/corba;
należy zbadać jakie typy javove są sensownie tłumaczone na Corba/IDL,
i mogą być używane z innych j. prog. (np Tcl/combat)
szczególną uwagę zwrócić na typy java.util.*
jeśli dany typ javowy jest tłumaczony na "custom valuetype" to można przyjąć, że
nie nadaje się do użytku... (dowiedzieć się czym są custom VT);
zbadać co się dzieje podczas zwracania/przek. danych przez java.lang.Object;
w ramach zadania należy zademonstrować działanie klientów (tcl/combat??)
używających ob. rmi w trybie iiop;

Wskazówka 1: można kompilować interfejs javowy X (dziedziczący z java.rmi.Remote),
i następnie wywoływać "rmic -idl X", co wygeneruje pliki idl (impl. X nie jest tu konieczna!!)
Wskazówka 2: narzędzie idl2tcl nie zezwala na "#include <plik>" dlatego
należy ręcznie wkleić odpowidnie pliki do głównego pliku!

Zadanie C.12 "mico, broker C++"
Zainstaluj broker C++ mico (binaria? kompilacja ze źródeł? patrz też "spis brokerów");
następnie wzorując się na przykladach z katalogu, zbuduj "C++"-owy serwer corbowy,
którego interfejs posiada metodę "macierz transponujMacierz(macierz m)";
wypróbuj go z klientem combatowym.

Zadanie C.12a "mico, broker C++"
Podobne założenia jak w C.12; w tym wypadku interfejs ma mieć metody:
ustawMacierz(macierz m)
macierz pobierzMacierz()
pomnozRazyStala(double stala);
zwróć uwagę na poprawne zarządzanie pamiecią!!
(patrz np. met3 w np000.cc)

Zadanie C.13 "rmi-over-iiop, Object/String bug"
Zbadać jak wygląda zwracanie danych z ob. rmi-over-iiop poprz typ java.lang.Object
(chodzi oczywiście o zwracanie danych przez metodę do klienta corbowego)
ogólnie takie dane są tłumaczone na corbowy typ "any",
oraz czasami dodatkowo obiektywizowane przy pomocy tzw "ValueBox";
zbadać jak się sprawdza zwracanie java.lang.String przez java.lang.Object;
w razie problemów zaproponować obejście...;
ustalić który broker jest odpowiedzialne za ew. problemy;
wskazówka: takie eksperymenty najlepiej robi sie z klientem combat-owym.



Temat D - WS/SOAP/WSDL

Zadanie D.1 "różnica stylu rpc i document"
Proszę pokazać jak są reprezentowane dane typu "sekwencja integer-ów" gdy webserwis jest zbudowany:
1. w stylu RPC/encoded
2. w stylu Document/literal
Proszę przytoczyć komunikaty soap/ urywki wsdl pokazujace te różnicę...

Zadanie D.2 "eksperyment z WCF (1)"
Proszę uruchomić przykład z katalogu wcf.
Następnie prosze przerobić serwer tak aby generował plik WSDL,
oraz umieścic ten plik w sprawozdaniu (także opisać sposób jego pobrania).
Następnie spróbuj uruchomić operacje serwisu z tclws...
Wskazówka: użyj System.ServiceModel.Description.ServiceMetadataBehavior
Materiały: monogatari/WCF blog: 1, 2, 3, 4, 5, 6, 7, ... (patrz 2 i 5)

Zadanie D.3 "Youtube REST API"
Sprobuj (programowo!) znależć ulubione filmy na Youtube, używając przykładu w katalogu rest.
W pliku youtube01.tcl jest wydruk z konsola2c.tcl, w ktorym używa się:
pakietu http do wysyłania żądań http (REST) do serwera; odpowiedzi sa xml-owe...
pakietu tdom do wyciągania informacji z dokumentów xml...
(oba pakiety, http i tdom sa zawarte w tclkit, tclkit.exe i oczywiscie tclkit_2)
Uwagi o przykładzie "youtube01.tcl":
(nad)używa się w nim metody selectNodes, ktora obsługuje wyrażenia XPath
do wyciągania interesujacych nas elementow z dokumentu XML ...
robi się także różne "sztuczki" przy pomocy wyrażen regularnych (komenda regexp)

Zadanie D.4 "webservis-owy dostęp do arkusza kalkulacyjego"
Jest to linux-owa wersja zadania 46a (PZR) ...
Należy przygotować webserwis, za pośrednictwem którego
będzie można modyfikować komórki (otwartego) arkusza kalkulacyjnego.
W tym wypadku uzywamy OpenOffice, obiektów UNO, oraz pakietu pyuno.
Patrz przykład pyuno_tcl.zip; w przykładzie tym interp Tcl komunikuje się z pythonem;
a python, za pomocą pakietu pyuno, odwołuje się do ob. UNO w aplikacjach openoffice,
i manipuluje dokumentami w tych aplikacjach...
(Obiekty UNO są całkiem podobne do ob. Corby...)
(Powyższą technikę Microsoft nazywał kiedyś "automatyzacją"...)
W pliku py_uno_interp.tcl należy zmodyfikować ścieżkę do pythona,
musi to być ten interpreter który jest dostarczany razem z openoffice !!.

Materiały o OpenOffice/UNO: OpenOffice.org Developers Guide;
jednak całkiem sporo można zobaczyć w przykładach z pliku pyuno_tcl.zip...

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