Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 Introdução ao SCS.

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

Sistemas Distribuídos
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
UML Visões – Parte 2.
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
Sistemas Distribuídos Web Services
Um Processo Baseado em MDA para a Especialização de Mecanismos de Persistência Fabio Seixas Marques Seminário LES – 7 de abril de.
Component-Based Frameworks for E-Commerce Agnaldo Kiyoshi Noda.
Repositório de Interfaces em CORBA
Sistemas Distribuídos CORBA
1 Arquitetura CORBA Repositório de Implementação Repositório de Interface cliente programa cliente proxy ORB Core ou invocação dinâmica servidor ORB Core.
Comunicação Entre Objetos Distribuídos
Objetos Distribuídos Padrão CORBA
Análise e Projeto de Sistemas
Gerenciamento de Requisitos com Casos de Uso
Objetos Distribuídos para WEB Prof. Paulo Fernando da Silva FURB – Universidade Regional de Blumenau Pós-Graduação em Desenvolvimento WEB.
Introdução a Arquitetura Orientada a serviços
DIAGRAMA DE COMPONENTES
Middleware e Sistemas Distribuídos
Gerenciamento de Configuração
Sistemas Distribuídos
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Web Services Uninorte Semana de Tecnologia da Informação
CORBA e Desenvolvimento Baseado em Componentes
Sistemas Distribuídos Carlos A. G. Ferraz DI/UFPE Aula 07.
Concorrência e Java RMI
Cristiano Soares Rafael di Lego Roberto Nemirovsky Thiago Nascimento
Marshal Dictionary Alessandro de Luna AlmeidaAlessandro de Luna Almeida Igor Azevedo SampaioIgor Azevedo Sampaio Mozart de Siqueira Campos Araújo FilhoMozart.
Sistemas Distribuídos Introdução. Conceito Coleção de múltiplos processos que executam sobre uma coleção de processadores autônomos interligados em uma.
Tecgraf PUC-Rio maio de 2011 Principais conceitos de CORBA.
TMV Gestão de Redes e de Sistemas Distribuídos ???? Sumário  Arquitectura de Gestão SNMP  Arquitectura de Gestão OSI/TMN  Novas Arquitecturas.
CORBA Apresentação do Padrão CORBA Maurício Maron Mendes Ramiro Pereira de Magalhães
Tecgraf PUC-Rio Setembro de 2013 Introdução ao Openbus.
Processos.
O que é? É o processo de investigação técnica com intuito de identificar a qualidade, a segurança e a exatidão do software desenvolvido. A validação do.
RUP - Cap. 4 – Processo Centrado na Arquitetura
Laboratório de Programação
RUP - Cap. 3 – Processo Dirigido por Caso de Uso
Padrões de Interação com o Usuário
Tecgraf PUC-Rio Setembro de 2013 Data Service. Motivação Aplicações científicas têm como característica a elevada complexidade de seus dados e dos algoritmos.
T. D. S. I. PARA WEB Prof. Emmanuel Nolêto
Fluxos secundários Só devem ser analisados e descritos após a descrição dos fluxos básicos. Fluxos alternativos situações especiais (desconto para um cliente)
GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Fevereiro de 2014 IDL.
Integração de Ferramentas CASE
Desenvolvimento de Software Dirigido a Modelos
IEEE Melhores Práticas para Descrições de Projeto de Software (DPS)
API Java do SCS Tecgraf PUC-Rio Setembro de 2013.
Abr-17 Projetar Processos Projetar distribuição.
© 2007 by Pearson Education ©Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 18 Slide 1 Reuso de Software.
Multiparadigma das Comunicações em Java para Grid Computing Fernanda R. Ramos Luiz Felipe Marco Eiterer Profº Alcides Calsavara, Ph.D.
Conceitos do Cliente Funcionamento Básico do Cliente Como Clientes acessam e usam Objetos Distribúidos.
Objetos Distribuídos Frameworks Orientados a Objetos.
Desenvolvimento Global de Software
Arquitetura de Software Projetos de Interface
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013.
Tecgraf PUC-Rio maio de 2011 Introdução ao Openbus.
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Principais conceitos de CORBA.
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Introdução ao OpenBus.
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 API C# do SCS.
Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 IDL.
Projetar Processos. Copyright © 2002 Qualiti. Todos os direitos reservados. Qualiti Software Processes Projetar distribuição | 2 Descrição do Projeto.
Projeto de Arquitetura de Software
SOA SOA – Arquitetura Orientada a Serviços Conceitos e Aplicações
1 Projeto Piloto Conclusão em Agenda Projeto Piloto –Descrição –Execução da aplicação –Implementação de requisitos funcionais e não- funcionais.
Processos de Software Ludimila Monjardim Casagrande 1º Semestre Desenvolvimento e Qualidade.
Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 API Java do SCS.
Transcrição da apresentação:

Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 Introdução ao SCS

