versão 3 – fevereiro/2014 tecgraf puc-rio fevereiro de 2014 introdução ao scs

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

Upload: mario-castilho-santos

Post on 07-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

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

Versão 3 – fevereiro/2014

Tecgraf PUC-RioFevereiro de 2014

Introdução ao SCS

Page 2: 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

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

Versão 3 – fevereiro/2014

Reuso no Ciclo de Desenvolvimento

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

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

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

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

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

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

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

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

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

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

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

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

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

Versão 3 – fevereiro/2014

Componente SCS

Page 11: Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 Introdução ao 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

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

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

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

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

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

Versão 3 – fevereiro/2014

Visão de um componente

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

Versão 3 – fevereiro/2014

Visão de componentes conectados

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

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?

Page 17: Versão 3 – fevereiro/2014 Tecgraf PUC-Rio Fevereiro de 2014 Introdução ao 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

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

Versão 3 – fevereiro/2014

IComponent

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Versão 3 – fevereiro/2014

IReceptacles

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

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;

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

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

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

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);};

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

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

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

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

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

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

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

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

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

Versão 3 – fevereiro/2014

IMetaInterface

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

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

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

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

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

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);};

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

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

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

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

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

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

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

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

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

Versão 3 – fevereiro/2014

• Site público do SCShttp://www.tecgraf.puc-rio.br/scs

• COMhttp://www.microsoft.com/com/default.mspx

• CCMhttp://www.omg.org/technology/documents/

corba_spec_catalog.htm#CCM

Referências