gestor: tic/tic-e&p/gidsep versão 1 - julho/2013 tecgraf puc-rio novembro de 2013 sdk openbus...

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

Upload: stefany-natal

Post on 07-Apr-2016

215 views

Category:

Documents


1 download

TRANSCRIPT

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

GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013

Tecgraf PUC-RioNovembro de 2013

SDK Openbus – C#

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

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)

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

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

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

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

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

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

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

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

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

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

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

GESTOR: TIC/TIC-E&P/GIDSEP versão 1 - julho/2013

Fluxo principal do servidornamespace 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); } }}

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

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

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

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

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

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

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

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)

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

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

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

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íficostring stockServerIDLType = Repository.GetRepositoryID(typeof(StockServer));

string stockExchangeIDLType = Repository.GetRepositoryID(typeof(StockExchange));

// propriedades geradas automaticamenteServiceProperty autoProp = new ServiceProperty("openbus.component.interface", stockServerIDLType);

ServiceProperty autoProp2 = new ServiceProperty("openbus.component.interface", stockExchangeIDLType);

// propriedade definida pelo serviço StockSellerServiceProperty prop = new ServiceProperty("offer.domain", "StockMarket");

// busca por QUAISQUER serviços com as facetas esperadas de um // StockSeller e pertencentes ao domínio StockMarketServiceOfferDesc[] offers = Utils.FilterWorkingOffers( assistant.FindServices(new[] { prop, autoProp, autoProp2 }, -1));

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

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

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

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