Notas de Aula - MAC 5759 - Sistemas de Objetos Distribuídos
Aula 9 - 9/4/2001
Complementando a Aula Passada
- Estrutura de uma IOR (Henning & Vinoski, 13.8)
- é completamente opaca para o cliente
- encapsula tudo o que é necessário para enviar chamadas remotas,
incluindo qual o protocolo de transporte utilizado.
- o formato é extensível, cada protocolo pode definir uma parte
específica a ele
- Uma única IOR pode conter várias especificações para diferentes
protocolos (p.ex., IIOP e DCE-CIOP).
- Uma única IOR pode conter várias formas alternativas para encontrar
o mesmo objeto usando o mesmo protocolo (p.ex., 3 pares
(host,port) para um mesmo objeto replicado). O ORB escolhe
em tempo de execuçao, qual dos 3 objetos usar. Isso pode ser
utilizado tanto para balanceamento de carga quanto para tolerancia a
falhas.
- O formato: (repository_ID, perfil_1, perfil_2, ...)
- Em IIOP, perfil_n = (iiop_ver, host, port, object_key,
components)
- object_key é proprietário de cada ORB, em geral é formado
pelo nome do POA mais o object_ID dentro daquele POA.
- components pode conter informaçoes específicas de
serviços (p.ex. qual o mecanismo de segurança utilizado) ou qual a
codificaçao dos caracteres ou informaçoes sobre qual ORB criou aquela
IOR.
- Gerenciamento de Conexões entre ORBs (Henning & Vinoski, 13.5 e
slides 17 e 18 da aula passada)
- ORBs que dao suporte a tempo-real (p.ex. TAO) podem separar uma
conexao diferente para cada prioridade.
Ciclo de Vida de Referências
- referencias podem ser criadas, copiadas e destruídas
- clientes nao podem criar referencias (a nao ser nulas, i.e., nil
- referencias sao criadas do lado do servidor e quando sao passadas para o
cliente, o ORB cria um proxy do seu lado e passa um _ptr para o código do cliente
- o cliente recebe referencias atraves de chamadas a operacoes em servidores
- clientes podem destruir referencias (em geral, o ORB mantém contagem de
referencias)
- CORBA::release (my_obj)
- quando a contagem chega a zero, o ORB libera a memória e,
possivelmente, a conexao de rede associada àquele objeto.
- clientes podem criar copias de referencias que ele já possui
- MyObject_ptr mo2 = MyObject::_duplicate (my_obj)
- devolve a mesma referencia e soma 1 na contagem de referencias. Nao é
muito útil em Java pois a JVM gerencia a memória automaticamente.
- clientes podem criar referencias nulas
- MyObject_ptr MyNilObj = MyObject::_nil();
- clientes podem verificar se uma referencia é nula
- MyObject_ptr mo = server->getObject();
if (!CORBA::is_nil (mo))
mo->my_operation ();
- IMPORTANTE: note que tudo isso só vale do lado de um cliente
específico. release e _duplicate acontecem do lado do
cliente e nao afetam o servidor.
Pseudo-Objetos e Pseudo-IDL (PIDL)
Próxima Aula
Aula Anterior
Página de MAC 5759
Página do Fabio
Página do DCC