5. comunicacao entre processos i

16
 1 Unidade 5 Unidade 5 Comunicação Comunicação entre Processos entre Processos n n Pipes Pipes n n Sockets Sockets n n RMI RMI n n CORBA CORBA 2 Comunicação entre Processos Comunicação entre Processos n Processos e Processos e threads threads interagem para interagem para trabalhar conjuntamente em um sistema trabalhar conjuntamente em um s istema n n Trocam dados / mensagens Trocam dados / mensagens n n Utilizam os serviços de comunicação fornecidos Utilizam os serviços de comunicação fornecidos pela máquina e pelo S.O. pela máquina e pelo S.O. n n Seguem protocolos de comunicação para que Seguem protocolos de comunicação para que possam entender uns aos outros possam entender uns aos outros 3 Comunicação entre Processos Comunicação entre Processos n Protocolos Protocolos n n Estabelecem Estabelecem caminhos caminhos virtuais virtuais de de comunicação comunicação entre entre processos processos / threads  / threads n n Duas Duas entidades entidades precisam precisam usar usar os os mesmos mesmos protocolos protocolos para para trocar trocar informações informações Protocolo Meio de Transmissão 4 Comunicação entre Processos Comunicação entre Processos n Protocolos Protocolos Pede conex ão tempo  Aceita conexão Confirma recep ção Fecha conex ão Liberaconexão Envia mensa gem Com licença… Poisnão… São 8 h oras. Obrigado! De nada. Que hor as são? 5 2 2 Canal de Comunicação Comunicação entre Processos Comunicação entre Processos n Serviços Serviços de de comunicação comunicação n n Serviço Serviço sem sem Conexão Conexão: cada cada unidade unidade de dados de dados é é enviada enviada independentemente independentemente das das demais demais n n Serviço Serviço com com Conexão Conexão: dados : dados são são enviados enviados através através de um canal de de um canal de comunicação comunicação  + + 2 2 6 Comunicação entre Processos Comunicação entre Processos n Características dos serviços de Características dos serviços de comunicação entre comunicaç ão entre processos/threads processos/threads : n n Abrangência: local ou remo ta  Abrangência: local ou rem ota n n Participantes: 1 Participantes: 1 à à 1, 1 1, 1 à à N ou M N ou M à à N n n Tamanho das mensagens: fixo ou vari Tamanho das mensagens: fixo ou variável; vel; limitado ou não limitado ou não n n Sincronismo: comunica Sincronismo: comunicaç ção s ão sí í ncrona, ncrona, ass assí í ncrona ou semi ncrona ou semi-s sí í ncrona ncrona

Upload: leonardo-nogueira

Post on 06-Jul-2015

51 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 1/15

 

1

Unidade 5Unidade 5

ComunicaçãoComunicaçãoentre Processosentre Processos

nn PipesPipesnn SocketsSocketsnn RMIRMInn CORBACORBA

2

Comunicação entre ProcessosComunicação entre Processos

nn Processos eProcessos e threadsthreads interagem parainteragem paratrabalhar conjuntamente em um sistematrabalhar conjuntamente em um sistemann Trocam dados / mensagensTrocam dados / mensagensnn Utilizam os serviços de comunicação fornecidosUtilizam os serviços de comunicação fornecidos

pela máquina e pelo S.O.pela máquina e pelo S.O.nn Seguem protocolos de comunicação para queSeguem protocolos de comunicação para que

possam entender uns aos outrospossam entender uns aos outros

3

Comunicação entre ProcessosComunicação entre Processos

nn ProtocolosProtocolosnn EstabelecemEstabelecem caminhoscaminhos virtuaisvirtuais dede

comunicaçãocomunicação entreentre processosprocessos / threads / threadsnn DuasDuas entidadesentidades precisamprecisam usarusar osos mesmosmesmos

protocolosprotocolos parapara trocartrocar informaçõesinformações

Protocolo 

Meio de Transmissão 

4

Comunicação entre ProcessosComunicação entre Processos

nn ProtocolosProtocolosPede conexão

tempo

 Aceita conexão

Confirma recepção

Fecha conexão

Libera conexão

Envia mensagem

Com licença…

Pois não…

São 8 horas.

Obrigado!

De nada.

Que horas são?

5

22 Canal de Comunicação

Comunicação entre ProcessosComunicação entre Processos

nn ServiçosServiços dede comunicaçãocomunicaçãonn ServiçoServiço semsem ConexãoConexão:: cadacada unidadeunidade de dadosde dados

éé enviadaenviada independentementeindependentemente dasdas demaisdemais

nn ServiçoServiço comcom ConexãoConexão: dados: dados sãosão enviadosenviadosatravésatravés de um canal dede um canal de comunicaçãocomunicação

 

++

22

6

Comunicação entre ProcessosComunicação entre Processos

nn Características dos serviços deCaracterísticas dos serviços decomunicação entrecomunicação entre processos/threadsprocessos/threads::nn Abrangência: local ou remota Abrangência: local ou remotann Participantes: 1Participantes: 1 àà 1, 11, 1 àà N ou MN ou M àà NNnn Tamanho das mensagens: fixo ou variTamanho das mensagens: fixo ou variáável;vel;

limitado ou nãolimitado ou nãonn Sincronismo: comunicaSincronismo: comunicaçção são sí í ncrona,ncrona,

assassí í ncrona ou semincrona ou semi--ssí í ncronancrona

Page 2: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 2/15

 

2

7

Comunicação entre ProcessosComunicação entre Processos

nn APIs de APIs de comunicaçãocomunicaçãonn PermitemPermitem queque aplicaçõesaplicações troquemtroquem dadosdadosnn FornecemFornecem primitivasprimitivas dede comunicaçãocomunicação queque

podempodem serser chamadaschamadas aa partirpartir dodo códigocódigonn ProvêemProvêem acessoacesso aosaos serviçosserviços dede comunicaçãocomunicação,,

queque podempodem assimassim serser usadosusados pelaspelas aplicaçõesaplicações

Programa

 API API

S.O.S.O.8

Comunicação entre ProcessosComunicação entre Processos

nn APIs APIs de Comunicação dede Comunicação de SistSist. Operacionais. Operacionaisnn Mecanismos fornecidosMecanismos fornecidos

pelos S.O.’s permitempelos S.O.’s permitemenviar mensagensenviar mensagens(trechos de memória)(trechos de memória)de um processo a outrode um processo a outro

nn Alguns S.O.’s permitem Alguns S.O.’s permitemque sejam criadasque sejam criadasáreas de memóriaáreas de memóriacompartilhadas entrecompartilhadas entredois ou mais processosdois ou mais processos

memóriaPP11 PP22

PP11 PP22

8

9

Comunicação entre ProcessosComunicação entre Processos

nn ExemplosExemplos de APIs dede APIs de comunicaçãocomunicação::nn Pipes:Pipes: canaiscanais dede comunicaçãocomunicação locaislocaisnn Sockets:Sockets: portasportas dede comunicaçãocomunicação locaislocais ouou dede

rederede ((versãoversão segurasegura: SSL): SSL)nn SuportesSuportes de RPC (de RPC (Remote Procedure Call Remote Procedure Call ):):

permitempermitem chamarchamar procedimentos/métodosprocedimentos/métodos

remotamenteremotamente (ex.: RMI, CORBA, COM, …)(ex.: RMI, CORBA, COM, …)nn CanaisCanais dede eventoseventos:: permitempermitem notificarnotificar threadsthreads

ee processosprocessos dosdos eventoseventos ocorridosocorridos nono sistemasistema(Ex.: JMS, CORBA Notification Service, …)(Ex.: JMS, CORBA Notification Service, …)

nn ……10