Versão 3 – fevereiro/2014 Reuso de Software Definição: desenvolvimento de novos sistemas computacionais a partir de artefatos de software pré-existentes, em sua forma integral ou parcial, desenvolvidos originalmente para atender a outros sistemas e contextos (requisitos, especificações, tecnologias, etc) O reuso pode ocorrer em diferentes níveis de abstração Padrões de projeto (design patterns) Tipos abstratos de dados Arquivos com código-fonte Bibliotecas de funções Frameworks em linguagens OO Componentes de Software Serviços

Versão 3 – fevereiro/2014 Reuso no Ciclo de Desenvolvimento

Versão 3 – fevereiro/2014 Noções básicas O que são componentes de software? – Unidades binárias desenvolvidas de forma independente que cooperam através de interfaces bem definidas e dependências explícitas para compor sistemas computacionais – Implantação (deployment) independente – Devem poder ser conectados, formando composições maiores – A composição pode ser realizada por terceiros – Promovem o reuso de interfaces e sistemas mais modulares – Podem ser locais ou distribuídos – A linguagem de implementação não faz parte de seu contrato – Fácil substituição em tempo de execução, promovendo melhor adaptabilidade, escalabilidade e manutenibilidade

Versão 3 – fevereiro/2014 Baixo acoplamento – Definição do componente (conjunto de interfaces e dependências) separada da implementação – Facilidade de carga de novos módulos em tempo de execução Diferente de uma biblioteca ou mudanças no código, que demandam nova compilação ou link-edição É possível a troca de dependências em tempo de execução – Podem contar com independência de linguagem e arquitetura, principalmente em modelos distribuídos Dinamismo – Noção de conexões entre componentes Configuração e re-configuração dos provedores das dependências em tempo de execução Noções básicas

Versão 3 – fevereiro/2014 Facilidade de Integração – Um sistema define que é dependente de outro – Essa dependência é suprida enquanto o software já está rodando – Se a dependência for perdida ou se tornar problemática, pode ser substituída sem a parada do sistema Noções básicas

Versão 3 – fevereiro/2014 Motivação Por quê usar um modelo de componentes no OpenBus? – Representação única para as aplicações distribuídas que participem do barramento, independente de linguagem – Camada, regras e ferramentas padronizadas para a comunicação entre essas aplicações (CORBA e conexões SCS) – Necessidade de inspeção e controle em tempo de execução Suporte a reflexão deve ser nativo nas aplicações distribuídas Acesso fácil a suas interfaces providas, dependências remotas e conexões com outras aplicações Maior dinamismo necessário para que essas ações possam ser feitas em tempo de execução, devido ao ambiente complexo e heterogêneo

Versão 3 – fevereiro/2014 Motivação Exemplos de cenários de uso de sistemas de componentes Integração de Softwares Gerência e controle do domínio como um todo Permissões, autenticação, etc Implantação e execução (grid, cloud) Visualização em tempo real do estado de aplicações / composições Monitoração e métricas de recursos e dados Diagnósticos Reconfiguração manual ou automática do domínio, tanto pelas aplicações como pelo administrador Qualidade de serviço Tolerância a falhas Outras

