Budowa aplikacji sieciowych
dr Zbigniew Lipi
ń
ski
Instytut Matematyki i Informatyki
ul. Oleska 48
50-204 Opole
zlipinski@math.uni.opole.pl
Zagadnienia
• Obiektowe technologie programowania rozproszonego: DCOM, Java RMI, Corba.
• Interfejs programowy Winsock.
Przykład programu klient-serwer UDP Echo (j
ę
zyk C, C++).
•
Ś
rodowisko .Net, interfejs programowy Winsock.
Przykład programu klient-serwer UDP Echo (j
ę
zyk C#).
• Komunikacja z bazami danych, obiekty ADO.
Przykład programu: SqlQuerry (j
ę
zyk ASP).
• Usługi WWW (web servcies).
• Standard Corba.
3
Component Object Model (COM)
COM+
Distributed Component Object Model (DCOM)
4
COM+ jest rozszerzeniem technologii komponentowej COM (Component Object Model), umo
ż
liwiaj
ą
c
ą
budow
ę
usług z wykorzystaniem Microsoft Transaction Server (MTS).
Obiekty COM+ słu
żą
do:
•
buforowania danych (resource pooling),
•
rozł
ą
czania aplikacji,
•
publikowania zdarze
ń
(event publication),
•
obsługa transakcji rozproszonych.
Typy aplikacji COM+:
•
serwer
•
proxy (klient)
•
biblioteka.
W
ś
rodowisku .Net obiekty COM+ s
ą
zdefiniowane w obszarze nazw System.EnterpriseServices.
Co to jest COM+?
MTS słu
ż
y od kolejkowania wiadomo
ś
ci, zarz
ą
dzania pami
ę
ci
ą
, zarz
ą
dzania w
ą
tkami, zarz
ą
dzania
zdarzeniami.
Usługi COM+:
•
Automatic Transaction Processing.
•
BYOT (Bring Your Own Transaction), usługa pozwala na definiowanie dziedziczenia mi
ę
dzy
transakcjami.
•
Just-in-Time Activation, usługa aktywuje obiekt, gdy ten wywołuje metod
ę
, deaktywuje go gdy
metoda zwróci warto
ść
.
•
Loosely Coupled Events, usługa słu
ż
y do zarz
ą
dzania zdarzeniami (manages object-based
events).
•
Object Construction, usługa przekazuje warto
ść
typu string do tworzonego obiektu.
•
Object Pooling, usługa kolejkuje obiekty (provides a pool of ready-made objects).
•
Private Components, chroni komponenty przed wywołaniem przez zewn
ę
trzne procesy (protects
components from out-of-process calls).
•
Queued Components, odpowiada za asynchroniczne kolejkowanie wiadomo
ś
ci (provides
asynchronous message queuing).
•
Role-Based Security.
•
SOAP Service.
•
Synchronization, zarz
ą
dza procesami współbie
ż
nymi.
•
Services without Components, pozwala aplikacjom korzysta
ć
z usług COM+ które nie maj
ą
zaimplementowanych ServicedComponent object lub nie maj
ą
skonfigurowanego katalogu COM+ .
Co to jest COM+?
DCOM – model, technologia firmy Microsoft słu
żą
ca do budowy systemów rozproszonych (distributed
systems). Obiekty DCOM mog
ą
komunikowa
ć
si
ę
mi
ę
dzy sob
ą
poprzez sieci internetowe.
DCOM jest rozszerzeniem modelu COM.
Technologia COM/DCOM jest niezale
ż
na od j
ę
zyka implementacji.
J
ę
zyk i kompilator MIDL (Microsoft Interface Definition Language) słu
ż
y do specyfikowania interfejsów
mi
ę
dzy serwerem a klientem, definiowania metod i obiektów COM/DCOM.
Co to jest Distributed Component Object Model (DCOM)?
Podstawowe poj
ę
cia technologii COM/DCOM:
klient –
program który wywołuje metody na serwerze COM/DCOM.
serwer -
program który udost
ę
pnia obiekty COM/DCOM klientowi.
interfejs – wskazuje na grup
ę
funkcji które s
ą
wywoływane za pomoc
ą
obiektów COM/DCOM.
klasa COM/DCOM – (zwana ko-klas
ą
) definiuje obiekt który implementuje interfejsy COM/DCOM.
obiekt COM/DCOM – instancja ko-klasy (klasa COM/DCOM).
marshaling –
przekazywanie danych (parametrów) mi
ę
dzy klientem a serwerem COM/DCOM.
Marshaling – mechanizm zbierania i formatowania danych w celu przesłania ich
do innego procesu.
Co to jest Distributed Component Object Model (DCOM)?
Klient przekazuje (marshals) i odbiera (un-marshals) dane za pomoc
ą
obiektu proxy.
Obiekt proxy dostarcza te same interfejsy co COM/DCOM serwer ale ich nie implementuje
(implementacja jest na serwerze).
Serwery s
ą
komponentami pasywnymi, tzn. odpowiadaj
ą
tylko na
żą
dania klienta.
Klient:
• uruchamia, aktywuje serwer,
żą
da obiektu DCOM i interfejsu (podaje CLSID, IID),
• wywołuje metody na serwerze,
• zwalnia interfejsy, mo
ż
e zamkn
ąć
lub zdeaktywowa
ć
serwer.
Co to jest Distributed Component Object Model ?
Obiekty COM/DCOM musz
ą
by
ć
unikalne w skali
ś
wiata.
Liczby słu
żą
ce do numerowania obiektów COM/DCOM nazywaj
ą
si
ę
•
UUID, Universally Unique Identifier (Open Software Foundation).
•
GUID, Globally Unique Identifier (Microsoft).
GUID jest liczb
ą
z zakresu 0 - 2^128.
Przykład GUID'a zapisanego w układzie szesnastkowym
"50709330-F93A-11D0-BCE4-204C4F4F5020".
Poniewa
ż
, GUID jest 128 bitowym typem danych, w j
ę
zyku C++ do zapisu GUID’ów stosuje si
ę
struktur
ę
Co to jest Distributed Component Object Model ?
typedef struct
_GUID
{
unsigned long
Data1;
unsigned short
Data2;
unsigned short
Data3;
unsigned char
Data4[8];
} GUID;
Do identyfikacji klas i interfejsów stosuje si
ę
ró
ż
ne typu GUID’ów:
•
CLSID, Class ID, GUID jednoznacznie identyfikuj
ą
cy klas
ę
DCOM któr
ą
klient chce u
ż
y
ć
.
•
IID, Interface ID, GUID identyfikuj
ą
cy interfejs.
Program słu
żą
cy do generowania GUID’ów nazywa si
ę
guidgen.exe.
Program słu
żą
cy do rejestrowania obiektów COM/DCOM w rejestrach nazywa si
ę
regsvr32.
Przykład. Rejestracja komponentu proxy stub marshalserverps.dll.
\> regsvr32 marshalserverps.dll
Co to jest Distributed Component Object Model ?
Komponenty DCOM do komunikacji wykorzystuj
ą
protokół Remote Procedure Call (RPC, RFC 5513,
RPCSEC_GSS, RFC 5403).
GSS-API - Generic Security Services Application Programming Interface
Komponenty COM do komunikacji wykorzystuj
ą
protokół LPC (Local Procedure Call).
Service Control Manager (SCM) - słu
ż
y do odnajdywania komponentów DCOM, uruchamia i zatrzymuje
serwer COM/DCOM, wywołuje Interfejsy COM/DCOM , zarz
ą
dza komunikacj
ą
mi
ę
dzy procesami.
Np. SCM wykorzystuje do uruchomienia serwera interfejs IremoteActivation, wywołuj
ą
c na serwerze
funkcje RPC RemoteActivate().
Uwaga:
DCOM
client stub - proxy,
sever stub - stub
Java RMI, Corba
client stub - stub,
sever stub - skeleton.
Co to jest Distributed Component Object Model ?
Komponenty bior
ą
ce udzia
ł
w komunikacji mi
ę
dzy klientem a serwerem DCOM.
Protokół Remote Procedure Call
A.R. Thurlow, RPC: Remote Procedure Call Protocol Specification Version 2,RFC 5531, May 2009.
Protokól RPC został opracowany w celu wykonywania rozproszonych oblicze
ń
.
B. J. Nelson, Remote procedure call. Tech. Rep. CSL-81-9, Xerox Palo Alto Research Center, Palo Alto, Calif. 1981.
Funkcje protokołu RPC:
•
specyfikacja procedur RPC,
•
obsługa mechanizmu kojarzenia zapyta
ń
i odpowiedzi,
•
obsługa mechanizmu uwierzytelnienia klienta i serwera RPC.
Portokół RPC korzysta w wartwie transportowej z protokołów TCP i UDP.
Protokół Remote Procedure Call
Ź
ródło. A.D. Birrell, B. J. Nelson, Implementing Remote Procedure Calls, XEROX CSL-83-7, October 1983.
Ź
ródło. A.D. Birrell, B. J. Nelson, Implementing Remote Procedure Calls, XEROX CSL-83-7, October 1983.
Java Remote Method Invocation
Technologia Java RMI została opracowana tak, aby budowa aplikacji rozproszonych
•
była podobna do budowy aplikacji niesieciowych, obowi
ą
zywała ta sama składnia i semantyka,
•
mo
ż
na było posługiwa
ć
si
ę
lokalnymi obiektami Javy.
Specyfikacja Java RMI
http://download.oracle.com/javase/6/docs/platform/rmi/spec/rmiTOC.html
Typowa aplikacja RMI składaja si
ę
z dwóch komponentów serwera i klienta.
Serwer tworzy obiekty i udost
ę
pnia je klientowi poprzez referencje.
Klient mo
ż
e poprzez referencje wywoływa
ć
zdalnie metody danego obiektu.
Java RMI jest mechnizmem pozwalaj
ą
cym klientowi i serwerowi komunikowa
ć
si
ę
(przekazywa
ć
parametry do
zdalnych obiektów i odbiera
ć
zwracane warto
ś
ci przez zdalnie wywołane metody).
W Java RMI definicja zachowania systemu w procesie generowania usługi sieciowej (remote service) jest okre
ś
lona za
pomoc
ą
interfejsów Javy (Java interface).
Implementacja zachowania systemu i usługi jest zapisana w klasie i wykonywana na serwerze.
Co to jest Java RMI?
Aby klient RMI mógł wywoła
ć
metod
ę
na serwerze RMI musi:
•
zlokalizowa
ć
zdalny obiekt ,
•
zkomunikowa
ć
si
ę
z nim (przekaza
ć
parametry, odebra
ć
dane),
•
pobra
ć
definicj
ę
klas z serwerów.
Co to jest Java RMI?
•
Server RMI odwołuje si
ę
do rejestów aby skojarzy
ć
(bind) zdalny obiekt z jego nazw
ą
.
•
Klient RMI szuka obiektów po ich nazwach w rejestrach serwera RMI aby wywoła
ć
metod
ę
obiektu na serwerze.
•
Klient i serwer RMI mog
ą
pobra
ć
np. z serwera WWW, definicj
ę
klas.
Klient odnajduje serwer i obiekty za pomoc
ą
:
•
standardowych usług katalogowych (DNS) lub usług,
•
Java Naming and Directory Interface,
•
RMI Registry, port 1099.
Ź
ródło. http://download.oracle.com/javase/6/docs/platform/rmi/spec/rmi-objmodel2.html
W Java RMI istniej
ą
dwa typy klas które mog
ą
implementowa
ć
interfejs.
•
Pierwszy typ implementuje zachowanie interfejsu, wówczas program wykonywalny jest uruchamiany na serwerze.
•
Drugi typ klasy implementuje interfejs jako klasa proxy, klasa uruchamiana jest przez klienta.
Co to jest Java RMI?
Implementacja Java RMI zbudowana jest na trzech warstwach (abstraction layers):
•
warstwa Stub and Skeleton. W tej warstwie przechwytywane s
ą
metody wywołane przez klienta i przekierowywane do
serwera (remote RMI service).
•
warstwa zdalnej referencji (Remote Reference Layer).
W tej warstwie odbywa si
ę
interpretacja i zarz
ą
dzanie referencjami do obiektów serwera utworzonymi przez klienta,
budowane jest poł
ą
czenie unicastowe (1-1).
Aktywowanie nieaktywnych (u
ś
pionych) obiektów serwera nast
ę
puje za pomoc
ą
ROA (Remote Object Activation).
•
warstwa transportowa, obsługa poł
ą
czenia TCP mi
ę
dzy wirtualnymi maszynami Javy.
Ponad protokołem TCP, RMI stosuje protokół JRMP (Java Remote Method Protocol).
Opracowywana wersja RMI-IIOP implementuje protokoły OMG stosowane w Corbie Internet Inter-ORB Protocol i IIOP.
W tej warstwie mo
ż
e te
ż
by
ć
zaimplementowana transmisja bezpoł
ą
czeniowa w protokole UDP.
Co to jest Java RMI?
Szablon proxy.
Interfejs jest implementowany jako stub (klasa typu proxy), uruchamiany na ho
ś
cie klienta, RealSubject jest klas
ą
implementuj
ą
c
ą
usług
ę
na serwerze.
Skeleton jest klas
ą
pomocnicz
ą
, słu
ż
y do obsługi komunikacji mi
ę
dzy stubem a obiektami serwera.
Co to jest Java RMI?
Co to jest WinSock?
Windows Sockets jest implementacja gniazd BSD (University of California-Berkeley Sockets API).
1993 - edycja WinSock wersja 1.1.
1996 - WinSock wersja 2.0.
Windows Sockets jest interfejsem programowym warstwy transportowej modelu OSI pozwalaj
ą
cym budowa
ć
aplikacje
sieciowe oparte o protokoły rodziny TCP/IP.
Windows Sockets 2 definiuje interfejsy komunikacyjne do obsługi wielu standardów i usług:
•
DNS,
NetWare Service Advertising Protocol (
SAP) name provider, standard X.509 (PKI),
•
Quality of service,
•
transmisji w trybie multicast, multipoint.
W skład specyfikacji WinSock2 wchodz
ą
:
•
WinSock 2 API (budowa aplikacji)
•
WinSock 2 Service Provider Interface (udost
ę
pnianie interfejsów WinSock 2 ró
ż
nym protokołom transportowym).
Komponenty Windows Open System Architecture (WOSA):
•
WinSock Service Provider Interface (SPI), nazwy funkcji zaczynaj
ą
si
ę
od ‘WSP’
•
WinSock Provider Upcall, nazwy funkcji zaczynaj
ą
si
ę
od ‘WPU’.
Nazwy funkcji Windows Sockets 2 zaczynaj
ą
si
ę
do WSA.
Przykład:
WinSock 1.1: connect()
WinSock 2.0: WSAConnect().
Co to jest WinSock?
Przykładowe funkcje WinSock API:
WSAStartup()
funkcja inicjuje u
ż
ycie przez proces biblioteki WS2_32.DLL.
socket()
funkcja tworzy gniazdo o okre
ś
lonym typie.
gethostbyname()
funkcja pobiera nazw
ę
hosta z bazy hosta.
connect()
funkcja buduje poł
ą
czenie do okre
ś
lonego gniazda.
send()
funkcja wysyła dane do poł
ą
czonego gniazda.
sendto()
funkcja wysyła dane do konkretnego odbiorcy.
closesocket()
funkcja zamyka gniazdo.
WSACleanup()
funkcja ko
ń
czy u
ż
ycie biblioteki WS2_32.DLL.
bind()
funkcja kojarzy adres lokalny hosta z gniazdem.
recvfrom()
funkcja odbiera datagramy i przechowuje adres nadawcy
WSAGetLastError()
funkcja zwraca status bł
ę
du ostatniej nieudanej operacji.
Struktury WinSock API:
WSADATA
struktura zawiera informacje o implementacji gniazd (Windows Sockets).
sockaddr_in
struktura zawiera adres IP i numer portu odbiorcy danych.
hostent
struktura jest u
ż
ywana przez funkcje do przechowywania informacji o ho
ś
cie.
Co to jest WinSock?
1.
Instrukcje preprocesorowe:
Co to jest WinSock? Aplikacja UdpEchoClient. J
ę
zyk C, C++.
WSADATA wsd;
SOCKET s;
char
*sendbuf = NULL;
int
iRet, dwRecipientSize;
SOCKADDR_IN recipient;
int
iPort = DEFAULT_PORT;
// Numer portu odbiorcy
DWORD
dwCount = DEFAULT_COUNT,
// Liczba wiadomosci do wyslania
dwLength = DEFAULT_BUFFER_LENGTH;
// Dlugosc bufora do wysylania
char
chRecipient[128]= DEFAULT_RECIPIENT;
// Adres IP lub nazwa hosta odbiorcy
#include
<winsock2.h>
#include
<iostream>
using namespace
std;
#define
DEFAULT_PORT 5150
#define
DEFAULT_COUNT 1
#define
DEFAULT_BUFFER_LENGTH 1
#define
DEFAULT_RECIPIENT
"10.60.17.109"
2. Funkcja main(). Definiowanie i inicjowanie zmiennych i obiektów.
Co to jest WinSock? Aplikacja UdpEchoClient. J
ę
zyk C, C++.
WSAStartup
(MAKEWORD(2, 2), &wsd);
s =
socket
(AF_INET, SOCK_DGRAM, 0);
recipient.sin_family = AF_INET;
recipient.sin_port = htons((
short
)iPort);
recipient.sin_addr.s_addr = inet_addr(chRecipient);
sendbuf =
new char
;
memset(sendbuf,
'Q'
, dwLength);
connect
(s, (SOCKADDR *)&recipient,
sizeof
(recipient));
iRet =
send
(s, sendbuf, dwLength, 0);
cout <<
"Do "
<< inet_ntoa(recipient.sin_addr) <<
" wyslano wiadomosc: "
<< *sendbuf << endl;
dwRecipientSize =
sizeof
(recipient);
iRet =
recvfrom
(s, sendbuf, dwLength, 0, (SOCKADDR *)&recipient, (
int
*) &dwRecipientSize);
cout <<
"Od "
<< inet_ntoa(recipient.sin_addr) <<
" odebrano wiadomosc: "
<< *sendbuf <<
endl;
closesocke
t(s);
delete
sendbuf;
WSACleanup
();
1.
Instrukcje preprocesorowe.
Co to jest WinSock? Aplikacja UdpEchoServer. J
ę
zyk C, C++.
#include <winsock2.h>
#include <iostream>
using namespace
std;
#define
DEFAULT_PORT 5150
#define
DEFAULT_COUNT 1
#define
DEFAULT_BUFFER_LENGTH 1
// 4096
WSADATA
wsd;
SOCKET
s;
char
*recvbuf = NULL;
int
iRet;
DWORD
dwSenderSize;
SOCKADDR_IN
sender, local;
int
iPort = DEFAULT_PORT;
// Numer portu odbiorcy
DWORD
dwCount = DEFAULT_COUNT,
// Liczba wiadomo
ś
ci do odebrania
dwLength = DEFAULT_BUFFER_LENGTH;
// D
ł
ugo
ść
bufora do obioru
char
chInterface[32];
// IP hosta do obioru datagramów
2. Funkcja main(). Definiowanie i inicjowanie zmiennych i obiektów.
Co to jest WinSock? Aplikacja UdpEchoServer. J
ę
zyk C, C++.
WSAStartup
(MAKEWORD(2,2), &wsd);
s =
socket
(AF_INET, SOCK_DGRAM, 0);
local.sin_family = AF_INET;
local.sin_port = htons((
short
)iPort);
local.sin_addr.s_addr = htonl(INADDR_ANY);
bind
(s, (SOCKADDR *)&local,
sizeof
(local));
recvbuf =
new char
;
dwSenderSize =
sizeof
(sender);
iRet =
recvfrom
(s, recvbuf, dwLength, 0, (SOCKADDR *)&sender, (
int
*) &dwSenderSize);
cout <<
"Od "
<< inet_ntoa(sender.sin_addr) <<
" odebrano wiadomosc: "
<< *recvbuf << endl;
memset(recvbuf,
'Z'
, dwLength);
connect
(s, (SOCKADDR *)&sender,
sizeof
(sender));
iRet =
send
(s, recvbuf, dwLength, 0);
cout <<
" Do "
<< inet_ntoa(sender.sin_addr) <<
" wyslano wiadomosc: "
<< *recvbuf << endl;
closesocket
(s);
delete
recvbuf;
WSACleanup
();
Obszar nazw System.Net.Sockets
Klasa UdpClient, IPEndPoint
Obiekty klasy UdpClient dostraczaj
ą
usług w protokole User Datagram Protocol.
Obiekt klasy IPEndPoint reprezentuje odbiorc
ę
danych poprzez jego adres IP i numer portu.
Programowanie aplikacji sieciowych w .Net. WinSock
1. Przypisanie warto
ś
ci parametrom pocz
ą
tkowym. Parametry:
ServerName, ServerPort, SendMessage
.
2. Utworzenie obiektu Client.
3. Wysłanie wiadomosci ‘
żą
danie Echa’.
4. Utworzenie obiektu IPEndPoint.
.Net. WinSock. Aplikacja UdpEchoClient.
String
server = “m40.math.uni.opole.pl”;
// nazwa lub adres IP serwera
int
servPort = 7;
// port serwera
byte
[] SendMessage =
Encoding
.ASCII.GetBytes(“Hello”);
//konwersja stringu “Hello” na tab. obiektów
UdpClient client =
new
UdpClient();
client.Send(SendMessage, SendMessage.Length, server, servPort);
IPEndPoint remoteIPEndPoint =
new
IPEndPoint(IPAddress.Any, 0);
5. Odebranie odpowiedzi Echa.
6. Zamkni
ę
cie obiektu Client.
.Net. WinSock. Aplikacja UdpEchoClient.
byte
[] rcvPacket = client.Receive(
ref
remoteIPEndPoint);
client.Close();
1. Przypisanie warto
ś
ci parametrom pocz
ą
tkowym.
2. Utworzenie obiektu client.
3. Utworzenie obiektu IPEndPoint.
4. Odebranie wiadomo
ś
ci “
żą
danie Echa”.
5. Wysłanie odpowiedzi Echa (wysłanie wiadomo
ś
ci Echo replay).
int
servPort = 7;
UdpClient client =
null
;
client =
new
UdpClient(servPort);
IPEndPoint remoteIPEndPoint =
new
IPEndPoint(IPAddress.Any, 0);
for
(;;)
// serwer odbiera datagramy w niesko
ń
czonej p
ę
tli.
byte
[] byteBuffer = client.Receive(
ref
remoteIPEndPoint);
client.Send(byteBuffer, byteBuffer.Length, remoteIPEndPoint);
Console.WriteLine(
"echoed {0} bytes."
, byteBuffer.Length);
.Net. WinSock. Aplikacja UdpEchoServer.
ActiveX Data Objects (ADO)
ADO jest
•
technologi
ą
firmy Microsoft.
•
komponentem Active-X (ACTIVE eXchange).
•
automatycznie instalowany z serwerem www Microsoft IIS.
•
interfejsem programowym dost
ę
pu do baz danych.
Kontrolka Active-X - wcze
ś
niejsza nazwa kontrolka OLE, jest przykładem obiektu typu COM, komponent
realizuj
ą
cy okre
ś
lon
ą
funkcjonalno
ść
, który mo
ż
e by
ć
zagnie
ż
d
ż
any w aplikacje, okna dialogowe, strony HTML.
Plik z rozszerzeniem *.ocx
Obiekty ADO:
ADO Command
ADO Connection
ADO Error
ADO Field
ADO Parameter
ADO Property
ADO Record
ADO Recordset
ADO Stream
ADO DataTypes
Co to jest ADO, ActiveX Data Objects?
Obiekt Command – stosowany do wykonania kwerend do bazy danych w celu utworzenia, uaktualnienia, dodania,
pobrania, usuni
ę
cia (create, add, retrieve, delete, update) rekordu.
Je
ż
eli kwerenda słu
ż
yła do pobrania danych, to dane s
ą
zwracane jako obiekt RecordSet (zbiór rekordów).
Oznacza to,
ż
e aby odzyska
ć
dane z obiektu (RecordSet) nale
ż
y posłu
ż
y
ć
si
ę
metodami, zdarzeniami, properties,
collections, obiektu Recordset.
Przykład u
ż
ycia.
Co to jest ActiveX Data Objects?
set objCommand=Server.CreateObject(
"ADODB.command"
)
set objConnection=Server.CreateObject(
"ADODB.connection"
)
Obiekt Connection –obiekt słu
ż
y do budowy i otwarcia poł
ą
czenia z baz
ą
danych.
Przykład u
ż
ycia.
Obiekt Error - obiekt zawiera dane o bł
ę
dach powstałych przy wykonaniu pojedynczych operacji na bazie danych.
Przykład u
ż
ycia.
Co to jest ActiveX Data Objects?
for
each objErr
in
objConn.Errors
response.write(objErr.Description )
response.write(objErr.HelpContext)
response.write(objErr.HelpFile)
response.write(objErr.NativeError)
response.write(objErr.Number)
response.write(objErr.Source)
response.write(objErr.SQLState)
next
Obiekt Field – obiekt przechowuje informacje o kolumnie danych w obiekcie Recordset.
Przykład u
ż
ycia.
set objField=Server.CreateObject(
"ADODB.field"
)
Co to jest ActiveX Data Objects?
Obiekt Parameter – obiekt słu
ż
y do uzyskania informacji o parametrach u
ż
ytych w procedurach składowanych (stored
procedures) lub kwerendach.
Cztery typy parametrów: input, output, input/output, return.
Przykład składni.
objectname.
property
objectname.method
Obiekt Property - obiekt reprezentuje dynamiczne charakterystyki obiektów ADO zdefiniowanych dla ró
ż
nych
typów baz danych (db providers).
Przykład u
ż
ycia.
set objProperty=Server.CreateObject(
"ADODB.property"
)
Obiekt Record (ADO ver. 2.5) – obiekt słu
ż
y do przechowania wiersza danych z Recordsetu, katalogu lub pliku.
Przykład u
ż
ycia:
Co to jest ActiveX Data Objects?
objectname.
property
objectname.method
Obiekt Recordset - obiekt słu
ż
y do przechowywania danych (zbioru rekordów) z tabeli. Obiekt Recordset
składa si
ę
z rekordów i kolumn (pól, ang. Fields).
Recordset mo
ż
e uaktualni
ć
dane na dwa sposoby: immediate updating, batch updating.
Przykład u
ż
ycia:
Obiekt Stream (ADO version 2.5) – obiekt stosowany do czytania, zapisywania, zarz
ą
dzania strumieniem
danych.
set objRecordset=Server.CreateObject(
"ADODB.recordset"
)
Kursory ADO s
ą
parametrami metod obiektów ADO.
Kursory definiuj
ą
usługi kursora (cursor service).
Typy kursorów ADO:
Dynamic cursor – pozwala na przegl
ą
d operacji dodania, zmiany, usuni
ę
cia wykonane przez innego u
ż
ytkownika.
Keyset cursor – usługa podobna do usługi kursora ‘dynamic’, za wyj
ą
tkiem: braku mo
ż
liwo
ś
ci przegl
ą
dania operacji
dodania przez innego u
ż
ytkownika, braku dost
ę
pu do rekordów które inny u
ż
ytkownik usun
ą
ł. Dane zmienione przez
innego u
ż
ytkownika s
ą
widoczne.
Static cursor – pozwala dokona
ć
‘statycznego’ kopiowania rekordsetów w celu znalezienia danych lub
wygenerowania raportów. Operacje dodania, zmiany, usuni
ę
cia wykonane przez innego u
ż
ytkownika s
ą
niewidoczne.
Typ kursora dost
ę
pny tylko dla obiektów typu klient rekordset.
Forward-only cursor – pozwala przejrze
ć
rekordset. Operacje dodania, zmiany, usuni
ę
cia wykonane przez innego
u
ż
ytkownika s
ą
niewidoczne.
Kursor Forward-only mo
ż
e by
ć
ustawiony poprzez property ‘CursorType’ lub poprzez parametr ‘CursorType’ w
metodzie Open().
Co to jest ActiveX Data Objects?
Proces budowy poł
ą
czenia z baz
ą
danych za pomoc
ą
obiektów ADO:
1.
Utworzenie poł
ą
czenia ADO z baz
ą
danych.
2.
Otwarcie poł
ą
czenia.
3.
Utworzenie recordseta.
4.
Otwarcie recordseta.
5.
Pobranie danych do recordseta.
6.
Zamkni
ę
cie recordseta.
7.
Zamkni
ę
cie poł
ą
czenia.
Co to jest ActiveX Data Objects?
Co to jest ActiveX Data Objects?
1-2. Utworzenie i otwarcie poł
ą
czenia z baz
ą
danych. Baza northwind.mdb.
Utworzenie i otwarcie poł
ą
czenia z baz
ą
danych za pomoc
ą
komponentu ODBC.
set conn=Server.CreateObject(
"ADODB.Connection"
)
conn.Provider=
"Microsoft.Jet.OLEDB.4.0"
conn.Open
"c:/webdata/northwind.mdb”
set conn=Server.CreateObject(
"ADODB.Connection"
)
conn.Open
"northwind"
3. Utworzenie recordseta.
set rs=Server.CreateObject(
"ADODB.recordset"
)
Co to jest ActiveX Data Objects?
4-5. Otwarcie i pobranie danych do recordseta.
Czytanie dnych z rekordseta.
6. Zamkni
ę
cie recordseta.
7. Zamkni
ę
cie poł
ą
czenia.
rs.Open
"Select * from Customers"
, conn
for each
x
in
rs.fields
response.write(x.name)
response.write(
" = "
)
response.write(x.value)
Next
rs.close
conn.close
Active Server Pages
ASP oznacza skrót Active Server Pages
ASP jest programem wykonywanym przez komponent IIS (Internet Information Services).
Plik *.asp mo
ż
e zawiera
ć
: tagi j
ę
zyka HTML, XML, skrytpy (VB scirpt, Java script, ….) .
Skrypty w plikach *.asp s
ą
wykonywane na serwerze.
Żą
dane strony *.asp przez przegladark
ę
internetow
ą
s
ą
przekazywane przez serwer WWW do silnika ASP,
skrypty s
ą
wykonywane i do klienta (przegladarki internetowej) zwracane s
ą
dane w formie HTML bez skryptów.
Zalet
ą
takiego rozwi
ą
zania jest,
ż
e przegl
ą
darki internetowe nie musz
ą
obsługiwa
ć ż
adnych j
ę
zyków
skryptowych.
Co to jest ASP?
ASP oznacza skrót Active Server Pages
ASP jest programem wykonywanym przez komponent IIS (Internet Information Services).
Plik *.asp mo
ż
e zawiera
ć
: tagi j
ę
zyka HTML, XML, skrytpy (VB scirpt, Java script, ….) .
Skrypty w plikach *.asp s
ą
wykonywane na serwerze.
Żą
dane strony *.asp przez przegladark
ę
internetow
ą
s
ą
przekazywane przez serwer WWW do silnika ASP,
skrypty s
ą
wykonywane i do klienta (przegladarki internetowej) zwracane s
ą
dane w formie HTML bez skryptów.
Zalet
ą
takiego rozwi
ą
zania jest,
ż
e przegl
ą
darki internetowe nie musz
ą
obsługiwa
ć ż
adnych j
ę
zyków
skryptowych.
Co to jest ASP?
Skrypty w plikach ASP zawarte s
ą
mi
ę
dzy znakami <% a… %>.
Przykład pliku *.asp.
Co to jest ASP?
<html>
<body>
<%
response.write(
"Hello World!"
)
%>
</body>
</html>
Co to jest ASP?
<%@ language=
"javascript"
%>
<html>
<body>
<%
Response.Write(
"Hello World!"
)
%>
</body>
</html>
Domy
ś
lnym j
ę
zykiem skryptowym dla stron ASP jest VBScript.
Aby zagnie
ź
dzi
ć
skrypty pisane w innych j
ę
zykach nale
ż
y u
ż
y
ć
atrybutu language.
Przykład: strona www wykonana w ASP.
Co to jest ASP?
<html>
<body>
<%
dim h
h=hour(now())
response.write(
"<p>"
& now())
response.write(
"</p>"
)
If h<12 then
response.write(
"Jest przed po
ł
udniem"
)
else
response.write(
"Jest po po
ł
udniu!"
)
end
if
%>
</body>
</html>
Usługi WWW
Web Services Architecture, W3C Working Group Note 11 February 2004
Us
ł
uga WWW (ang. web service) jest systemem aplikacyjnym zaprojektowanym w celu wspamagania wymiany danych
mi
ę
dzy w
ę
z
ł
ami w sieciach komputerowych. System aplikacyjny us
ł
ugi WWW posiada interfejs zaprojektowany w j
ę
zyku
WSDL. Inne systemy aplikacyjne wymieniaj
ą
wiadomo
ś
ci z systemem us
ł
ugi WWW za pomoc
ą
protoko
ł
u SOAP (tzn.
wiadomo
ś
ci przesy
ł
ane s
ą
za pomoc
ą
protoko
ł
u HTTP, dane s
ą
w formacie XML).
Formaln
ą
definicj
ę
us
ł
ugi WWW mo
ż
na znale
źć
w specyfikacji j
ę
zyka WSDL
http://www.w3.org/TR/wsdl
Us
ł
uga WWW korzysta z nast
ę
puj
ą
cych protoko
ł
ów i standardów:
• HTTP (ang. HyperText Transfer Protocol)
• SOAP (ang. Simple Object Access Protocol)
• UDDI (ang. Universal Description, Discovery and Integration)
• HTML (ang. HyperText Markup Language)
• XML (ang. eXtensible Markup Language) (xml, xml dtd, xml schema)
• WSDL (ang. Web Services Description Language)
Simple Object Access Protocol (SOAP)
SOAP jest protokolem s
ł
u
żą
cym aplikacjom sieciowym na wymian
ę
danych w protokole HTTP w których struktura danych
okre
ś
lona jest w formacie XML.
SOAP jest elementem architektury projektu Microsoft .NET.
Wi
ę
kszo
ść
aplikacji sieciowych komunikuje si
ę
w Internecie wykorzystuj
ą
c standardowe komponenty takie, jak obiekty
DCOM, obiekty CORBA. Obiekty te korzystaj
ą
z protokolu RPC (ang. Remote Procedure Calls). Wad
ą
tego sposobu
komunikacji jest to,
ż
e firewalle i serwery proxy blokuj
ą
tego typu komunikacj
ę
.
Firewalle i serwery proxy zazwyczaj nie blokuj
ą
komunikacji w protokole HTTP, tzn. port nas
ł
uchiwania serwera WWW jest
zazwyczaj otwarty.
Protokó
ł
SOAP zostal stworzony przez firm
ę
Microsoft w celu wymiany danych w protokole HTTP i formacie XML.
Simple Object Access Protocol (SOAP)
Cechy protoko
ł
u SOAP
• jest protoko
ł
em warstwy aplikacji w modelu OSI,
• jest protoko
ł
em zaprojektowanym do komunikacji w Internecie,
• definiuje format przesy
ł
anych wiadomo
ś
ci,
• jest protoko
ł
em niezale
ż
nym od platformy systemowej,
• jest niezale
ż
ny od j
ę
zyka implementacji us
ł
ugi WWW,
• jest oparty o j
ę
zyk XML,
• nie jest blokowany przez firewall’e.
Wiadomo
ść
SOAP ma struktur
ę
dokumentu XML i zawiera nast
ę
puj
ą
ce elementy (tagi):
• envelope, zawiera tre
ść
wiadomo
ś
ci,
• header, element opcjonaly, zawiera informacje nag
ł
ówkowe,
• body, zawiera zapytanie i odpowied
ź
.
Simple Object Access Protocol (SOAP)
Przyk
ł
ad: struktura widomo
ś
ci SOAP.
Pe
ł
na struktura widomo
ś
ci SOAP opisana jest w specyfikacji SOAP
http://www.w3.org/TR/soap/
<soap:Envelope>
<soap:Body>
<NazwaTagu1>
<Element1> … </Element1>
</NazwaTagu1>
</soap:Body>
</soap:Envelope>
Podstawowe zasady skladni protokolu SOAP:
• wiadomo
ść
SOAP musi by
ć
w formacie XML,
• wiadomo
ść
SOAP musi zawiera
ć
tag SOAP Envelope,
• wiadomo
ść
SOAP mo
ż
e zawiera
ć
tag SOAP Header,
• wiadomo
ść
SOAP musi zawiera
ć
tag SOAP Body,
• wiadomo
ść
SOAP musi korzysta
ć
z obszaru nazw SOAP Envelope,
• wiadomo
ść
SOAP musi korzysta
ć
z obszaru nazw SOAP encoding,
• wiadomo
ść
SOAP nie musi zawiera
ć
odno
ś
nikow do dokumentow DTD,
• wiadomo
ść
SOAP nie musi zawiera
ć
instrukcji xml (ang. XML Processing Instructions).
Dokument WSDL słu
ż
y do opisu usługi WWW.
Dokument WSDL umo
ż
liwia odnalezienie usługi WWW w Internecie.
Dokument WSDL jest dokumentem XML.
Specyfikacja j
ę
zyka WSDL znajduje si
ę
pod adresem http://www.w3.org/TR/wsdl/
Struktura dokumentu WSDL:
<portType> operacje wykonywane przez usług
ę
WWW
<message> wiadomosci wykorzystywane przez usług
ę
WWW
<types> typy danych wykorzystywane przez usług
ę
WWW
<binding> protokoly komunikacyjne wykorzystywane przez usług
ę
WWW.
Web Services Description Language
<definitions>
<types> definition of types........</types>
<message> definition of a message....</message>
<portType> definition of a port.......</portType>
<binding> definition of a binding....</binding>
</definitions>
Przykład. Prosty dokument wsdl.
1. Uruchomi
ć
serwer WWW (Microsoft IIS).
2. Umie
ś
ci
ć
w katalogu \wwwroot\ plik silnia.asmx (C:\Inetpub\wwwroot\silnia.asmx )
3. Utworzy
ć
Web Service Proxy.
\>wsdl http://adresSerweraWWW/silnia.asmx
wynik: silnia.cs
4. Utworzy
ć
dynamicznie doł
ą
czan
ą
bibliotek
ę
silnia.dll, tzn. skompilowa
ć
plik silnia.cs.
C:\Inetpub\wwwroot >csc /t:library silnia.cs
wynik: silnia.dll
5. Skompilowa
ć
program SilniaTest.cs z linkiem do biblioteki silnia.dll
C:\Inetpub\wwwroot> csc /r:silnia.dll SilniaTest.cs
Rezultat: SilniaTest.exe
6. Test usługi WWW.
Uruchomi
ć
program SilniaTest.exe (plik silnia.dll umie
ś
ci
ć
w tym samym katalogu co SilniaTest.exe).
C:\> SilniaTest.exe 8
Rezultat:
C:\> Usluga silnia. 8! = 40320
Usługa WWW: Silnia
Usługa silnia
Plik silnia.asmx
<%@ WebService Language=
"c#"
Class=
"Silnia"
%>
using
System;
using
System.Web.Services;
[WebService(Namespace=
"http://localhost/"
)]
public class
Silnia
: WebService
{
[WebMethod]
public int
silnia(
int
n)
{
if
(n == 0)
return
1;
else
return
(n * silnia(n - 1));
}
}
Plik silnia.cs
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3603
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using
System;
using
System.ComponentModel;
using
System.Diagnostics;
using
System.Web.Services;
using
System.Web.Services.Protocols;
using
System.Xml.Serialization;
//
// This source code was auto-generated by wsdl, Version=2.0.50727.3038.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(
"wsdl"
,
"2.0.50727.3038"
)]
[System.Diagnostics.
DebuggerStepThroughAttribute
()]
[System.ComponentModel.DesignerCategoryAttribute(
"code"
)]
[System.Web.Services.WebServiceBindingAttribute(Name=
"SilniaSoap"
, Namespace=
"http://localhost/"
)]
public partial class
Silnia
: System.Web.Services.Protocols.SoapHttpClientProtocol {
private
System.Threading.
SendOrPostCallback
silniaOperationCompleted;
/// <remarks/>
public
Silnia() {
this
.Url =
"http://localhost/silnia.asmx"
;
}
Plik silnia.cs ,cd. 1
/// <remarks/>
public event
silniaCompletedEventHandler silniaCompleted;
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(
"http://localhost/silnia"
,
RequestNamespace=
"http://localhost/"
, ResponseNamespace=
"http://localhost/"
,
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int
silnia(
int
n) {
object
[] results =
this
.Invoke(
"silnia"
,
new object
[] {
n});
return
((
int
)(results[0]));
}
/// <remarks/>
public
System.
IAsyncResult
Beginsilnia(
int
n, System.
AsyncCallback
callback,
object
asyncState) {
return this
.BeginInvoke(
"silnia"
,
new object
[] {
n}, callback, asyncState);
}
/// <remarks/>
public int
Endsilnia(System.
IAsyncResult
asyncResult) {
object
[] results =
this
.EndInvoke(asyncResult);
return
((
int
)(results[0]));
}
/// <remarks/>
public void
silniaAsync(
int
n) {
this
.silniaAsync(n,
null
);
}
Plik silnia.cs, cd. 2.
/// <remarks/>
public void
silniaAsync(
int
n,
object
userState) {
if
((
this
.silniaOperationCompleted ==
null
)) {
this
.silniaOperationCompleted =
new
System.Threading.
SendOrPostCallback
(
this
.OnsilniaOperationCompleted);
}
this
.InvokeAsync(
"silnia"
,
new object
[] {
n},
this
.silniaOperationCompleted, userState);
}
private void
OnsilniaOperationCompleted(
object
arg) {
if
((
this
.silniaCompleted !=
null
)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs =
((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this
.silniaCompleted(
this
,
new
silniaCompletedEventArgs(invokeArgs.Results, invokeArgs.Error,
invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
public new void
CancelAsync(
object
userState) {
base
.CancelAsync(userState);
}
}
Plik silnia.cs, cd. 3.
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(
"wsdl"
,
"2.0.50727.3038"
)]
public delegate void
silniaCompletedEventHandler(
object
sender, silniaCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(
"wsdl"
,
"2.0.50727.3038"
)]
[System.Diagnostics.
DebuggerStepThroughAttribute
()]
[System.ComponentModel.DesignerCategoryAttribute(
"code"
)]
public partial class
silniaCompletedEventArgs
: System.ComponentModel.AsyncCompletedEventArgs {
private object
[] results;
internal
silniaCompletedEventArgs(
object
[] results, System.
Exception
exception,
bool
cancelled,
object
userState) :
base
(exception, cancelled, userState) {
this
.results = results;
}
/// <remarks/>
public int
Result {
get
{
this
.RaiseExceptionIfNecessary();
return
((
int
)(
this
.results[0]));
}
}
}
Plik SilniaTest.cs
using
System;
class
SilniaTest
{
public static void
Main(
string
[] argv)
{
Silnia ms =
new
Silnia();
int
n =
Convert
.ToInt16(argv[0]);
int
wynik = ms.silnia(n);
Console
.WriteLine(
"Us
ł
uga silnia. {0}! = {1}"
,n, wynik );
}
}
Usługa silnia
Usługa silnia
Usługa silnia
Plik silnia.asmx
Usługa silnia
Common Object Request Broker Architecture (CORBA)
CORBA jest komercyjnym standardem Object Management Group (OMG).
http://www.omg.org/
Głównym celem grupy OMG jest upowszechnianie technologii zorientowanych obiektowo słu
żą
cych budowie du
ż
ych,
rozproszonych systemów informatycznych.
Aby zrealizowa
ć
swoj
ą
misj
ę
OMG stworzyła Model Referencyjny OMA (Object Management Architecture Reference
Model) definiuj
ą
cy standard architektury rozproszonych systemów Informatycznych, podstawy dla innych standardów i
specyfikacji:
•
Meta Object Facility (MOF) specification,
•
Unified Modeling Language (UML) specification,
•
XML Metadata Interchange (XMI) specification,
•
Common Warehouse Metamodel (CWM) specification,
•
Common Object Request Broker Architecture (CORBA) specification,
ułatwiaj
ą
cych tworzenia aplikacji w
ś
rodowisku rozproszonym.
Standard Corba
W modelu referencyjnym OMA komponenty systemu: klient, serwer, baza danych, interfejs s
ą
obiektami.
Obiektem jest dowolna encja która dostarcza usług
żą
danych przez klienta.
Główn
ą
zasad
ą
modelu OMA jest to,
ż
e ka
ż
dy obiekt jest albo obiektem
żą
daj
ą
cym usługi (klientem), obiektem
realizuj
ą
cym usług
ę
(serwerem) lub jednym i drugim.
Podstawowym elementem architektury w modelu OMA jest broker poprzez który obiekty komunikuj
ą
si
ę
mi
ę
dzy sob
ą
.
Komunikacja mi
ę
dzy obiektami odbywa sie poprzez interfejsy.
Standard Corba
System rozproszony to system typu klient-serwer w którym wyst
ę
puje du
ż
a ilo
ść
klientów i serwerów (multitier client-
server system).
Corba jest implementacj
ą
warstwy po
ś
redniej (middleware layer) w trójwarstwowej architekturze
systemu informatycznego:
•
Warstwa Prezentacji (Presentation Layer)
•
Warstwa Po
ś
rednia (middleware, Buisness Logic Layer)
•
Warstwa Danych (Data Layer).
Technologia wykorzystana do opracowania standardu Corby jest:
•
zorientowana obiektowo
•
oparta o zorientowane obiektowo interfejsy, interfejsy oddzielone s
ą
od implementacji obiektów (obiektów w cz
ęś
ci
klienta, serwera, brokera)
•
niezale
ż
na od platformy systemowej
•
niezale
ż
na od j
ę
zyka w którym implementowane s
ą
aplikacje (klient, serwer)
•
niezale
ż
na od lokalizacji klienta i serwera. Zadaniem brokera jest odebra
ć
zapytanie (request) od klienta, znale
źć
serwer, przekaza
ć
zapytanie na serwer, przekaza
ć
odpowied
ź
klientowi.
Standard Corba
Zadania brokera:
•
zarz
ą
dzanie poł
ą
czeniem klient-serwer,
•
zarz
ą
dzanie pami
ę
ci
ą
,
•
przekazywanie zapyta
ń
i odpowiedzi mi
ę
dzy klientem a serwerem,
•
kontrola dost
ę
pu do usług,
•
obsługa bł
ę
dów w komunikacji mi
ę
dzy klientem a serwerem,
•
zarz
ą
dzanie jako
ś
ci
ą
poł
ą
czenia (QoS).
Standard Corba
W modelu OMA rozró
ż
nia si
ę
cztery kategorie interfejsów:
•
Object Services, interfejsy wykorzystywane przez aplikacje pracuj
ą
ce w
ś
rodowisku rozproszonym.
•
Common Facilities, interfejsy do usług wykorzystywanych przez aplikacje niezale
ż
nie od ich
komercyjnego zastosowania.
•
Domain Interfaces, interfejsy specyficzne dla aplikacji z konkretnych podobszarów funkcjonalnych.
•
Application Interfaces, niestandaryzowane interfejsy dla konkretnych aplikacji.
Model Referencyjny OMA rozró
ż
nia cztery kategorie obiektów:
•
Obiekty ORB (Object Request Broker),
•
Obiekty usług (CORBAservices),
•
Obiekty standardowych usług (Common Facilities - CORBAfacilities),
•
Obiekty aplikacji (Application Objects).
Standard Corba
Obiekty Corby s
ą
to obiekty z interfejsami zdefiniowanymi w j
ę
zyku IDL.
Obiekty Corby maj
ą
ró
ż
n
ą
reprezentacj
ę
po stronie serwera i klienta:
•
Implementacja Obiektów Corby po stronie serwera nazywa sie servant’em (aplikacja ‘serwuj
ą
c
ą
’ usługi). Serwer
u
ż
ywa obiektów Corby zaimplementowanych w konkretnym j
ę
zyku (np. C++, Java).
Klasa w której zaimplementowany jest dany obiekt Corby nazywa sie ‘implementation class’.
Servant jest instancja klasy implementuj
ą
cej (implementation class) Obiekt Corby w konkretnej aplikacji (uwaga:
servant nie jest Obiektem Corby, jest implementacja obiektu Corby).
•
Klient tworzy obiekt proxy w celu wykorzystania obiektów na serwerze (servant’ow).
Klient który chce wykorzysta
ć
obiekt zaimplementowany przez serwer (wywoła
ć
servant’a) przekazuje wszystkie zapytania
(requests) poprzez brokera (ORB).
Standard Corba
Schemat generowania zapyta
ń
(requests) przez klienta do serwera wygl
ą
da nast
ę
puj
ą
co:
•
klient wywołuje lokalnie metod
ę
na obiekcie proxy,
•
ORB ‘pakuje’ parametry z jakimi została wywołana dana metoda i przekazuje na server,
•
ORB wywołuje wła
ś
ciw
ą
metod
ę
na servan’cie,
•
ORB zwraca wynik działania metody na serwerze do klienta.
Servant musi by
ć
poł
ą
czony z ORB tak, aby ORB mógł wywoływa
ć
metody na servan’cie gdy
klient generuje zapytanie (request). To poł
ą
czenie jest realizowane poprzez Portable Object Adapter (POA).
POA decyduje który servant b
ę
dzie wywołany gdy przychodzi
żą
danie od klienta i wywołuje danego servant’a.
Konfiguracja i kontrola poł
ą
czenia servant-ORB odbywa sie za pomoc
ą
POA Manager’ów.
Standard Corba
Fazy tworzenia sie obiektu POA na serwerze i budowy komunikacji z servant’em:
•
Aplikacja na serwerze pobiera referencje od root POA.
•
Aplikacja tworzy Policy dla tworzonego POA (przykłady policies: thread policy, lifespan policy, object
uniquenes policy).
•
Aplikacja tworzy ‘child’ POA z root POA (za pomoc
ą
metody create_POA() ).
•
Tworzenie i aktywowanie servanta.
•
Aktywowanie POA Managera (POA Manager to obiekt który kontroluje stan POA, tzn. kontroluje czy
ż
adania klienta s
ą
kolejkowane, przetwarzane czy odrzucone).
Aktywowanie POA Managera nast
ę
puje poprzez wywołanie metody activate():
rootPOA.the_POAManager().activate();
Standard Corba
Policy (Policies) to zbiór obiektów przypisanych root POA do kontroli zachowa
ń
POA i obiektów którymi POA zarz
ą
dza (POA
wygenerowane z POA rodzica nie dziedzicz
ą
Policy).
W wersji specyfikacji Corba 2.0 dodano protokół Internet inter-ORB Protocol (IIOP) wykorzystywany do przesyłania
widomo
ś
ci przez Internet.
Protokół IIOP jest implementacj
ą
dla TCP/IP abstrakcyjnego protokołu General inter-ORB protocol (GIOP),
tzn. IIOP wykorzystuje rodzin
ę
protokołów TCP/IP poni
ż
ej warsty Sesji modelu OSI.
Standard Corba
Standard Corby obejmuje nast
ę
puj
ą
ce specyfikacje:
•
Specyfikacja brokera, Object Request Broker (ORB) Core Specification
•
Specyfikacja protokołów komunikacyjnych GIP, IIOP (Interoperbillity GIOP, IIOP Specification)
•
Specyfikacja j
ę
zyka IDL (Interface Definition Languae spcification)
•
Specyfikacje ‘mapowania’ j
ę
zyka IDL na j
ę
zyki programowania (np. C++, Java, Smaltalk, Ada, ...)
•
Specyfikacja interfejsów SII, DII (Static Interface Invocation, Dynamic Invocation Interface specification)
•
Specyfikacja interfejsów SSI, DSI (Static Skeleton Interface, Dynamic Skeleton Interface)
•
Specyfikacje POA (Portable Object Adapter specification)
•
Zbiór specyfikacji serwisów Corby.
Standard Corba
Przykładowe narz
ę
dzia (kompilatory IDL, brokerzy) do budowy aplikacji w Corbie:
•
Progress® Orbacus, Progress® Orbix
http://web.progress.com/
•
Visibroker®
http://www.borland.com/
Zgodny ze specyfikacj
ą
Corba 3.0.
Interpeter IDL dla Java, C+, C#.
•
The Inter-Language Unification system (ILU) is a multi-language object interface system
ftp://ftp.parc.xerox.com/pub/ilu/ilu.html
•
omniORB,
http://omniorb.sourceforge.net/
•
MICO,
http://www.mico.org/
Brokerzy i narz
ę
dzia Corby