Comunicação entre ProcessosComunicação entre Processos

nn Mecanismos de IPC nativos do UNIXMecanismos de IPC nativos do UNIXnn Pipes Pipes 

nn Sockets Sockets (comunicação local ou remota)(comunicação local ou remota)nn Mecanismos de IPC nativos do WindowsMecanismos de IPC nativos do Windows

nn Pipes Pipes  ee Mailslots Mailslots 

nn

WinSock WinSock (comunicação local ou remota)(comunicação local ou remota)nn Microsoft RPC (comunicação local ou remota)Microsoft RPC (comunicação local ou remota)nn Memória compartilhada:Memória compartilhada: File File Mapping Mapping  ee

Dynamic Dynamic Data Exchange Data Exchange (DDE)(DDE)nn Object Object Linking Linking and and Embedding Embedding (OLE)(OLE)

10

11

Comunicação entre ProcessosComunicação entre Processos

nn RPCRPC – – Chamada Remota de ProcedimentoChamada Remota de Procedimentonn Segue o modelo Cliente/ServidorSegue o modelo Cliente/Servidornn Muito usado na interação entre objetosMuito usado na interação entre objetosnn Objeto servidor possui interface com métodosObjeto servidor possui interface com métodos

que podem ser chamados remotamenteque podem ser chamados remotamentenn Objetos clientes usam serviços de servidoresObjetos clientes usam serviços de servidores

… x = Servidor.Soma(y,z);…

Cliente

*Soma(int y, int z) {

return(y+z);}

Servidor

+

12

Comunicação entre ProcessosComunicação entre Processos

nn RPCRPC – – CaracterísticasCaracterísticasnn EmEm geralgeral asas requisiçõesrequisições sãosão pontoponto--aa--pontoponto ee

síncronassíncronasnn DadosDados sãosão tipadostipadosnnParâmetros da requisiçãoParâmetros da requisiçãonnRetorno doRetorno do procedimento/métodoprocedimento/métodonnExceçõesExceções

nn Um objeto pode ser cliente e servidor emUm objeto pode ser cliente e servidor emmomentos diferentesmomentos diferentes

Page 3: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 3/15

 

3

13

Comunicação entre ProcessosComunicação entre Processos

nn NotificaçãoNotificação de Eventosde Eventosnn Eventos ocorridos são difundidos porEventos ocorridos são difundidos por

produtores e entregues a consumidoresprodutores e entregues a consumidoresnn Canal de eventos permite oCanal de eventos permite o ddesacoplamentoesacoplamento – –

produtor e consumidor não precisam se conhecerprodutor e consumidor não precisam se conhecer

Canal de

Eventos

Consumidores deEventos

Produtores deEventos

14

Comunicação entre ProcessosComunicação entre Processos

nn NotificaçãoNotificação dede EventosEventos – – CaracterísticasCaracterísticasnn EnvioEnvio dede eventoseventos éé completamentecompletamente assíncronoassíncrononnProdutorProdutor nãonão precisaprecisa aguardaraguardar fimfim dodo envioenvionnEventoEvento éé armazenadoarmazenado no canal deno canal de eventoseventos

nn ComunicaçãoComunicação podepode serser feitafeita atravésatravés de UDPde UDPmulticast multicast  ouou fazendofazendo múltiplosmúltiplos enviosenvios unicast unicast com TCP, UDPcom TCP, UDP ouou com umcom um suportesuporte de RPCde RPC

nn OsOs eventoseventos podempodem terter tamanhotamanho fixofixo ououvariávelvariável,, limitadolimitado ouou ilimitadoilimitado

nn EventosEventos podempodem serser tipadostipados ouou nãonão

15

Thread 2Thread 1

PipesPipes

nn PipesPipes = canais de comunicação= canais de comunicaçãonn DuasDuas threadsthreads podem trocar dados por umpodem trocar dados por um pipepipeàà comunicação de 1 para 1comunicação de 1 para 1

nn ThreadsThreads devem rodar na mesma máquinadevem rodar na mesma máquinavirtualvirtual àà comunicacomunicaçção localão local

22

 

PIPE 22

16

PipesPipes

nn Disponíveis em Java através das classesDisponíveis em Java através das classesPipedInputStreamPipedInputStream ee PipedOutputStreamPipedOutputStream

nn Principais métodos:Principais métodos:nn Criação dosCriação dos PipesPipes::

is =is = newnew PipedInputStreamPipedInputStream();();

os =os = newnew PipedOutputStreamPipedOutputStream(is);(is);nn Envio e recepção de bytes /Envio e recepção de bytes / arraysarrays de bytes:de bytes:is.is.readread(dado)(dado)os.os.writewrite(dado); os.flush();(dado); os.flush();

nn Exceção:Exceção: java java..ioio..IOExceptionIOException

17

PipesPipes

nn Uso deUso de PipesPipes com fluxos (com fluxos (streams streams ) de dados) de dadosnn Criação do fluxo:Criação do fluxo:

in =in = newnew java java..ioio..DataInputStreamDataInputStream(is);(is);out =out = newnew java java..ioio..DataOutputStreamDataOutputStream(os);(os);

nn Envio e recepção de dados:Envio e recepção de dados:<<tipo tipo > var = in.> var = in.read<read<tipo tipo >();>();out.out.write<write<tipo tipo >(var);>(var);ondeonde <<tipo tipo >> = Int,= Int, LongLong,, FloatFloat,, DoubleDouble, etc., etc.

18

PipesPipes

 

public class Producer extends Thread {private DataOutputStream out;private Random rand = new Random();public Producer(PipedOutputStream os) {

out = new DataOutputStream(os); }public void run() {while (true)

try {int num = rand.nextInt(1000);out.writeInt(num);out.flush();sleep(rand.nextInt(1000));

} catch(Exception e) { e.printStackTrace(); }}

}

Page 4: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 4/15

 

4

19

PipesPipes

 

public class Consumer extends Thread {private DataInputStream in;public Consumer(PipedInputStream is) {

in = new DataInputStream(is); }public void run() {

while(true)try {

int num = in.readInt();System.out.println("Número recebido: " + num);

} catch(IOException e) { e.printStackTrace(); }}

}

20

PipesPipes

 

public class PipeTest {public static void main(String args[]) {try {

PipedOutputStream out = new PipedOutputStream();PipedInputStream in = new PipedInputStream(pout);

Producer prod = new Producer(out);Consumer cons = new Consumer(in);

prod.start();cons.start();

} catch (IOException e) { e.printStackTrace(); }}

}

21

PipesPipes

nn Uso deUso de PipesPipes com fluxos de objetoscom fluxos de objetosnn Criação do fluxo:Criação do fluxo:

in =in = newnew java java..ioio..ObjectInputStreamObjectInputStream(is);(is);out =out = newnew java java..ioio..ObjectOutputStreamObjectOutputStream(os);(os);

nn Envio e recepção de objetos:Envio e recepção de objetos:<<classe classe > obj = (<> obj = (<classe classe >) in.>) in.readObjectreadObject();();out.out.writeObjectwriteObject(obj);(obj);ondeonde <<classe classe >> = classe do objeto= classe do objeto lido/enviadolido/enviado

nn Envio e recepção deEnvio e recepção de StringsStrings::StringString strstr = in.= in.readUTFreadUTF();();out.out.writeUTFwriteUTF((strstr););

22

SocketsSockets

nn SocketSocketnn Abstração Abstração queque representarepresenta umauma portaporta dede comucomu--

nicaçãonicação bidirecionalbidirecional associadaassociada a uma um processoprocesso

nn PrincipaisPrincipais TiposTipos de Socketde Socketnn SocketSocket DatagramaDatagrama:: envia/recebeenvia/recebe datagramasdatagramas

