background image

Budowa aplikacji sieciowych

dr Zbigniew Lipi

ń

ski

Instytut Matematyki i Informatyki

ul. Oleska 48

50-204 Opole

zlipinski@math.uni.opole.pl

background image

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. 

background image

3

Component Object Model  (COM)

COM+ 

Distributed Component Object Model  (DCOM)

background image

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.

ś

rodowisku .Net obiekty COM+ s

ą

zdefiniowane w obszarze nazw System.EnterpriseServices.

Co to jest COM+?

background image

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+?

background image

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)?

background image

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)?

background image

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 ?

background image

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;

background image

Do identyfikacji klas i interfejsów stosuje si

ę

ż

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 ?

background image

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.

background image

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.

background image

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.

background image

Java Remote Method Invocation 

background image

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?

background image

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

background image

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?

background image

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 IIOP.  
W tej warstwie mo

ż

e te

ż

by

ć

zaimplementowana transmisja bezpoł

ą

czeniowa w protokole UDP.

Co to jest Java RMI?

background image

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 obiektami serwera.  

Co to jest Java RMI?

background image

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. 

background image

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?

background image

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?

background image

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. 

background image

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

();

background image

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. 

background image

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

();

background image

Obszar nazw System.Net.Sockets

Klasa UdpClientIPEndPoint

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

background image

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);

background image

5. Odebranie odpowiedzi Echa.

6. Zamkni

ę

cie obiektu Client.

.Net. WinSock. Aplikacja UdpEchoClient.

byte

[] rcvPacket = client.Receive(

ref

remoteIPEndPoint); 

client.Close();

background image

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.

background image

ActiveX Data Objects (ADO)

background image

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?

background image

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.

background image

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"

)

background image

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"

background image

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"

background image

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?

background image

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?

background image

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"

)

background image

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

in

rs.fields

response.write(x.name)

response.write(

" = "

)

response.write(x.value)

Next

rs.close

conn.close

background image

Active Server Pages

background image

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?

background image

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?

background image

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>

background image

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.

background image

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>

background image

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)

background image

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.

background image

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

ź

.

background image

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).

background image

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.

background image

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

background image

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));

}

}

background image

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"

;

}

background image

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

);

}

background image

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);

}

}

background image

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]));

}

}

}

background image

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

background image

Usługa silnia

background image

Usługa silnia

background image

Plik silnia.asmx 

Usługa silnia

background image

Common Object Request Broker Architecture (CORBA)

background image

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

background image

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

background image

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

background image

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

background image

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

background image

Obiekty Corby s

ą

to obiekty z interfejsami zdefiniowanymi w j

ę

zyku IDL.

Obiekty Corby maj

ą

ż

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

background image

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

background image

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

background image

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

background image

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

background image

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