Versão 3 – fevereiro/2014 SCS Modelo SCS – Inspirado em COM e CCM Com intuito de ser menor e mais simples – Suporte a Java, C++, C# e Lua – Componentes SCS são compostos por: Facetas ‒ Interfaces providas por um componente Receptáculos ‒ Dependências (remotas) de um componente Conexões entre facetas e receptáculos Identificador do componente

Versão 3 – fevereiro/2014 Componente SCS

Versão 3 – fevereiro/2014 Interfaces definidas em IDL Exportam as funcionalidades de um componente no ambiente CORBA Podem ser vistas como serviços Facetas básicas, presentes em todos os componentes SCS: – IComponent – IReceptacles – IMetaInterface – Existem implementações padrão mas podem ser substituídas por outras do usuário Usuário define facetas adicionais Facetas

Versão 3 – fevereiro/2014 Conjunto de dependências remotas de um componente Definidos por interfaces IDL das quais o componente depende Podem requerer apenas uma conexão ou suportar várias NÃO são objetos remotos – Acessíveis apenas localmente – Manipulados remotamente através da faceta IReceptacles Receptáculos

Versão 3 – fevereiro/2014 Permitem o fácil acesso a objetos remotos, que implementem interfaces necessárias ao funcionamento do componente (dependências) Compatibilidade com outros sistemas – Suportam quaisquer objetos CORBA, não somente facetas SCS Conexões

Versão 3 – fevereiro/2014 Visão de um componente

Versão 3 – fevereiro/2014 Visão de componentes conectados

Versão 3 – fevereiro/2014 – Visão distribuída de um componente – Em um ambiente distribuído (CORBA), existe apenas o que está no contrato da IDL (scs.idl) – O componente é essencialmente o conjunto das facetas IComponent, IReceptacles, IMetaInterface e facetas adicionais – NÃO existe uma “caixa” que agrupe essas facetas em um bloco, representando o componente como um todo – A faceta IComponent é o que mais se aproxima de representar o componente – Receptáculos não existem de fato, e são manuseados apenas através da faceta IReceptacles – Não importa a linguagem de implementação – Visão local de um componente – Referente a uma implementação específica em uma linguagem específica – Dependendo da implementação, pode existir um objeto ou estrutura que represente o componente como um todo – Facetas são objetos CORBA registrados em um ORB local – Receptáculos são estruturas locais, concretas, que podem ser manipuladas diretamente, não necessariamente através da faceta IReceptacles O que é de fato um componente SCS?

Versão 3 – fevereiro/2014 A IDL do SCS Define os tipos e as facetas básicas para a criação de componentes SCS (ver site ou pacote para a IDL completa) module scs { module core {... }; // core }; // scs

Versão 3 – fevereiro/2014 IComponent

Versão 3 – fevereiro/2014 Estrutura utilizada para identificar um componente Similar a uma definição de tipo Não existe checagem por parte do SCS pois o mesmo não define um domínio struct ComponentId { /** O nome identificador do componente. */ string name; /** O número principal da versão. */ octet major_version; /** O número secundário da versão. */ octet minor_version; /** O número de revisão da versão. */ octet patch_version; /** A especificação da plataforma necessária para o funcionamento do componente. */ string platform_spec; }; Identificador de um Componente

Versão 3 – fevereiro/2014 IComponent – Representação básica do componente no ambiente distribuído – Ciclo de vida – Porta de acesso a outras facetas Por nome ou interface – Obtenção do identificador do componente interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); }; Facetas básicas

Versão 3 – fevereiro/2014 Ativa o componente, em termos do seu funcionamento como uma aplicação distribuída NÃO é um “construtor” do componente Exemplo: testar se conexões necessárias para seu funcionamento foram realizadas Noção de “tempo de configuração” Pode lançar as exceções: StartupFailed caso haja algum problema na execução do método ou alguma condição necessária não tenha sido verificada interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); Facetas básicas

Versão 3 – fevereiro/2014 Desativa o componente, em termos do seu funcionamento como uma aplicação distribuída NÃO é um “destrutor” Não necessariamente finaliza o componente Pode lançar as exceções: ShutdownFailed caso haja algum problema na execução do método interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); Facetas básicas