semsem criarcriar conexãoconexão;; usausa protocoloprotocolo UDPUDPnn Socket Multicast:Socket Multicast: receberecebe asas mensagensmensagens

endereçadasendereçadas a uma um grupogrupo;; usausa UDP multicastUDP multicastnn Socket Stream:Socket Stream: estabeleceestabelece umauma conexãoconexão comcom

outrooutro socket;socket; usausa protocoloprotocolo TCPTCP

23

SocketsSockets

nn OperaçõesOperações comcom SocketsSockets DatagramaDatagramann CriarCriar um socketum socket datagramadatagrama::

DatagramSocketDatagramSocket s = news = new DatagramSocket(portaDatagramSocket(porta););

nn CriarCriar pacotespacotes de dadosde dados parapara envioenvio::DatagramPacketDatagramPacket pack = newpack = new DatagramPacket(msgDatagramPacket(msg,,tamanhotamanho,, destinodestino,, portaporta););

nn EnviarEnviar dados:dados: s.send(pack s.send(pack ););

nn CriarCriar pacotespacotes de dadosde dados parapara recepçãorecepção::DatagramPacketDatagramPacket pack = newpack = new DatagramPacket(msg,tamDatagramPacket(msg,tam););

nn ReceberReceber dados:dados: s.receive(pack s.receive(pack ););

nn LerLer dados dodados do pacotepacote:: pack.getDatapack.getData()()24

SocketsSockets

nn SocketsSockets DatagramaDatagrama – – EnvioEnviotry {

DatagramSocket socket = new DatagramSocket();InetAddress destino = InetAddress.getByName(

"127.0.0.1");String mensagem = "Hello";byte[] dados = mensagem.getBytes();int porta = 1234;DatagramPacket pacote = new DatagramPacket(

dados, dados.length, destino, porta);socket.send(pacote);

} catch (SocketException e) { e.printStackTrace();} catch (IOException e) {e.printStackTrace(); }

Page 5: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 5/15

 

5

25

SocketsSockets

nn SocketsSockets DatagramaDatagrama – – RecepçãoRecepçãot ry {

int porta = 1234;DatagramSocket socket = new DatagramSocket(porta);byte[] dados = new byte[100];DatagramPacket pacote = new DatagramPacket(

dados, dados.length);socket.receive(pacote);String mensagem = new String(pacote.getData(), 0,

pacote.getLength() );System.out.println("Mensagem: " + mensagem);

} catch (SocketException e) { e.printStackTrace();} catch (IOException e) {e.printStackTrace(); }

26

SocketsSockets

nn SocketsSockets MulticastMulticastnn PermitemPermitem oo envioenvio simultâneosimultâneo dede datagramasdatagramas aa

gruposgrupos dede destinatáriosdestinatáriosnn GruposGrupos multicastmulticast sãosão identificadosidentificados porpor

endereçosendereços IP de 224.0.0.0 a 239.255.255.255IP de 224.0.0.0 a 239.255.255.255

GrupoMulticast

Emissores

 

27

SocketsSockets

nn SocketsSockets MulticastMulticastnn Vários Vários emissoresemissores podempodem mandarmandar mensagensmensagens

parapara oo grupogrupo ((ouou sejaseja,, mensagensmensagens vãovão dedeXX emissoresemissores®® Y  Y receptoresreceptores))

nn EmissorEmissor nãonão precisaprecisa fazerfazer parteparte dodo grupogrupo paraparaenviarenviar mensagensmensagens aoao grupogrupo, e, e nemnem precisaprecisa

sabersaber quemquem sãosão osos seusseus membrosmembros;; bastabastaconhecerconhecer oo endereçoendereço IP doIP do grupogruponn O receptor entra em um grupo (se torna umO receptor entra em um grupo (se torna um

membro do grupo) e passa a receber asmembro do grupo) e passa a receber asmensagens destinadas ao grupomensagens destinadas ao grupo

28

SocketsSockets

nn SocketsSockets MulticastMulticast – – EnvioEnviotry {

DatagramSocket socket = new DatagramSocket();InetAddress grupo = InetAddress.getByName(

"200.1.2.3");String mensagem = "Hello";byte[] dados = mensagem.getBytes();

int porta = 1234;DatagramPacket pacote = new DatagramPacket(dados, dados.length, grupo, porta);

socket.send(pacote);} catch (SocketException e) { e.printStackTrace();} catch (IOException e) { e.printStackTrace(); }

29

SocketsSockets

nn SocketsSockets MulticastMulticast – – RecepçãoRecepçãotry {

int porta = 1234;MulticastSocket msocket = new MulticastSocket(porta);InetAddress grupo = InetAddress.getByName(

"230.1.2.3");msocket.joinGroup(grupo);byte[] dados = new byte[100];DatagramPacket pacote = new DatagramPacket(

dados, dados.length);msocket.receive(pacote);System.out.println("Mensagem: " +

new String(pacote.getData(), 0, pacote.getLength()));} catch (Exception e) {e.printStackTrace(); } 30

SocketsSockets

nn Sockets StreamSockets Streamnn EstabelecemEstabelecem canaiscanais dede comunicaçãocomunicação entreentre

aplicaçõesaplicações,, permitindopermitindo trocatroca de dadosde dados pelapela rederedenn Adotam Adotam oo paradigmaparadigma clientecliente--servidorservidornnClienteCliente:: pedepede parapara conectarconectar aoao servidorservidornnServidorServidor:: aguardaaguarda conexõesconexões dosdos clientesclientes

Cliente * Servidor

Page 6: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 6/15

 

6

31

SocketsSockets

nn OperaçõesOperações comcom SocketsSockets StreamStream no Servidorno Servidornn CriarCriar um socketum socket servidorservidor::

ServerSocketServerSocket s = news = new ServerSocket(portaServerSocket(porta,, maxClientesmaxClientes););

nn Aguardar Aguardar conexãoconexão:: Socket c =Socket c = s.accepts.accept();();

nn ObterObter nomenome do hostdo host conectadoconectado::String host =String host = c.getInetAddress().getHostNamec.getInetAddress().getHostName();();

nn CriarCriar fluxosfluxos dede comunicaçãocomunicação::ObjectInputStreamObjectInputStream in = newin = new

ObjectInputStream(c.getInputStreamObjectInputStream(c.getInputStream());());ObjectOutputStreamObjectOutputStream out = newout = new

ObjectOutputStream(c.getOutputStreamObjectOutputStream(c.getOutputStream());());

nn FecharFechar conexãoconexão:: in.closein.close();(); out.closeout.close();(); c.closec.close();();32

SocketsSockets

nn OperaçõesOperações comcom SocketsSockets StreamStream no Clienteno Clientenn CriarCriar um socketum socket clientecliente::

Socket c =Socket c = new Socket(new Socket( InetAddressInetAddress..getByName("getByName("servidor.com servidor.com "),"), portaporta ););

nn CriarCriar fluxofluxo,, enviarenviar ee receberreceber dados, edados, e fecharfechar::idemidem aoao servidorservidor

nn ExceçõesExceções geradasgeradasnn SocketExceptionSocketExceptionnn UnknownHostExceptionUnknownHostExceptionnn IOExceptionIOException

33

SocketsSockets

nn SocketsSockets StreamStream – – ServidorServidort ry {

ServerSocket s = new ServerSocket(1234, 10);Socket c = s.accept();ObjectOutputStream out = new ObjectOutputStream(

c.getOutputStream());output.flush();ObjectInputStream input = new ObjectInputStream(

c.getInputStream() );String mensagem = (String) input.readObject();String resposta = "Olá Cliente";output.writeObject(mensagem);output.flush();

} catch (Exception e) { e.printStackTrace(); }34

