36
Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Embed Size (px)

Citation preview

Page 1: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Introdução ao SCS

Tecgraf PUC-RioSetembro de 2013

Page 2: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Noções básicas

• O que são componentes de software?– Unidades de composição com interfaces bem definidas e

dependências explícitas– Promove o reuso de interfaces– Fácil substituição em tempo de execução– Devem poder ser conectados, formando composições maiores– Podem ser locais ou distribuídos

Page 3: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Noções básicas

• 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 implementações 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

Page 4: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

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 5: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

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 6: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Componente SCS

Page 7: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas

• 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

Page 8: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Receptáculos

• 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

Page 9: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Conexões

• 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

Page 10: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Visão de um Componente

Page 11: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Visão de Componentes Conectados

Page 12: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

O módulo SCS

• Define os tipos e as facetas básicas para a criação de componentes SCS.

module scs { module core {

...

}; // core}; // scs

Page 13: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

IComponent

Page 14: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Identificador de um Componente

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

Page 15: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

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

Page 16: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

• 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 ();

Page 17: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

• 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 ();

Page 18: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

• 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 ();

Page 19: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

• 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 ();

Page 20: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Facetas básicas

• 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 ();

Page 21: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

IReceptacles

Page 22: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

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 23: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Descrição de uma Conexão

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

Page 24: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

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 25: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IReceptacles

• 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

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

Page 26: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IReceptacles

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

Page 27: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IReceptacles

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

Page 28: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

IMetaInterface

Page 29: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Descrição de uma Faceta

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

Page 30: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Descrição de um Receptáculo

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

Page 31: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

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 32: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IMetaInterface

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

Page 33: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IMetaInterface

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

Page 34: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IMetaInterface

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

Page 35: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Faceta IMetaInterface

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

Page 36: Introdução ao SCS Tecgraf PUC-Rio Setembro de 2013

Referências

• 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