A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 SDK Openbus – C#

Apresentações semelhantes


Apresentação em tema: "GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 SDK Openbus – C#"— Transcrição da apresentação:

1 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 SDK Openbus – C#

2 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 1: Obtendo o SDK Openbus A última versão do SDK C# do Openbus pode ser obtida em: http://www.tecgraf.puc-rio.br/openbus Precisaremos também do.NET 4.0 (Visual Studio 2010)

3 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Libs do SDK Openbus 2.0.0.0 Openbus: OpenBus.Idl.dll OpenBus.dll OpenBus.Legacy.dll IIOP.NET: IIOPChannel.dll log4net.dll Nunit.framework.dll SCS: Scs.Core.dll Scs.dll BouncyCastle: BouncyCastle.Crypto.dll

4 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Executáveis do SDK Openbus 2.0.0.0 IIOP.NET: IDLToCLSCompiler.exe IIOPChannel.dll IDLPreprocessor.dll

5 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 2: Preparando os stubs e skeletons Usaremos como base a mesma IDL do exemplo StockMarket mostrado no exercício do SCS Compilar a IDL Compilar o código C# das classes geradas pelo compilador IDL e das classes que implementam as facetas descritas na IDL

6 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 3: Implementando as facetas do componente O componente StockSeller possui duas facetas: StockServer StockExchange As classes StockServerImpl e StockExchangeImpl implementam, respectivamente, cada uma dessas facetas Opcionalmente, para compartilhar o estado entre as duas facetas, teremos implementada a classe StockSellerContext de contexto do componente

7 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 4: Implementando um Servidor Um programa servidor se encarrega de: – realizar a conexão por certificado – criar o componente que implementa as facetas necessárias – registrar uma oferta de serviço – instalar um ProcessExit para desconectar do barramento antes de finalizar a aplicação – manter ativa a execução do ORB

8 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Fluxo principal do servidor namespace StockSeller { internal static class StockSeller { private static Assistant _assistant; private static void Main(String[] args) { // Registra handler para o caso do processo ser finalizado AppDomain.CurrentDomain.ProcessExit += CurrentDomainProcessExit; // Inicializa o assistente do OpenBus _assistant = ConnectWithOpenBus(args); // Cria o componente IComponent ic = CreateComponent(); // Registra o serviço no barramento ServiceProperty[] serviceProperties = new[] { new ServiceProperty("offer.domain", "StockMarket") }; _assistant.RegisterService(ic, serviceProperties); Console.WriteLine("StockSeller rodando."); // Bloqueia a thread corrente até o ORB finalizar Thread.Sleep(Timeout.Infinite); }

9 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Fazer a conexão por certificado private static void MyLoginFailureCallback(Assistant assistant, Exception e) { Console.WriteLine(e.StackTrace); } private static void MyRegisterFailureCallback(Assistant assistant, IComponent ic, ServiceProperty[] props, Exception e) { Console.WriteLine(e.StackTrace); } private static Assistant ConnectWithOpenBus(String[] args) { string host = args[0]; ushort port = UInt16.Parse(args[1]); string entity = args[2]; string privateKeyPath = args[3]; PrivateKey privateKey = Crypto.ReadKeyFile(privateKeyPath); PrivateKeyProperties assistantProps = new PrivateKeyProperties(entity, privateKey) { LoginFailureCallback = MyLoginFailureCallback, RegisterFailureCallback = MyRegisterFailureCallback }; return new AssistantImpl(host, port, assistantProps); }

10 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Registrar a oferta de serviço ServiceProperty[] serviceProperties = new[] { new ServiceProperty("offer.domain", "StockMarket") }; _assistant.RegisterService(ic, serviceProperties);

11 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Implementação do ProcessExit private static void CurrentDomainProcessExit(object sender, EventArgs e) { if (_assistant != null) { _assistant.Shutdown(); }

12 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 5: Implementando o Cliente O programa cliente se encarrega de: – Conectar com o Openbus através de usuário e senha – Buscar pelo(s) serviço(s) que procura – Utilizar o(s) serviço(s)

13 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Conectando com usuário e senha private static void MyLoginFailureCallback(Assistant assistant, Exception e) { Console.WriteLine(e.StackTrace); } private static void MyFindFailureCallback(Assistant assistant, Exception e) { Console.WriteLine(e.StackTrace); } private static void Main(String[] args) { … PasswordProperties passProperties = new PasswordProperties(entity, password) { LoginFailureCallback = MyLoginFailureCallback, FindFailureCallback = MyFindFailureCallback }; Assistant assistant = new AssistantImpl(host, port, passProperties); … }

14 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Procurando pelas facetas // Faz busca utilizando propriedades geradas automaticamente e // propriedades definidas pelo serviço específico string stockServerIDLType = Repository.GetRepositoryID(typeof(StockServer)); string stockExchangeIDLType = Repository.GetRepositoryID(typeof(StockExchange)); // propriedades geradas automaticamente ServiceProperty autoProp = new ServiceProperty("openbus.component.interface", stockServerIDLType); ServiceProperty autoProp2 = new ServiceProperty("openbus.component.interface", stockExchangeIDLType); // propriedade definida pelo serviço StockSeller ServiceProperty prop = new ServiceProperty("offer.domain", "StockMarket"); // busca por QUAISQUER serviços com as facetas esperadas de um // StockSeller e pertencentes ao domínio StockMarket ServiceOfferDesc[] offers = Utils.FilterWorkingOffers( assistant.FindServices(new[] { prop, autoProp, autoProp2 }, -1));

15 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 6: Executando no VisualStudio 2010 Antes de executar, precisamos modificar uma configuração do Visual Studio: Debug -> Options and Settings… -> desmarcar opção “Enable Just My Code” Essa opção, além da sua funcionalidade intencionada que é útil (pular código que não é do usuário durante o debugging), faz com que o debugger crie um breakpoint se qualquer exceção de código que não seja do usuário for lançada A biblioteca do OpenBus é distribuída em modo release com otimizações, e portanto será considerada non-user code O protocolo OpenBus lança exceções CORBA para sinalizar diversas situações, e não desejamos que o debugger pare a execução a cada uma delas A solução mais simples é simplesmente desabilitar a opção acima, mas perde-se sua funcionalidade intencionada

16 GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Passo 6: Executando no VisualStudio 2010 Outra solução possível, mantendo o JMC, é abrir a janela: Debug -> Exceptions… E desmarcar toda a seção “User-unhandled” para “Common Language Runtime Exceptions” –No entanto, o debugger não parará por exceções CLR que gostaríamos que parasse Portanto, a opção menos radical é deixar a seção marcada e adicionar novas entradas desmarcadas dentro dela para cada exceção que não se deseja capturar em debugging. As exceções lançadas pela biblioteca OpenBus C# são: –omg.org.CORBA.NO_PERMISSION –omg.org.PortableInterceptor.ForwardRequest O IIOP.NET pode lançar uma série de exceções adicionais, como BAD_PARAM. No entanto, talvez seja interessante deixar que essas estourem. Caso deseje que elas passem diretamente para o cliente, adicione novas entradas de exceções ou desative o JMC


Carregar ppt "GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 SDK Openbus – C#"

Apresentações semelhantes


Anúncios Google