SocketsSockets

nn SocketsSockets StreamStream – – ClienteClientetry {

Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 1234);

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

output.flush();

ObjectInputStream input = new ObjectInputStream(socket.getInputStream() );String mensagem = "Olá Servidor";output.writeObject(mensagem);output.flush();String resposta = (String) input.readObject();

} catch (Exception e) { e.printStackTrace(); }

35

JVMJVM

Java RMIJava RMI

nn Java RMIJava RMI ((Remote Remote Method Method Invocation Invocation ))nn ForneceFornece um suporteum suporte simplessimples parapara RPC/RMIRPC/RMInn Permite que um objetoPermite que um objeto JavaJava chame métodoschame métodos

dede outrooutro objetoobjeto JavaJava rodandorodando em outraem outra JVMJVMnn Solução específica para a plataforma JavaSolução específica para a plataforma Java

InternetClienteCliente ServidorServidor

36

JVMJVM

Java RMIJava RMI

nn Arquitetura RMI Arquitetura RMInn Stub Stub ee Skeleton Skeleton nn CamadaCamada dede referênciareferência remotaremotann CamadaCamada dede transportetransporte

Camada de Transporte

Camada de Referência Remota

SkeletonStub

Cliente Servidor

Page 7: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 7/15

 

7

37

Java RMIJava RMI

nn S S tub tub 

nn RepresentaRepresenta oo servidorservidor parapara oo clienteclientenn EfetuaEfetua serializaçãoserialização ee envioenvio dosdos parâmetrosparâmetrosnn RecebeRecebe aa respostaresposta dodo servidorservidor,, desserializadesserializa ee

entregaentrega aoao clientecliente

nn S S keleton keleton 

nn RecebeRecebe aa chamadachamada ee desserializadesserializa ososparâmetrosparâmetros enviadosenviados pelopelo clientecliente

nn FazFaz aa chamadachamada nono servidorservidor ee retornaretorna ooresultadoresultado aoao clientecliente

38

Java RMIJava RMI

nn CCamada de Referência Remotaamada de Referência Remotann R R esponsávelesponsável pelapela localizaçãolocalização dosdos objetosobjetos nasnas

máquinasmáquinas dada rederedenn PermitePermite queque referênciasreferências parapara umum objetoobjeto

servidorservidor remotoremoto sejamsejam usadasusadas pelospelos clientesclientesparapara chamarchamar métodosmétodos

nn CCamada de Transporteamada de Transportenn CriaCria ee gerenciagerencia conexõesconexões dede rederede entreentre

objetosobjetos remotosremotosnn Elimina a necessidade do código do cliente ouElimina a necessidade do código do cliente ou

do servidor interagirem com o suporte de rededo servidor interagirem com o suporte de rede

39

Java RMIJava RMI

nn DinâmicaDinâmica dada ChamadaChamada RMIRMInn OO servidorservidor,, aoao iniciariniciar, se, se registraregistra nono serviçoserviço dede

nomesnomes (RMI(RMI Registry Registry ))nn OO clientecliente obtémobtém umauma referênciareferência parapara oo objetoobjeto

servidorservidor nono serviçoserviço dede nomesnomes ee criacria aa stub stub 

nn OO clientecliente chamachama oo métodométodo nana stub stub  fazendofazendo

umauma chamadachamada locallocalnn A A stub stub serializaserializa osos parâmetrosparâmetros ee transmitetransmite aa

chamadachamada pelapela rederede parapara oo skeleton skeleton dodo servidorservidor

40

Java RMIJava RMI

nn DinâmicaDinâmica dada ChamadaChamada RMI (cont.)RMI (cont.)nn OO skeleton skeleton dodo servidorservidor receberecebe aa chamadachamada pelapela

rederede,, desserializadesserializa osos parâmetrosparâmetros ee fazfaz aachamadachamada dodo métodométodo nono objetoobjeto servidorservidor

nn OO objetoobjeto servidorservidor executaexecuta oo métodométodo ee retornaretornaum valorum valor parapara oo skeleton skeleton ,, queque oo desserializadesserializa eeoo enviaenvia pelapela rederede àà stub stub dodo clientecliente

nn A A stub stub receberecebe o valor doo valor do retornoretorno serializadoserializado, o, odesserializadesserializa ee porpor fimfim oo repassarepassa aoao clientecliente

41

Java RMIJava RMI

nn SerializaçãoSerialização de Dadosde Dadosnn É precisoÉ preciso serializarserializar ee deserializardeserializar osos

parâmetrosparâmetros dada chamadachamada e valores de retornoe valores de retornopara transmitipara transmiti--los através da redelos através da rede

nn Utiliza o sistema deUtiliza o sistema de serializaçãoserialização de objetos dade objetos damáquina virtualmáquina virtualnnTiposTipos predefinidospredefinidos dada linguagemlinguagemnnObjetosObjetos serializáveisserializáveis:: implementamimplementam

interfaceinterface java.io.serializable java.io.serializable

42

Java RMIJava RMI

nn Desenvolvimento de Aplicações com RMIDesenvolvimento de Aplicações com RMInn Devemos definir a interface do servidorDevemos definir a interface do servidornn A interface do servidor deve estender A interface do servidor deve estender java java..rmirmi..RemoteRemote ou uma classe delaou uma classe deladerivada (ex.:derivada (ex.: UnicastRemoteObjectUnicastRemoteObject))nnTodos os métodos da interface devemTodos os métodos da interface devem

prever a exceçãoprever a exceção java java..rmirmi..RemoteExceptionRemoteExceptionnnO Servidor irá implementar esta interfaceO Servidor irá implementar esta interface

nn Stubs Stubs ee skeletons skeletons são gerados pelo compiladorsão gerados pelo compiladorRMI (RMI (rmicrmic) com base na interface do servidor) com base na interface do servidor

Page 8: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 8/15

 

8

43

Java RMIJava RMI

nn Java RMIJava RMI – – Interface do ServidorInterface do Servidornn É implementada pelo servidorÉ implementada pelo servidornn É chamada pelo clienteÉ chamada pelo clientenn Estende a interfaceEstende a interface java java..rmirmi..RemoteRemotenn Todos os métodos devem prever a exceçãoTodos os métodos devem prever a exceção java java..rmirmi..RemoteExceptionRemoteException

public interface HelloWorld extends java.rmi.Remote {public String hello() throws java.rmi.RemoteException;

}

44

Java RMIJava RMI

nn Java RMIJava RMI – – Implementação do ServidorImplementação do Servidorimport java.rmi.*;import java.rmi.server.*;public class HelloServer extends UnicastRemoteObject

implements HelloWorld {public HelloServer() throws RemoteException {super();}public String hello() throws RemoteException {

return "Hello!!!";}public static void main(String[] args) {

try {HelloServer servidor = new HelloServer();Naming.rebind("//localhost/HelloWorld", servidor);

} catch (Exception e) { e.printStackTrace(); }}

}

45

Java RMIJava RMI

nn Java RMIJava RMI – – Implementação do ClienteImplementação do Clientepublic class HelloClient {

public static void main(String[] args) {try {

HelloWorld servidor = (HelloWorld) java.rmi.Naming.lookup("//localhost/HelloWorld");

String msg = servidor.hello();

System.out.println("Mensagem do Servidor: "+msg);} catch (Exception e) { e.printStackTrace(); }}

}

46

Java RMIJava RMI

nn RMI/IIOPRMI/IIOPnn A A partirpartir do Java 2.0, o RMIdo Java 2.0, o RMI passoupassou aa permitirpermitir

