Escolar Documentos
Profissional Documentos
Cultura Documentos
Viso Geral
Linguagens de Programao Heterogneas
Modelo de objetos comum Linguagem de definio de interfaces comum Mapeamentos para linguagens de programao
Motivao
Os componentes de sistemas distribudos so escritos em diferentes linguagens de programao Estas linguagens de programao podem ou no impor seus prprios modelos de objetos Modelos de objetos variam bastante Estas diferenas precisam ser contornadas para facilitar a integrao
Original: Wolfgang Emmerich, 2000
PL6
PL3
PL6
IDL
PL3
PL5
PL4
PL5
PL4
Ada-95
C
Cobol
Original: Wolfgang Emmerich, 2000
Java
Definido de maneira genrica o suficiente para permitir mapeamentos para a maioria das linguagens de programao
Original: Wolfgang Emmerich, 2000
example.idl
// example.idl typedef string<80> NameStr; interface Player { readonly attribute NameStr name; };
example.idl (cont.)
interface Team { readonly attribute NameStr name; exception InvalidNumber{}; exception NumberOccupied{}; exception NoPlayerAtNumber{}; void add(in Player aPlayer, in short number) raises (InvalidNumber,NumberOccupied); void remove(in short number) raises (InvalidNumber,NoPlayerAtNumber); string print(); }; interface TeamFactory { Team createTeam(in NameStr teamname); }; Original: Wolfgang Emmerich, 2000 Prof. Fbio M. Costa - Instituto de Informtica / UFG
10
Client
Person Server
Team Server
11
Diagrama de Interaes
main Team (Client Stub) ORB TeamDispatch (Server Skeleton) Team Server
request reply
request reply
12
13
PlayerServer.hh
#include "example.hh" class PlayerServer:public virtual PlayerBOAImpl{ private: char * the_player_name; public: PlayerServer(); virtual NameStr name(); virtual void set_name(char *); }; class PlayerFactoryServer : public virtual PlayerFactoryBOAImpl { virtual Player * createPlayer(NameStr); };
Original: Wolfgang Emmerich, 2000
14
PlayerServer.cc
#include "PlayerServer.hh" NameStr PlayerServer::name(){ char * ret; ret = new char[strlen(the_player_name)+1]; strcpy(ret,the_player_name); return(ret); }; Player * PlayerFactoryServer::createPlayer( NameStr name) { PlayerServer * aPlayer = new PlayerServer; aPlayer->set_name(name); aPlayer->_duplicate(); return aPlayer; }; Original: Wolfgang Emmerich, 2000 Prof. Fbio M. Costa - Instituto de Informtica / UFG
15
PlayerServer.cc (cont.)
int main(int argc, char* argv[]) { PlayerFactoryServer myplayergenerator; try { CORBA::BOA.impl_is_ready("PlayerFactory"); } catch (const Exception &excpt) { // an error occured calling impl_is_ready() cerr << excpt; } }
16
17
TeamServer.hh
#include "example.hh" class TeamServer : public virtual TeamBOAImpl { private: Player * the_team[MAXPLAYERS+1]; char * the_team_name; public: virtual void set_name(char *); virtual NameStr name(); virtual void add(Player *, short); virtual void remove(short); virtual char * print(); }; class TeamFactoryServer : public virtual TeamFactoryBOAImpl { virtual Team * createTeam(NameStr); }; Original: Wolfgang Emmerich, 2000
Prof. Fbio M. Costa - Instituto de Informtica / UFG
18
TeamServer.cc
#include "TeamServer.hh" void TeamServer::add(Player *aPlayer,short num){ if (num<1 || num > MAXPLAYERS) { throw(InvalidNumber); } else if ((the_team[num]!=NULL)) { throw(NumberOccupied); } else { aPlayer->_duplicate(); the_team[num]=aPlayer; } Demais mtodos: remove, print };
Original: Wolfgang Emmerich, 2000
19
TeamServer.cc (cont.)
Team* TeamFactoryServer::createTeam( NameStr name) { TeamServer * aTeam = new TeamServer; aTeam->set_name(name); aTeam->_duplicate(); return(aTeam); }; int main(int argc, char* argv[]) { TeamFactoryServer myteamgenerator; try { CORBA::BOA.impl_is_ready("TeamFactory"); } catch (const Exception &excpt) { cerr << excpt; } Original: Wolfgang Emmerich, 2000 Prof. Fbio M. Costa - Instituto de Informtica / UFG }
20
Client.cc
#include "example.hh" int main(int argc, char* argv[]) { PlayerFactory * pf; TeamFactory * tf; Team * t; Player *goalkeeper, *forward; char * output; //obtain references for player and team factory ...
21
Client.cc (cont.)
try { t=tf->createTeam("Germany"); } catch (const Exception &excpt) { cerr << "Unexpected exception " << excpt; exit(1); } cout<< "successfully created team "<< t->name(); try { goalkeeper=pf->createPlayer("Stefan Klos"); forward=pf->createPlayer("Andy Moeller"); } catch (const Exception &excpt) { cerr << "Unexpected exception " << excpt ; exit(1); Original: Wolfgang Emmerich, 2000
Prof. Fbio M. Costa - Instituto de Informtica / UFG 22
Client.cc (cont.)
output=goalkeeper->name(); cout << "created player " << output << endl; output=forward->name(); cout << "created player " << output << endl; try { t->add(goalkeeper,1); t->add(forward,10); output=t->print(); cout << output << endl; } catch (const Exception &excpt) { cerr << excpt << endl; exit(1); } } Original: Wolfgang Emmerich, 2000
Prof. Fbio M. Costa - Instituto de Informtica / UFG
23
Motivao
Component Component Component Component Component Component Component
Middleware Vendor A
Middleware Vendor B
Middleware Vendor C
25
26
OLE ORB
ORB
ORB
RPC
Bridge
Bridge
Original: Wolfgang Emmerich, 2000
27
Pontes
in-line
Client
Em nvel de requisies
Client
DSI
DII
Obj. Imp.
Obj. Imp.
28
Integrao de Middleware
Interoperabilidade: habilidade de diferentes implementaes do mesmo padro de middleware operarem em conjunto
Requer a definio de protocolos de interao
29
30
31
Protocolos de Interoperabilidade
Applications CORBA 2.0 GIOP ........ ESIOP
IIOP
DOETalk
DCE-CIOP
........
32
33
34
35
OMG ainda no oferece suporte para documentos compostos e interfaces com o usurio COM e OLE no suportam distribuio
embora DCOM, introduzido posteriormente, o faa
36
Inter-Funcionamento COM-CORBA
Objetivo: prover um mapeamento bi-direcional e transparente entre COM/OLE e CORBA A especificao adotada foi submetida em conjunto por 11 fabricantes de ORBs
A maioria deles j tinha esta habilidade de interfuncionamento implementada em seus ORBs Adotada em maro de 1996
37
Arquitetura de Inter-Funcionamento
Sistema de Objetos A ref. de obj. em A Ponte ref. de obj. em B implementao de objeto em B Sistema de Objetos B
38
Instanciaes Especficas
Bridge
Bridge
CORBA objref
Bridge
CORBA objref
Bridge
Automation object
Automation server
39
40
CORBA COM
Habilita clientes COM a fazerem acesso a objetos CORBA Mapeamento razoavelmente bvio:
Tipos atmicos de IDL so semelhantes aos tipos primitivos de COM Tipos estruturados: idem Referncias de objeto CORBA mapeiam para ponteiros de interface COM Herana de interfaces em CORBA pode ser representada por meio de objetos COM com mltiplas interfaces Atributos CORBA so mapeados para operaes get e set em COM
Original: Wolfgang Emmerich, 2000
41
O Problema
Os computadores onde residem cliente e servidor podem usar diferentes formatos de representao de dados
Servidores RISC/Unix: big-endian Estaes NT e PCs/Unix: little endian
n+3 little-endians memory n+2 n+1 n
sign
n big-endians
Original: Wolfgang Emmerich, 2000
n+1
n+2
n+3
memory
sign
Prof. Fbio M. Costa - Instituto de Informtica / UFG 43
O Problema (cont.)
Diferentes esquemas de codificao de caracteres
P EBCDIC ASCII ISO-8859-1 UCS D7 50 50 r 99 72 72 e 85 65 65 u e n 95 6E 6E 40 20 20 M n s A2 73 73 t A3 74 74 e 85 65 65 r 99 72 72
A4 A2 A2 85 75 73 73 65 75 DF 65
D4 A4 85 95 4D 75 76 6E 4D FC 6E
0050 0072 0065 0075 00DF 0065 006E 0020 004D 00FC 006E 0073 0074 0065 0072
44
O Problema (cont.)
Diferentes linguagens de programao usam diferentes representaes de dados Exemplo: cadeias de caracteres em Pascal e em C++:
Pascal memria memria
3 a
a b
b c
c \0
C++
45
O Problema (cont.)
Representao little endian e big endian de uma seqncia:
sequence<unsigned short>:[2,3]
Big endian 0 0 0 2 0 2 0 3 Little endian 2 0 0 0 2 0 3 0
46
Motivao
Representaes de dados precisam ser convertidas entre objetos clientes e servidores heterogneos Esta converso deve ser transparente para o desenvolvedor de aplicaes A converso pode ser feita:
na implementao da camada de apresentao na implementao da camada de aplicao na implementao da plataforma
Original: Wolfgang Emmerich, 2000
47
Abordagens
Camada de apresentao: Representao de Dados Padronizada
XDR da Sun (eXternal Data Representation) CDR da OMG (Common Data Representation)
48
50
Type Alignment Type Alignment Type Alignment char 1 long 4 double 4 octet 1 long long 8 boolean 1 short 2 float 4 enum 4
51
54
55
SGML
Usada na rea de automao de escritrios
XML
Intercmbio de dados estruturados na Web
56
57
58
59
60
Pontos-Chave
Heterogeneidade pode ocorrer em vrios nveis:
Linguagem de Programao Middleware Representao de Dados
CORBA e COM resolvem a heterogeneidade de linguagem de programao atravs de uma IDL com mapeamentos para vrias linguagens Heterogeneidade de middleware resolvida atravs de especificaes de interoperabilidade e inter-funcionamento
Original: Wolfgang Emmerich, 2000
61
Pontos-Chave
Heterogeneidade de dados pode ser resolvida atravs de:
Representaes de dados padronizadas
CDR, NDR, XDR
Mquinas Virtuais
JVM, Python VM, etc.
62