Serviço de Colaboração OpenBus Tecgraf PUC-Rio Novembro de 2013 versão 1 - julho/2013 O que é? • Serviço extra do OpenBus que facilita a colaboração entre sistemas integrados através do barramento – Simula uma integração “privada” entre aplicações que não queiram publicar suas referências no barramento para clientes aleatórios – Permite colaborações fortemente ou fracamente acopladas • Colaboração utilizando tipagem forte, através de facetas específicas dos serviços • Ou fraca, utilizando ferramentas do serviço para colaborar de forma mais genérica, através de eventos versão 1 - julho/2013 Funcionalidades • Sessão de colaboração – Implementa o conceito de uma integração “privada” – Dá acesso aos outros membros da sessão • Canal para troca de eventos do tipo push – Automaticamente fornecido pela sessão – Permite a troca de eventos genéricos (CORBA::Any) • Notificação da entrada e saída de membros – Permite que os membros da sessão realizem ações específicas quando um outro membro entrar ou sair da sessão versão 1 - julho/2013 Interfaces • • • • • CollaborationRegistry CollaborationSession EventChannel EventConsumer CollaborationObserver versão 1 - julho/2013 CollaborationRegistry interface CollaborationRegistry { CollaborationSession createCollaborationSession() raises (ServiceFailure); }; versão 1 - julho/2013 CollaborationMember struct CollaborationMember { Identifier name; scs::core::IComponent member; }; typedef sequence<CollaborationMember> CollaborationMemberSeq; versão 1 - julho/2013 CollaborationObserver interface CollaborationObserver { void memberAdded(in Identifier name, in scs::core::IComponent member) raises (ServiceFailure); void memberRemoved(in Identifier name) raises (ServiceFailure); void destroyed() raises (ServiceFailure); }; versão 1 - julho/2013 CollaborationSession interface CollaborationSession{ readonly attribute EventChannel channel; void addMember(in Identifier name, in scs::core::IComponent member) raises (NameInUse, ServiceFailure); boolean removeMember(in Identifier name) raises(ServiceFailure); scs::core::IComponent getMember(in Identifier name) raises (ServiceFailure); CollaborationMemberSeq getMembers() raises (ServiceFailure); void destroy() raises (ServiceFailure); Cookie subscribeObserver(in CollaborationObserver o) raises(ServiceFailure); boolean unsubscribeObserver(in Cookie ck) raises (ServiceFailure); }; • Compartilhamento da sessão através da referência CORBA • Ciclo de vida – Persistência da sessão enquanto existir pelo menos um membro ou o criador da sessão – destroy() versão 1 - julho/2013 EventChannel interface EventConsumer { void push(in any event) raises (ServiceFailure); }; interface EventChannel { Cookie subscribe(in EventConsumer consumer) raises (ServiceFailure); boolean unsubscribe(in Cookie ck) raises (ServiceFailure); void push(in any event) raises (ServiceFailure); }; versão 1 - julho/2013