aa utilizaçãoutilização dodo protocoloprotocolo IIOP (Internet InterIIOP (Internet Inter--ORB Protocol) do CORBAORB Protocol) do CORBA

nn IIOPIIOP tambémtambém usausa TCP/IP,TCP/IP, masmas converteconverte ososdadosdados parapara umum formatoformato padrãopadrão ((seralizaçãoseralização ououmarshalling marshalling )) diferentediferente do Java RMIdo Java RMI

nn Com RMI/IIOP,Com RMI/IIOP, objetosobjetos JavaJava podempodem sesecomunicarcomunicar comcom objetosobjetos CORBA,CORBA, queque podempodemserser escritosescritos emem outrasoutras linguagenslinguagens

47

CORBACORBA

nn CORBACORBAnn Common Common Object Object Request Request Broker Broker Architecture  Architecture 

nn Padrão definido pela OMG (Padrão definido pela OMG (Object Object Manage Manage - - ment ment Group Group ), que reúne cerca de 800), que reúne cerca de 800empresas interessadas no desenvolvimento deempresas interessadas no desenvolvimento desoftware orientado a objetossoftware orientado a objetos

nn Permite a interação entre objetos distribuídosPermite a interação entre objetos distribuídosnn Fornece um suporte completoFornece um suporte completo parapara

desenvolver aplicações distribuídas orientadasdesenvolver aplicações distribuídas orientadasa objetosa objetos

48

CORBACORBA

nn CORBA proporciona total transparência paraCORBA proporciona total transparência paraos Objetos Distribuídosos Objetos Distribuídosnn Transparência de LinguagemTransparência de LinguagemnnObjetos implementados em várias linguagensObjetos implementados em várias linguagensnn Interfaces de objetos descritas em IDLInterfaces de objetos descritas em IDL

nn Transparência de S.O. e HardwareTransparência de S.O. e Hardwarenn Implementado em várias plataformas:Implementado em várias plataformas:

Windows,Windows, LinuxLinux,, SolarisSolaris, AIX, HP, AIX, HP--UX, etc.UX, etc.nn Transparência de Localização dos ObjetosTransparência de Localização dos ObjetosnnReferências podem apontar para objetos emReferências podem apontar para objetos em

outras máquinasoutras máquinas

Page 9: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 9/15

 

9

49

CORBACORBA

nn IDL (IDL (Interface Interface Definition Definition Language Language ))nn UsadaUsada parapara descreverdescrever as interfaces deas interfaces de objetosobjetosnn LinguagemLinguagem ppuramenteuramente declarativa,declarativa, ssemem

nenhuma estrutura algorítmicanenhuma estrutura algorítmicann Sintaxe e tipos de dados baseados emSintaxe e tipos de dados baseados em C/C++C/C++nn Define seus próprios tipos de dados, que sãoDefine seus próprios tipos de dados, que são

mapeados nos tipos de dados de cadamapeados nos tipos de dados de cadalinguagem de programação suportadalinguagem de programação suportada

nn Mapeada para diversas linguagensMapeada para diversas linguagensnnC, C++, Java,C, C++, Java, DelphiDelphi, COBOL,, COBOL, PythonPython, ADA,, ADA,

Smalltalk Smalltalk , LISP, ..., LISP, ... 50

nn Compilador IDLCompilador IDLnn Gera todo o código responsável por:Gera todo o código responsável por:

nn Fazer a comunicação entre objetosFazer a comunicação entre objetosnn Fazer o mapeamento dos tipos de dadosFazer o mapeamento dos tipos de dados

definidos em IDL para a linguagem usadadefinidos em IDL para a linguagem usadana implementaçãona implementação

nn Fazer as conversões de dados necessáriasFazer as conversões de dados necessáriasna comunicação (na comunicação (serializaçãoserialização / / marshalling marshalling dos dados)dos dados)

CORBACORBA

51

CORBACORBA

nn Interação entre objetos no CORBAInteração entre objetos no CORBAnn Segue o modelo ClienteSegue o modelo Cliente--ServidorServidor

nn Cliente: faz requisições emCliente: faz requisições em objsobjs. remotos. remotosnn Implementação de objeto: implementa osImplementação de objeto: implementa os

serviços descritos na sua interfaceserviços descritos na sua interface

Object Request Broker

Implementaçãode Objeto

Cliente

52

CORBACORBA

nn Arquitetura Arquitetura do ORBdo ORB

CORBA

Núcleo do ORB

 Adaptador

de Objetos

Skeleton 

Dinâmico

Skeleton 

IDLInterfacedo ORB

Stubs IDL

InvocaçãoDinâmica

Implementaçãode Objeto

Cliente

Repositóriode Interface

Repositório deImplementação

53

CORBACORBA

nn InvocaInvocaççãoão dede OperaOperaççõesões RemotasRemotasnn FormasFormas dede invocainvocaççãoão::nnEstEstááticatica:: atravatravéés des de stubsstubs ee skeletonsskeletons

gerados com base na descrigerados com base na descriçção daão dainterface do servidor em IDLinterface do servidor em IDL;; ouounnDDinâmicainâmica:: atravatravééss dada interface deinterface de

invocainvocaçção dinâmica do CORBAão dinâmica do CORBAnn OO servidor não percebe o tipo deservidor não percebe o tipo de

invocainvocaçção utilizado na requisião utilizado na requisiçção peloão peloclientecliente

54

nn Stubs Stubs IDLIDLnn GGeraderadaas pelo compiladors pelo compilador IDLIDL com base nacom base na

descrição da interface do objetodescrição da interface do objetonn Usadas na invocação estáticaUsadas na invocação estáticann O clienteO cliente conhece a interface, o método e osconhece a interface, o método e os

parâmetrosparâmetros em tempo de compilaçãoem tempo de compilação

nn Skeletons Skeletons IDLIDLnn GGeraderadaas pelo compiladors pelo compilador IDLIDLnn Interface estática para os serviços (métodos)Interface estática para os serviços (métodos)

remotos executados pelo servidorremotos executados pelo servidor

CORBACORBA

Page 10: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 10/15

 

10

55

nn Interface de Invocação Dinâmica (DII)Interface de Invocação Dinâmica (DII)nn Permite que o cliente construa uma invocaçãoPermite que o cliente construa uma invocação

em tempo de execuçãoem tempo de execuçãonn Elimina a necessidade dasElimina a necessidade das Stubs Stubs IDLIDLnn Com a DII,Com a DII, novos tipos de objetosnovos tipos de objetos podempodem serser

adicionados ao sistema em tempo de execuçãoadicionados ao sistema em tempo de execuçãonn OO cliente especifica o objeto, o método e ocliente especifica o objeto, o método e oss

parâmetros com uma seqüência de chamadasparâmetros com uma seqüência de chamadasnn O servidor continua recebendo as requisiçõesO servidor continua recebendo as requisições

através de seuatravés de seu skeletonskeleton IDLIDL

CORBACORBA

56

nn Adaptador de Objetos Adaptador de Objetosnn Interface entre o suporte e os objetosInterface entre o suporte e os objetos

servidoresservidoresnn Transforma um objeto escrito em umaTransforma um objeto escrito em uma

linguagem qualquer em um objeto CORBAlinguagem qualquer em um objeto CORBAnn Usado para geração e interpretação deUsado para geração e interpretação de

referências de objetos, invocação dosreferências de objetos, invocação dosSkeletons Skeletons , ativação e desativação de, ativação e desativação deimplementações de objetos, etc.implementações de objetos, etc.

nn Existem vExistem váários tipos de adaptador de objetorios tipos de adaptador de objeto

CORBACORBA

57

