UNIVERSIDADE Sistemas Distribuídos Ciência da Computação Aula 19-20: Arquitetura CORBA (continuação) Exemplo de cliente e servidor em CORBA ● Interfaces IDL Shape e ShapeList Exemplo de cliente e servidor em CORBA ● ● ● Em Java o primeiro é compilar o arquivo IDL através do compilador idlj Este compilador vai gerar um conjunto de arquivos em Java descritos a seguir ShapeList.java e ShapeListOperations.java que definem os métodos apresentados na IDL para linguagem Java Exemplo de cliente e servidor em CORBA ● ● ● Skeletons para cada interface IDL. Os nomes dos skeletons terminam em POA, como por exemplo ShapeListPOA.java e ShapePOA.java Stubs (proxy) para cada interface IDL. Os nomes dos proxys terminam em Stub, como por exemplo _ShapeListStub.java e _ShapePOAStub.java Cada struct definido num arquivo IDL corresponde a uma classe Java, como por exemplo Rectangle.java e GraphicalObject.java Exemplo de cliente e servidor em CORBA ● Classes Helper que através do método narrow converte um objeto CORBA para o tipo definido na interface IDL. ● Ex.: ShapeHelper.java, ShapeListHelper.java Classes Holder que lidam com argumentos in e inout que não podem ser mapeados diretamente para Java. Ex.: ShapeHolder.java, ShapeListHolder.java Programa Servidor ● ● ● Contém um ou mais objetos remotos definidos na linguagem de implementação do servidor Quando um objeto remoto é criado, o servidor deve registrálo através do POA O POA por sua vez o transforma em um objeto CORBA e retorna a referência remota deste objeto Programa Servidor Programa Servidor ● ● ● Na linha 1, ORB é inicializado Linhas 2 e 3 servem para obter uma referência e ativar o POA chamado aqui de POAManager Na linha 4 é criado uma instância da classe servente (ShapeListServant) e passa para esta instância uma referência do POA Programa Servidor ● Na linha 5, esta instância é transformada num objeto CORBA através do método servant_to_reference() ● Isto é necessário pois somente um objeto CORBA pode ser registrado no serviço de nomes e acessado por clientes As demais linhas (6 a 9) servem para registrar o objeto CORBA no serviço de nomes sendo que o registro de fato é feito através do método rebind() Classe servante do objeto remoto ● ● Objeto servente utilizado pelo servidor que serve para cadastrar objetos geométricos Herda de ShapeListPOA que representa o skeleton Programa cliente Programa cliente ● ● ● ● No programa cliente, o ORB também é criado e inicializado (linha 1) Em seguida obtém uma referência remota do objeto remoto CORBA ShapeList através do método resolve do serviço de nomes (linha 2) Depois o método allShapes() é executado que então retorna referências remotas dos objetos Shapes cadastrados no servidor (linha 3) Um destes objetos Shapes tem suas informações visualizadas através do método getAllState() (linha 4) Referências de objeto remoto CORBA ● ● Em CORBA, são chamadas de IOR (referência interoperável de objeto) Pode ser utilizada para ativar um objeto remoto que esteja em um repositório de implementação Referências de objeto remoto CORBA ● ● ● O primeiro campo serve para identificar uma interface IDL em um repositório de interface caso seja necessário realizar uma invocação dinâmica O segundo campo serve para definir o protocolo de transporte utilizado. O IIOP utiliza TCP e consiste de host e uma porta O terceiro campo serve para identificar o objeto CORBA de maneira única. É formado pelo nome do objeto e do adaptador de objeto Referências de objeto remoto CORBA ● ● ● Existem dois tipos de IOR IOR transiente que dura apenas enquanto o processo servidor existir e é usado para acessar um objeto CORBA no servidor IOR persistente que existe entre as ativações de objetos CORBA e é usaodo para acessar um objeto CORBA num repositório de implementação Serviços CORBA ● ● Serviço de nomes: Define uma forma mais amigável de referenciar objetos CORBA, através de nomes simbólicos. Ciclo de vida do objeto: Define como os objetos CORBA são criados, removidos, movidos e copiados. Serviços CORBA ● ● ● Controle de Concorrência: Assegura que a consistência de um objeto não seja comprometida por invocações concorrentes. Serviço de Consultas: Suporta consultas em coleções de objetos CORBA. Persistência: Possibilita aos clientes localizar o objeto servidor armazenado e invocá-lo somente na hora em que for necessário. Serviços CORBA ● ● Serviço de Negociação: Provê a busca de objetos CORBA baseada nas propriedades que descrevem o serviço oferecido pelo respectivo objeto. Serviço de eventos: Oferece um método assíncrono de comunicação (callback) entre objetos, com o uso de objetos fornecedores e consumidores, que comunicam-se através de um canal de eventos. Serviço de Nomes ● ● É um exemplo sofisticado de binder Permite que nomes sejam associados a referências de objetos remotas Fornece meios para registrar um objeto (bind) Para obter uma referência (resolve) Nomes podem ser estruturados de forma hierárquica Serviços de Nomes Serviço de segurança ● ● ● Identificação e autenticação de usuários (humanos ou objetos) para verificar se são quem eles dizem ser. Autorização e controle de acesso de usuários, decidindo quais deles devem acessar determinado objeto através de sua identificação ou de seus privilégios Direitos de acessos podem ser definidos através de listas de controle de acesso (ACL) Serviço de segurança ● ● ● Segurança de comunicação entre objetos que estejam executando sobre camadas de comunicação inseguras. Prova a ocorrencia de uma ação através de serviços de não-repudiação que provê a geração de uma evidência de ações e a verificação posterior desta evidência. CORBA permite escolher se mecanismos de segurança devem ser utilizados ou não Serviço de notificação e eventos CORBA ● Objetos de interesse são chamados de suppliers ● Assinantes são chamados de consumers ● As funções de um observador são definidas através de event channels e filtros Serviço de notificação e eventos CORBA ● Notificações podem ser : ● ● “empurradas” pelo supplier para o consumer ou “puxadas” pelo consumer do supplier Notificações são comunicadas através de invocação de método remota síncronas Para se comunicar de assíncrona é necessário o uso de event channels Serviço de notificação e eventos CORBA ● Suppliers “empurram” notificações para consumers Serviço de notificação e eventos CORBA ● Consumers “puxam” notificações dos suppliers