„5. Elosztott rendszerek (2012)” változatai közötti eltérés
a Ferrero átnevezte a(z) 5. Elosztott rendszerek lapot a következő névre: 5. Elosztott rendszerek (2012) |
a autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat |
||
| (4 közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva) | |||
| 5. sor: | 5. sor: | ||
==Távoli eljáráshívás== | ==Távoli eljáráshívás== | ||
===Függvényhívás=== | ===Függvényhívás=== | ||
[[File:rmi.png]] | |||
==== Interfész ==== | |||
* A fejlesztö definiálja, specifikálja. | |||
* WebService-ek esetén WSDL adja meg | |||
* Callback minta esetén a kloens oldalon szerepel | |||
* CORBA esetén IDL-ben specifikáljuk | |||
==== Csonk ==== | |||
* Keretrendszer fordítási időben generálja | |||
* Callback minta esetén a kliens oldalon szerepel | |||
* Sorosítva elküldi a paramétereket, meghívja a távoli függvényt, visszaveszi a visszatérési értéket | |||
<pre> | <pre> | ||
int foo(int x, int y, int z) { | int foo(int x, int y, int z) { | ||
| 24. sor: | 30. sor: | ||
} | } | ||
</pre> | </pre> | ||
===Adapter=== | |||
* | ==== Szerializálás ==== | ||
* meghívja az implementációt | * CORBA esteén az OIOP/IIOP specifikálja | ||
* Callback minta esteén a kliens oldalon szerepel | |||
* Keretrendszerben gyárilag implementálva van | |||
* WebService-ek esetén SOAP | |||
==== Adapter ==== | |||
* Callback minta esetén a kliens oldalon szerepel | |||
* CORBA esteén az IDL-ben specifikáljuk | |||
* Beolvassa a paramétereket, meghívja az implementációt, visszaküldi a visszatérési értéket | |||
<pre> | <pre> | ||
void invoke(Skeleton skeleton) { | void invoke(Skeleton skeleton) { | ||
| 39. sor: | 52. sor: | ||
} | } | ||
</pre> | </pre> | ||
==== Implementáció ==== | |||
* Fejlesztö implementálja | |||
* Callback minta esteén a kliens oldalon szerepel | |||
===Problémakezelés=== | ===Problémakezelés=== | ||
* memóriakezelés | * memóriakezelés | ||
| 51. sor: | 69. sor: | ||
** NameService (hierarchikus, név szerinti keresés) | ** NameService (hierarchikus, név szerinti keresés) | ||
** TradeService (szolgáltatás szerint kereshető) | ** TradeService (szolgáltatás szerint kereshető) | ||
==Remote Method Invocation== | ==Remote Method Invocation== | ||
====Szerializálás==== | ====Szerializálás==== | ||
| 72. sor: | 91. sor: | ||
* paraméter: Serializable interfészt megvalósító objektum | * paraméter: Serializable interfészt megvalósító objektum | ||
===Szerver oldal=== | ===Szerver oldal=== | ||
[[File:rmi-szerver.png]] | |||
====RemoteObject==== | ====RemoteObject==== | ||
* távoli objektumok és stub-ok ősosztálya | * távoli objektumok és stub-ok ősosztálya | ||
| 114. sor: | 133. sor: | ||
===Kliens oldal=== | ===Kliens oldal=== | ||
[[File:rmi-kliens.png]] | |||
* Stub hivatkozik a távoli objektumra, implementálja annak interfészét | * Stub hivatkozik a távoli objektumra, implementálja annak interfészét | ||
| 134. sor: | 153. sor: | ||
* void unbind(String name) - kiszed | * void unbind(String name) - kiszed | ||
====LocateRegistry ==== | ====LocateRegistry ==== | ||
* '''a LocateRegistry osztály és a Registry interface azonosítja az RMI Registry szolgáltatást''' | |||
* megkeresi/létrehozza a Registry-t | * megkeresi/létrehozza a Registry-t | ||
* static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) | * static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) | ||
| 141. sor: | 161. sor: | ||
* referenciákat számol | * referenciákat számol | ||
* kilens oldalon is van komponense (DGCClient) | * kilens oldalon is van komponense (DGCClient) | ||
* amikor a kiens deszerializál egy távoli objektumra mutató referenciát, akkor a | * amikor a kiens deszerializál egy távoli objektumra mutató referenciát, akkor a DGCClient egy dirty() hívással jelez | ||
a szerver GC-je felé, hogy az objektumra a kliensenk szüksége van | a szerver GC-je felé, hogy az objektumra a kliensenk szüksége van | ||
* erre válaszul a szerver megmondja, hogy mennyi időre tudja garantálni az objektum megtartását a memóriájában | * erre válaszul a szerver megmondja, hogy mennyi időre tudja garantálni az objektum megtartását a memóriájában | ||
* a | * a DGCClient feladata, hogy meghosszabbítsa ezt az idő a lejárta előtt egy újabb dirty hívással, ha a kliensnek továbbra is szüksége van az objektumra | ||
* ha a | * ha a SGCClient úgy veszi észre, hogy nincs szüksége a kliensnek tovább a távoli objektumra, akkor ezt a tényt egy clean () hívással jelzi a szerver | ||
GC-je felé | GC-je felé | ||
* a szerver eközben számolja, hogy hány távoli referencia van a távoli objektumokra, és ha ez 0-ra csökken, akkor weak referenciával hivatkozik rá | * a szerver eközben számolja, hogy hány távoli referencia van a távoli objektumokra, és ha ez 0-ra csökken, akkor weak referenciával hivatkozik rá | ||
| 153. sor: | 173. sor: | ||
* sajnos lehet, hogy a kliens hálózati hiba miatt nem tudta megújítani a referenciáját, és ekkor a következő kérése nem fogja megtalálni az objektumot (NULL) | * sajnos lehet, hogy a kliens hálózati hiba miatt nem tudta megújítani a referenciáját, és ekkor a következő kérése nem fogja megtalálni az objektumot (NULL) | ||
emiatt is szükség van arra, hogy a távoli objektum metódusai RemoteExceptiont dobjanak | emiatt is szükség van arra, hogy a távoli objektum metódusai RemoteExceptiont dobjanak | ||
FORRÁS: http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/understanding/rmi_dgc.html | |||
-- [[MisnyovszkiAndrasSSO]] - 2009.05.27. | -- [[MisnyovszkiAndrasSSO]] - 2009.05.27. | ||
===RMI során átadható paraméterek osztályozása és a paraméterátadás módja=== | ===RMI során átadható paraméterek osztályozása és a paraméterátadás módja=== | ||
* Pass-by-Reference | * Pass-by-Reference | ||
| 191. sor: | 212. sor: | ||
====Mitöl ügynök az ügynök?==== | ====Mitöl ügynök az ügynök?==== | ||
* Aktív és autonóm | * '''Aktív és autonóm''': saját szálon fut, a döntéseit maga hozza a környezet figyelembevételével | ||
* '''Kapcsolatképes (reaktív)''': más ügynökökkel kommunikálhat | |||
* '''Tanulékony''': a tapasztalatait összegzi | |||
* '''Mobil''': képes az ügynökségek közötti közlekedésre | |||
* Kapcsolatképes (reaktív) | |||
* Tanulékony | |||
* Mobil | |||
====Hogyan érkezik az ügynök?==== | ====Hogyan érkezik az ügynök?==== | ||
| 255. sor: | 270. sor: | ||
** Trader attribútumok állítása: számosságok, kéréstovábbítás | ** Trader attribútumok állítása: számosságok, kéréstovábbítás | ||
* Különbözö helyen futó traderek összekapcsolhatóak linkkel vagy federatrion-nel, mely arra jó hogy az egyikben kezdeményezett keresés a többibe továbbadódhat. Ez a kapcsolat egyirányú. Beállításai: | * Különbözö helyen futó traderek összekapcsolhatóak linkkel vagy federatrion-nel, mely arra jó hogy az egyikben kezdeményezett keresés a többibe továbbadódhat. Ez a kapcsolat egyirányú. Beállításai: | ||
** local_only: csak az aktuális traderben keresünk | ** '''local_only''': csak az aktuális traderben keresünk | ||
** if_no_local: ha az aktuálisban nincs, mehet tovább | ** '''if_no_local''': ha az aktuálisban nincs, mehet tovább | ||
** always: minden elérhetö traderben keresünk | ** '''always''': minden elérhetö traderben keresünk | ||
===Event Service=== | ===Event Service=== | ||
* Alap CORBA kommunikáció = erös csatolás és egy-egy kommunikáció | * Alap CORBA kommunikáció = erös csatolás és egy-egy kommunikáció | ||
| 268. sor: | 284. sor: | ||
** a csatlakozáshoz proxy kell, mely interfészt nyújt a termelö felé fogyasztóként és a fogyasztó felé termelőként, illetve tárolja a felgyűlt üzeneteket | ** a csatlakozáshoz proxy kell, mely interfészt nyújt a termelö felé fogyasztóként és a fogyasztó felé termelőként, illetve tárolja a felgyűlt üzeneteket | ||
** a kommunikációs modellek keverhetőek | ** a kommunikációs modellek keverhetőek | ||
* Proxy: a supplier proxy-k saját FIFO pufferrel rendelkezdnek | * '''Proxy''': a supplier proxy-k saját FIFO pufferrel rendelkezdnek | ||
** push consumer proxy: a push hatására a csatornához továbbítja az eseményt | ** '''push consumer proxy''': a push hatására a csatornához továbbítja az eseményt | ||
** push supplier proxy: a következő eseményt push hívással adja át a fogyasztónak | ** '''push supplier proxy''': a következő eseményt push hívással adja át a fogyasztónak | ||
** pull supplier proxy: a pull hatására vagy ad egy új eseményt vagy pufferből, vagy blokkol | ** '''pull supplier proxy''': a pull hatására vagy ad egy új eseményt vagy pufferből, vagy blokkol | ||
** pull comsumer proxy: pull hívással kér új eseményt a termelötöl | ** '''pull comsumer proxy''': pull hívással kér új eseményt a termelötöl | ||
===Notification Service=== | ===Notification Service=== | ||
* Plusz szolgáltatások: csatorna factory, események szürése, QoS, NotifyPublish/Subscribe | * Plusz szolgáltatások: csatorna factory, események szürése, QoS, NotifyPublish/Subscribe | ||