nn Portable Portable Object Object Adapter  Adapter (POA)(POA)nn Adaptador padrão: torna o servidor portável Adaptador padrão: torna o servidor portável

entre implementações diferentesentre implementações diferentesnn Abstrai a identidade do objeto da sua Abstrai a identidade do objeto da sua

implementaçãoimplementaçãonn Implementa políticas de gerenciamento deImplementa políticas de gerenciamento de

threads threads ::nnumauma thread thread por objetopor objetonnumauma thread thread por requisiçãopor requisiçãonngrupo (grupo (pool pool ) de) de threads threads 

nnetc etc ..

CORBACORBA

58

CORBACORBA

nn InteroperabilidadeInteroperabilidadenn CORBA garante a interoperabilidade entreCORBA garante a interoperabilidade entre

objetos que usem diferentes implementaçõesobjetos que usem diferentes implementaçõesde ORBde ORB

nn Solução adotada a partir do CORBA 2.0Solução adotada a partir do CORBA 2.0nn

Padronizar o protocolo de comunicação e oPadronizar o protocolo de comunicação e oformato das mensagens trocadasformato das mensagens trocadasnnFoi definido um protocolo geral, que éFoi definido um protocolo geral, que é

especializado para vários ambientesespecializado para vários ambientesespecíficosespecíficos

59

CORBACORBA

nn Interoperabilidade (cont.)Interoperabilidade (cont.)nn ProtocoloProtocolo InterInter--ORBORB Geral (GIOP)Geral (GIOP)nnEEspecificaspecifica um conjunto de mensagens eum conjunto de mensagens e

dados para a comunicação entredados para a comunicação entre ORBsORBsnn Especializações do GIOPEspecializações do GIOPnnProtocolo InterProtocolo Inter--ORBORB parapara IInternetnternet (IIOP):(IIOP):

specificaspecifica como mensagens GIOP sãocomo mensagens GIOP sãotransmitidas numa rede TCP/IPtransmitidas numa rede TCP/IP

nnProtocoloProtocoloss InterInter--ORB para AmbienteORB para AmbientessEspecíficoEspecíficos: ps: permitermitemem a interoperabilidadea interoperabilidadedo ORB com outros ambientes (ex.: DCEdo ORB com outros ambientes (ex.: DCE,,

 ATM ATM nativonativo, etc., etc.)) 60

CORBACORBA

nn InteroperaInteroperabbiilliiddaaddee entre CORBA e Java RMIentre CORBA e Java RMInn Une as vantagens das duas tecnologiasUne as vantagens das duas tecnologiasnn Applets Applets,, ServletsServlets e aplicações Java podem sere aplicações Java podem ser

clientes CORBA usandoclientes CORBA usando RMI/IIOPRMI/IIOP ou ORB Javaou ORB Javann Mapeamentos: IDLMapeamentos: IDLàà JavaJava ee JavaJava àà IDLIDL

nn Interoperabilidade entre CORBA e DCOMInteroperabilidade entre CORBA e DCOMnn Permite que objetos DCOM acessem serviçosPermite que objetos DCOM acessem serviços

oferecidos por objetos CORBA e viceoferecidos por objetos CORBA e vice--versaversann BridgesBridges convertem mensagens entre osconvertem mensagens entre os

ambientes, integrando o DCOM a plataformasambientes, integrando o DCOM a plataformasnas quais ele não está disponívelnas quais ele não está disponível

Page 11: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 11/15

 

11

61

nn Serviços CORBAServiços CORBAnn Coleção de serviços em nível de sistemaColeção de serviços em nível de sistemann Oferecem funcionalidades básicas paraOferecem funcionalidades básicas para

utilizar e implementar os objetos deutilizar e implementar os objetos deaplicações distribuídasaplicações distribuídas

nn Especificam as interfaces e casos de uso,Especificam as interfaces e casos de uso,deixando a implementação de ladodeixando a implementação de lado

nn Estendem ou complementam asEstendem ou complementam asfuncionalidades do ORBfuncionalidades do ORB

nn Independentes da aplicaçãoIndependentes da aplicação

CORBACORBA

62

Aplicações Distribuídas

Object Request Broker (ORB)

Sistema Operacional e Serviços de Rede

Serviços CORBA

Consulta

Licenciamento

Propriedade

Tempo

Segurança

Trader 

Coleção

Replicação

Notificação

Gerenciamento

........

........

Transação

Concorrência

Relacionamento

Externalização

Nomeação

Eventos

Ciclo de vida

Persistente

CORBACORBA

63

CORBACORBA

nn Passos p/ desenvolverPassos p/ desenvolverum servidor CORBAum servidor CORBAnnDefinir a interfaceDefinir a interface

IDL do servidorIDL do servidornnCompilar a IDLCompilar a IDL

(gerar o(gerar o skeleton skeleton ))nn Implementar osImplementar os

métodos do servidormétodos do servidornnCompilarCompilarnnExecutarExecutar

nn Passos p/ desenvolverPassos p/ desenvolverum cliente CORBAum cliente CORBAnnObter a IDL doObter a IDL do

servidorservidornnCompilar a IDL doCompilar a IDL do

servidor (gerarservidor (gerar stub stub ))nnImplementar oImplementar o

código do clientecódigo do clientennCompilarCompilarnnExecutarExecutar

nn Desenvolvimento de AplicaçõesDesenvolvimento de Aplicações

 

64

CORBACORBA

Especificação

do Servidor 

Arquivo

IDL

Especificação

do Cliente

Compilador IDL

Stubs

IDL

Skeletons

IDL

Executáveldo Cliente

0101010101010101010101010101

01010101010101

01010101010101

Executáveldo Servidor 0101010101010101010101010101

01010101010101

01010101010101

Compilador daLinguagem do Cliente

Compilador daLinguagem do Servidor 

Código

do Cliente

Código

do Servidor 

65

CORBACORBA

nn Elementos de uma especificação IDLElementos de uma especificação IDLnn MódulosMódulosnnDefinições de Tipos, Constantes e ExceçõesDefinições de Tipos, Constantes e Exceçõesnn InterfacesInterfaces

nnDefinições de Tipos, Constantes eDefinições de Tipos, Constantes eExceçõesExceçõesnn Atributos AtributosnnOperações (métodos)Operações (métodos)

66

CORBACORBA

nn MódulosMódulosnn Define escopo das declarações em seu interiorDefine escopo das declarações em seu interior

modulemodule identident {{ // // declaraçõesdeclarações dede tipotipos,s, constantes e exceçõesconstantes e exceções // // declaraçõesdeclarações de interfacesde interfaces

};};nn InterfacesInterfaces

nn Descrevem a interface de um objeto CORBADescrevem a interface de um objeto CORBAinterfaceinterface ident ident :: interfaces_herdadas interfaces_herdadas {{ // // declaraçõesdeclarações dede tipotipos,s, constantes e exceçõesconstantes e exceções // // declaraçõesdeclarações dede atributos eatributos e operaçõesoperações

};};

Page 12: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 12/15

 

12

67

CORBACORBA

nn Exemplo: BancoExemplo: Bancomodule Banco { // ...interface AutoAtendimento { // ...

};interface CaixaEletronico: AutoAtendimento { // ...

};};

68

CORBACORBA