Versão 3 – fevereiro/2014 O parâmetro recebido é uma string no formato de um repositoryId de CORBA, com a interface desejada Retorna uma faceta que implemente a interface CORBA especificada pelo parâmetro facet_interface, se houver Caso exista mais de uma faceta que implemente essa interface, qualquer uma pode ser retornada interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); Facetas básicas

Versão 3 – fevereiro/2014 Retorna a faceta especificada pelo nome O parâmetro é uma string que atua como identificador único para uma faceta, dentro daquela instância de componente Desta forma, haverá apenas uma (ou nenhuma) faceta a ser retornada interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); Facetas básicas

Versão 3 – fevereiro/2014 Retorna o identificador do componente interface IComponent { void startup() raises (StartupFailed); void shutdown() raises (ShutdownFailed); Object getFacet (in string facet_interface); Object getFacetByName (in string facet); ComponentId getComponentId (); Facetas básicas

Versão 3 – fevereiro/2014 IReceptacles

Versão 3 – fevereiro/2014 Identificador de uma Conexão Identificador único de uma conexão, dentro de uma instância de componente específica O identificador é compartilhado entre todos os receptáculos do componente /** Número identificador da conexão. */ typedef unsigned long ConnectionId;

Versão 3 – fevereiro/2014 Estrutura que contém todos os dados sobre uma conexão Identificador único da conexão Referência para uma faceta que implemente a interface esperada pelo receptáculo dono dessa conexão struct ConnectionDescription { /** Identificador da conexão. */ ConnectionId id; /** Referência para o objeto remoto. */ Object objref; }; Descrição de uma Conexão

Versão 3 – fevereiro/2014 Faceta IReceptacles IReceptacles – Gerenciamento de receptáculos (dependências remotas) – Facilita a conexão e descoberta das dependências remotas de um componente – Manipula as dependências remotas de um componente, a serem supridas em tempo de configuração ou de execução interface IReceptacles { ConnectionId connect (in string receptacle, in Object obj) raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit); void disconnect (in ConnectionId id) raises (InvalidConnection, NoConnection); ConnectionDescriptions getConnections (in string receptacle) raises (InvalidName); };

Versão 3 – fevereiro/2014 Conecta um objeto remoto a um receptáculo, caso o objeto implemente a interface esperada pelo receptáculo Gera internamente uma ConnectionDescription e retorna o identificador ConnectionId gerado interface IReceptacles { ConnectionId connect (in string receptacle, in Object obj) raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit); void disconnect (in ConnectionId id) raises (InvalidConnection, NoConnection); ConnectionDescriptions getConnections (in string receptacle) raises (InvalidName); }; Faceta IReceptacles

Versão 3 – fevereiro/2014 Pode lançar as exceções: InvalidName caso não exista um receptáculo com o nome fornecido InvalidConnection caso o objeto seja inválido ou não implemente a interface esperada AlreadyConnected caso o receptáculo aceite apenas uma conexão e essa já esteja preenchida ExceededConnectionLimit caso o limite de conexões tenha sido atingido em um receptáculo múltiplo interface IReceptacles { ConnectionId connect (in string receptacle, in Object obj) raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit); void disconnect (in ConnectionId id) raises (InvalidConnection, NoConnection); ConnectionDescriptions getConnections (in string receptacle) raises (InvalidName); }; Faceta IReceptacles

Versão 3 – fevereiro/2014 Desfaz uma conexão, a partir do identificador Pode lançar as exceções: InvalidConnection caso o identificador fornecido seja inválido NoConnection caso a conexão especificada não exista interface IReceptacles { ConnectionId connect (in string receptacle, in Object obj) raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit); void disconnect (in ConnectionId id) raises (InvalidConnection, NoConnection); ConnectionDescriptions getConnections (in string receptacle) raises (InvalidName); }; Faceta IReceptacles

Versão 3 – fevereiro/2014 Retorna as descrições de conexões de um receptáculo específico Pode lançar as exceções: InvalidName caso o receptáculo fornecido não exista interface IReceptacles { ConnectionId connect (in string receptacle, in Object obj) raises (InvalidName, InvalidConnection, AlreadyConnected, ExceededConnectionLimit); void disconnect (in ConnectionId id) raises (InvalidConnection, NoConnection); ConnectionDescriptions getConnections (in string receptacle) raises (InvalidName); }; Faceta IReceptacles