nn TiposTipos BásicosBásicos IDLIDLnn bbooleanoolean:: tipotipo booleanobooleano, valor TRUE ou FALSE, valor TRUE ou FALSEnn charchar:: caractere de 8 bits, padrão ISOcaractere de 8 bits, padrão ISO LatinLatin--11nn sshorthort:: inteiro curto com sinal;inteiro curto com sinal; --221515 a 2a 21515--11nn llongong:: inteiro longo com sinal;inteiro longo com sinal; --223131 a 2a 23131--11nn unsignedunsigned shortshort: i: inteironteiro curto sem sinal; 0 a 2curto sem sinal; 0 a 21616--11nn unsignedunsigned longlong:: inteiro longo sem sinal; 0 a 2inteiro longo sem sinal; 0 a 23232--11nn f f loatloat:: real curto, padrão IEEE 754/1985real curto, padrão IEEE 754/1985nn ddoubleouble:: real longo, padrão IEEE 754/1985real longo, padrão IEEE 754/1985nn ooctetctet:: 1 byte, nunca convertido na1 byte, nunca convertido na transmisstransmissãoãonn aanyny:: corresponde a qualquer tipo IDLcorresponde a qualquer tipo IDL

69

CORBACORBA

nn TiposTipos BásicosBásicos IDL (cont.)IDL (cont.)nn ObjectObject:: corresponde a um objetocorresponde a um objeto CORBACORBAnn longlong longlong: inteiro de 64 bits;: inteiro de 64 bits; – –226363 a 2a 26363--11nn unsignedunsigned longlong longlong: inteiro de 64 bits sem: inteiro de 64 bits sem

sinal; 0 a 2sinal; 0 a 26464--11nn longlong doubledouble: real duplo longo padrão IEEE;: real duplo longo padrão IEEE;

base com sinal de 64 bits e 15 bits de expoentebase com sinal de 64 bits e 15 bits de expoentenn wcharwchar: caractere de 2 bytes, para suportar: caractere de 2 bytes, para suportar

diversos alfabetosdiversos alfabetosnn fixed<nfixed<n,,dd>>: real: real dede precisãoprecisão fixafixa;; n algarismosn algarismos

significativossignificativos e de d casascasas decimaisdecimais70

CORBACORBA

nn Arrays Arraysnn Array de Array de tamanhotamanho fixofixo::

tipo tipo ident ident [[tam tam anho anho ]];;nn Array de Array de tamanhotamanho variávelvariável semsem limitelimite máximomáximo

((tamanho efetivotamanho efetivo definidodefinido durante a execuçãodurante a execução))sequencesequence <<tipo tipo >> ident ident ;;

nn Array de Array de tamanhotamanho variávelvariável c/c/ tamanhotamanho máxmáx.:.:sequencesequence <<tipo tipo ,,tamanho tamanho >> ident ident ;;nn ObsObs.:.: tipo tipo == qualquerqualquer tipotipo IDLIDL

ident ident == identificadoridentificador únicoúnico dada variávelvariáveltamanho tamanho == númeronúmero inteirointeiro

71

CORBACORBA

nn StringsStringsnn SSeqüênciaeqüência de caracteresde caracteres semsem limitelimite dede

tamanhotamanho::stringstring ident ident ;;  // // seqüênciaseqüência dede char’schar’swstringwstring ident ident ;;  // // seqüênciaseqüência dede wchar’swchar’s

nn SSeqüênciaeqüência de caracteres com tamanhode caracteres com tamanhomáximo definidomáximo definido::string <string <tamanho tamanho >> ident ident ;;wstringwstring <<tamanho tamanho >> ident ident ;;

72

CORBACORBA

nn EEstruturastrutura de dados (registro)de dados (registro)nn Tipo composto por váriosTipo composto por vários camposcampos

structstruct ident ident {{tipo tipo ident ident ;;

 // // maismais camposcampos ......};};

nn LListaista enumeradaenumeradann ListaLista comcom valoresvalores de umde um tipotipo

enumenum ident ident { /*lista de valores*/ };{ /*lista de valores*/ };

Page 13: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 13/15

 

13

73

CORBACORBA

nn UUniãonião discriminadadiscriminadann Tipo composto comTipo composto com seleçãoseleção de campode campo porpor

cláusulacláusula switcswitch/h/case;case; oo seletorseletor devedeve serser tipotipoIDLIDL inteiro,inteiro, charchar,, booleanboolean ouou enumenumunionunion ident ident switch (switch (seletor seletor ){){

casecase valor valor :: tipo tipo ident ident ;; // // maismais camposcampos ......defaultdefault:: tipo tipo ident ident ;;

};};

74

CORBACORBA

nn ExceçõesExceçõesnn São estruturas de dados retornadas por umaSão estruturas de dados retornadas por uma

operação para indicar que uma situaçãooperação para indicar que uma situaçãoanormal ocorreu durante sua execuçãoanormal ocorreu durante sua execução

nn Cada exceção possui um identificador e umaCada exceção possui um identificador e umalista de campos que informam aslista de campos que informam ascondições nas quais a exceção ocorreucondições nas quais a exceção ocorreuexceptionexception ident ident {{ // lista de campos // lista de campos};};

nn ExceçõesExceções padrãopadrão do CORBA:do CORBA: CONCLUDED_YESCONCLUDED_YES,,CONCLUDED_NOCONCLUDED_NO,, CONCLUDED_MAYBECONCLUDED_MAYBE

75

CORBACORBA

nn Exemplo: BancoExemplo: Bancomodule Banco {

const string NomeBanco = "UFSC";const string Moeda = "R$";enum Aplicacao { poupanca, fundoAcoes, rendaFixa };struct Transacao {

long data;string descricao;double valor;

};sequence <Transacao> Transacoes;exception ContaInvalida { long conta; };exception SaldoInsuficiente { double saldo; }; // ...

}; 76

CORBACORBA

nn Atributos Atributosnn SãoSão dados de umdados de um objetoobjeto queque podempodem terter seuseu

valor lidovalor lido e/oue/ou modificadomodificado remotamenteremotamentenn Declarados usando a sintaxe:Declarados usando a sintaxe:

attributeattribute tipo tipo ident ident ;;nn

Caso a palavraCaso a palavra--chavechave readonlyreadonly seja utilizada,seja utilizada,o valor do atributo pode ser somente lidoo valor do atributo pode ser somente lidoreadonlyreadonly attributeattribute tipo tipo ident ident ;;

77

CORBACORBA

nn OperaçõesOperaçõesnn Declaradas em IDL na forma:Declaradas em IDL na forma:

tipo tipo ident ident ( /* lista de parâmetros */ )( /* lista de parâmetros */ )[[ raisesraises (( exceção exceção [[ ,, ... ]... ] )) ]];;

nn Parâmetros são separados por vírgulas eParâmetros são separados por vírgulas eseguem a forma:seguem a forma: {{in|out|inoutin|out|inout}} tipo tipo ident ident 

nn inin: parâmetro de entrada: parâmetro de entradannoutout: parâmetro de saída: parâmetro de saídann inoutinout: parâmetro de entrada e saída: parâmetro de entrada e saída

nn Apenas operações acessíveis remotamente Apenas operações acessíveis remotamentedevem ser declaradas na IDL do servidordevem ser declaradas na IDL do servidor

78

CORBACORBA

nn OperaçõesOperações OnewayOneway (assíncronas)(assíncronas)nn Declaradas em IDL na forma:Declaradas em IDL na forma:

onewayoneway voidvoid identident (/* lista de parâmetros */);(/* lista de parâmetros */);nn Uma operaçãoUma operação onewayoneway é assíncrona, ou seja,é assíncrona, ou seja,

o cliente não aguarda seu término.o cliente não aguarda seu término.nn OperaçõesOperações onewayoneway não possuem retorno (onão possuem retorno (o

tipo retornado é sempretipo retornado é sempre voidvoid) e as exceções) e as exceçõespossíveis são somente as padrão.possíveis são somente as padrão.

Page 14: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 14/15

 

14

79

CORBACORBA

nn Exemplo: BancoExemplo: Bancointerface AutoAtendimento {

readonly attribute string boasVindas;double saldo (in long conta) raises (ContaInvalida);void extrato (in long conta, out Transacoes t,

out double saldo) raises (ContaInvalida);void transferencia (in long origem, in long destino,

in double v) raises (ContaInvalida, SaldoInsuficiente);void investimento (in long c, in Aplicacao aplic,

in double v) raises (ContaInvalida, SaldoInsuficiente);};interface CaixaEletronico : AutoAtendimento {

void saque (in long conta, in double valor)raises (ContaInvalida, SaldoInsuficiente);

}; 80

CORBACORBA

nn O código pode ser implementado emO código pode ser implementado emqualquer linguagem mapeada para IDLqualquer linguagem mapeada para IDL  public class AutoAtendimentoImpl Java

extends AutoAtendimentoPOA {

 public String boas_vindas() {return “Bem-vindo ao Banco”;

}...

};

class auto_atendimentoImpl: C++auto_atendimentoPOA { ... };

char* banco_auto_atendimentoImpl::boas_vindas()throws (CORBA::SystemException) {return CORBA::string_dup(“Bem-vindo ao Banco”);

}

81

CORBACORBA

nn MapeamentoMapeamento IDLIDL parapara JavaJavann Define como são representados em Java osDefine como são representados em Java os

elementos definidos em IDLelementos definidos em IDLnn Regras de MapeamentoRegras de Mapeamentonn Módulos são mapeados emMódulos são mapeados em packagespackages JavaJavann Interfaces, Exceções eInterfaces, Exceções e Arrays Arrays ee StringsStrings sãosão

idênticos em Javaidênticos em Javann SequênciasSequências são mapeadas comosão mapeadas como Arrays Arraysnn Constantes se tornam atributos estáticosConstantes se tornam atributos estáticosnn Estruturas de dados,Estruturas de dados, UnionsUnions ee EnumsEnums sãosão

mapeadas como classes Javamapeadas como classes Java 82

CORBACORBA

 Math Math..BigDecimalBigDecimalfixed fixed CORBA.CORBA. Any Anyanyany

 byte byteooctetctet

Equivalente em JavaEquivalente em JavaTipo IDLTipo IDL

charcharwcharwchar

(não disponível)(não disponível)longlong doubledouble

longlongunsigned unsigned longlong longlong

longlonglonglong longlong

CORBA.CORBA.ObjectObjectObjectObject

doubledoubled d oubleoublefloatfloat

 

ffloatloat

intintunsigned unsigned longlongshortshortunsigned unsigned shortshort

intintllongongshortshortsshorthort

charcharcharchar boolean boolean b booleanoolean

83

CORBACORBA

nn Mapeamento de Atributos IDL para JavaMapeamento de Atributos IDL para Javann É criado um método com o nome do atributoÉ criado um método com o nome do atributonn Se o atributo não forSe o atributo não for readonlyreadonly, um método de, um método de

mesmo nome permite modificar o seu valormesmo nome permite modificar o seu valor

nn Mapeamento de Operações IDL para JavaMapeamento de Operações IDL para Javann São criados métodos na interfaceSão criados métodos na interface

correspondente, com os mesmos parâmetroscorrespondente, com os mesmos parâmetrose exceçõese exceções

nn Contexto inserido no final da lista deContexto inserido no final da lista deparâmetrosparâmetros

84

ORBAORBA

nn Implementação do ServidorImplementação do Servidornn O servidor deve iniciar o ORB e o POA, eO servidor deve iniciar o ORB e o POA, e

disponibilizar sua referência para os clientesdisponibilizar sua referência para os clientesnn Referências podem ser disponibilizadasReferências podem ser disponibilizadas

através do serviço de nomes, impressas naatravés do serviço de nomes, impressas natela ou escritas em um arquivo acessado pelostela ou escritas em um arquivo acessado pelosclientes usando o sistema de arquivosclientes usando o sistema de arquivosdistribuído, um servidor HTTP ou FTPdistribuído, um servidor HTTP ou FTP

nn Feito isso, o servidor deve ficar ouvindoFeito isso, o servidor deve ficar ouvindorequisições e as executandorequisições e as executando

Page 15: 5. Comunicacao Entre Processos I

5/7/2018 5. Comunicacao Entre Processos I - slidepdf.com

http://slidepdf.com/reader/full/5-comunicacao-entre-processos-i 15/15

 

15

85

CORBACORBA

package Banco;import org.omg.CORBA.*;public class AutoAtendimentoImpl

extends AutoAtendimentoPOA {public String boasVindas () {return "Bem-vindo ao banco "+ NomeBanco.value;

}

public Valor saldo (long conta) throws ContaInvalida {return BancoDB.getConta(conta).getSaldo();

} // demais métodos...}

nn Exemplo: Implementação do BancoExemplo: Implementação do Banco

86

CORBACORBA

nn Exemplo: Servidor do BancoExemplo: Servidor do Banco

 

package Banco;import org.omg.CORBA.*;import org.omg.CosNaming.*;import org.omg.PortableServer.*;public class Servidor {public static void main(String args[]) {try{ // Inicializa o ORBORB orb = ORB.init(args, null); // Instancia o servidor  AutoAtendimentoImpl aa= new AutoAtendimentoImpl(); // Localiza e ativa o POAPOA rootpoa = POAHelper.narrow( orb.

resolve_initial_references("RootPOA"));rootpoa.the_POAManager().activate();

87

CORBACORBA

nn Exemplo: Servidor do Banco (cont.)Exemplo: Servidor do Banco (cont.)

 

 // Gera a referência remota do servidor AutoAtendimento ref = AutoAtendimentoHelper.

narrow(rootpoa.servant_to_reference(aa)); // Obtém a referência do servidor de nomesNamingContextExt ns = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

 // Registra o servidorns.rebind(ns.to_name("Banco"), ref ); // Aguarda chamadas dos clientesorb.run();

} catch (Exception e) { e.printStackTrace(); }}

}88

CORBACORBA

nn Implementação do ClienteImplementação do Clientenn Um cliente deve sempre iniciar o ORB e obterUm cliente deve sempre iniciar o ORB e obter

uma referência para o objeto servidoruma referência para o objeto servidornn Referências podem ser obtidas através doReferências podem ser obtidas através do

serviço de nomes, da linha de comando ouserviço de nomes, da linha de comando oulendo um arquivo que contenha a referêncialendo um arquivo que contenha a referência

nn De posse da referência, o cliente pode chamarDe posse da referência, o cliente pode chamaros métodos implementados pelo servidoros métodos implementados pelo servidor

89

CORBACORBA

nn Implementação do ClienteImplementação do Cliente

 

import Banco.*;import org.omg.CORBA.*;import org.omg.CosNaming.*;public class Cliente {public static void main(String args[]) {try { // Inicializa o ORBORB orb = ORB.init(args, null); // Obtém a referência do serviço de nomesNamingContextExt ns = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));

 // Obtém a referência do servidor do banco AutoAtendimento server = auto_atendimentoHelper.

narrow(ns.resolve_str("Banco")); 90

 

 // Imprime mensagem de boas-vindasSystem.out.println(server.boasVindas()); // Obtém o numero da contaSystem.out.print("Entre o número da sua conta: ");String conta = new java.io.BufferedReader(new java.io.InputStreamReader(System.in)).readLine();

 // Imprime o saldo atualSystem.out.println("Saldo da conta: R$"+ server.saldo(Integer.parseInt(conta)));

} catch (ContaInvalida e) {System.out.println("Conta " + e.conta + " não existe.");

} catch (Exception e) { e.printStackTrace(); }}

}

CORBACORBA

nn Implementação do Cliente (cont.)Implementação do Cliente (cont.)