Versão 3 – fevereiro/2014 IMetaInterface

Versão 3 – fevereiro/2014 Descritor de uma faceta Nome que atua como identificador único da faceta dentro de uma instância específica de componente Interface que a faceta implementa, no formato de um RepositoryId de CORBA Formato “IDL:modulo/interface:versão” Referência CORBA para a faceta struct FacetDescription { /** O nome identificador da faceta. */ string name; /** O número principal da versão. */ string interface_name; /** O número secundário da versão. */ Object facet_ref; }; Descrição de uma Faceta

Versão 3 – fevereiro/2014 Descritor de uma faceta Nome que atua como identificador único do receptáculo dentro de uma instância específica de componente Interface esperada pelo receptáculo, no formato de um RepositoryId de CORBA Configuração como receptáculo simples ou múltiplo Sequência de descrições de conexões, que mantém todas as conexões feitas ao receptáculo. Geradas automaticamente no processo de conexão struct ReceptacleDescription { /** O nome identificador do receptáculo. */ string name; /** O número principal da versão. */ string interface_name; /** Define se o receptáculo aceita uma ou múltiplas conexões. */ boolean is_multiplex; /** Conexões mantidas pelo receptáculo. */ ConnectionDescriptions connections; }; Descrição de um Receptáculo

Versão 3 – fevereiro/2014 Faceta IMetaInterface IMetaInterface – Suporte a reflexão Acesso a metadados referentes ao conjunto de facetas Acesso a metadados referentes ao conjunto de receptáculos interface IMetaInterface { FacetDescriptions getFacets(); FacetDescriptions getFacetsByName(in NameList names) raises (InvalidName); ReceptacleDescriptions getReceptacles(); ReceptacleDescriptions getReceptaclesByName(in NameList names) raises (InvalidName); };

Versão 3 – fevereiro/2014 Retorna o conjunto das descrições de facetas do componente interface IMetaInterface { FacetDescriptions getFacets(); FacetDescriptions getFacetsByName(in NameList names) raises (InvalidName); ReceptacleDescriptions getReceptacles(); ReceptacleDescriptions getReceptaclesByName(in NameList names) raises (InvalidName); }; Faceta IMetaInterface

Versão 3 – fevereiro/2014 Retorna um subconjunto das descrições de facetas do componente, especificado por uma lista de nomes fornecida A lista de nomes é composta de nomes de facetas, não interfaces Pode lançar as exceções: InvalidName caso algum dos nomes não seja um nome de faceta existente interface IMetaInterface { FacetDescriptions getFacets(); FacetDescriptions getFacetsByName(in NameList names) raises (InvalidName); ReceptacleDescriptions getReceptacles(); ReceptacleDescriptions getReceptaclesByName(in NameList names) raises (InvalidName); }; Faceta IMetaInterface

Versão 3 – fevereiro/2014 Retorna o conjunto das descrições de receptáculos do componente interface IMetaInterface { FacetDescriptions getFacets(); FacetDescriptions getFacetsByName(in NameList names) raises (InvalidName); ReceptacleDescriptions getReceptacles(); ReceptacleDescriptions getReceptaclesByName(in NameList names) raises (InvalidName); }; Faceta IMetaInterface

Versão 3 – fevereiro/2014 Retorna um subconjunto das descrições de receptáculos do componente, especificado por uma lista de nomes fornecida A lista de nomes é composta de nomes de receptáculos, não interfaces Pode lançar as exceções: InvalidName caso algum dos nomes não seja um nome de receptáculo existente interface IMetaInterface { FacetDescriptions getFacets(); FacetDescriptions getFacetsByName(in NameList names) raises (InvalidName); ReceptacleDescriptions getReceptacles(); ReceptacleDescriptions getReceptaclesByName(in NameList names) raises (InvalidName); }; Faceta IMetaInterface

Versão 3 – fevereiro/2014 Site público do SCS COM CCM Referências