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

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

Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Mapeamento de IDL para C#

Apresentações semelhantes


Apresentação em tema: "Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Mapeamento de IDL para C#"— Transcrição da apresentação:

1 versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Mapeamento de IDL para C#

2 versão 1 - julho/2013 Mapeamento de interface O IIOP.NET não implementa o padrão CORBA completamente e conta com algumas diferenças, mas é compatível com outros ORBs Em C#, uma interface IDL é mapeada para uma interface com o mesmo nome da interface IDL e é usada como o tipo referenciado pelos usuários A implementação de um servant deve implementar essa interface e estender a classe abstrata MarshalByRefObject A classe MarshalByRefObject é o mapeamento de uma referência remota em C#, e é utilizada pelo IIOP.NET para representar objetos CORBA

3 versão 1 - julho/2013 Mapeamento de interface Atributos definidos na interface são mapeados para um par de métodos get e set (Properties) Atributos readonly são mapeados apenas para métodos get (Properties) Parâmetros in são mapeados para parâmetros conforme o tipo correspondente Parâmetros out são mapeados para parâmetros out do tipo correspondente Parâmetros inout são mapeados para parâmetros ref do tipo correspondente

4 versão 1 - julho/2013 Mapeamento de interface // C# public interface CadastroPessoa : IIdlEntity { string empresa { get; set; } void incluiPessoa(Pessoa p); void alteraPessoa(ref Pessoa p); } // IDL module exemplo { struct Pessoa { string nome; long idade; }; interface CadastroPessoa { attribute string empresa; void incluiPessoa (in Pessoa p); void alteraPessoa (inout Pessoa p); };

5 versão 1 - julho/2013 Mapeamento dos tipos primitivos

6 versão 1 - julho/2013 Mapeamento dos tipos primitivos Observações –Tipos unsigned em IDL são mapeados para tipos signed em CLS –Não existe representação para fixed nem long double

7 versão 1 - julho/2013 Mapeamento de struct Um struct IDL é mapeado para um struct C# que possui uma variável para cada campo A classe possui o mesmo nome do struct IDL

8 versão 1 - julho/2013 Mapeamento de struct // C# public struct StructType : IIdlEntity { // instance variables public int field1; public string field2; // constructors public StructType(int f1, String f2){ field1 = f1; field2 = f2; } // IDL struct StructType { long field1; string field2; };

9 versão 1 - julho/2013 Mapeamento de sequence Um sequence IDL é mapeado para um array CLS uni-dimensional com o mesmo nome

10 versão 1 - julho/2013 Mapeamento de array Ainda não há mapeamento para arrays no IIOP.NET

11 versão 1 - julho/2013 Mapeamento de typedef O IIOP.NET não possui uma construção para typedef O tipo original é usado

12 versão 1 - julho/2013 Mapeamento de enum O enum IDL é mapeado para um enum CLS com o mesmo nome O tipo Int32 é usado para representar cada valor da enumeração

13 versão 1 - julho/2013 Mapeamento de enum // C# enum TrafficLight {red, yellow, green}; // IDL enum TrafficLight { red, yellow, green };

14 versão 1 - julho/2013 Mapeamento de union O union IDL é mapeado para uma classe com o mesmo nome, que possui os métodos: de acesso ao valor determinante de acesso e modificação para cada possível valor das opções definidas no tipo e para o valor default

15 versão 1 - julho/2013 Mapeamento de valuetype O valuetype IDL é mapeado para uma classe abstrata com o mesmo nome É responsabilidade do desenvolvedor criar a classe que implenta essa classe abstrata, garantindo a correta recomposição do estado do objeto no processo de unmarshal O IIOP.NET convenciona que a classe com a implementação do valuetype deve ter o mesmo nome, seguido do sufixo Impl Além disso, deve ser marcada como serializable e ter um construtor sem parâmetros

16 versão 1 - julho/2013 Mapeamento de valuetype // C# [ImplClass("exemplo.NodeImpl")] [RepositoryID("IDL:exemplo/Node:1.0")] [Serializable] public abstract class Node : IIdlEntity { public int id; public Node _next; } // IDL valuetype Node { public long id; public Node next; };

17 versão 1 - julho/2013 Mapeamento de valuetype O desenvolvedor deve criar a classe que implementa a classe abstrata gerada a partir do valuetype [Serializable] public class NodeImpl : Node { public NodeImpl() { }

18 versão 1 - julho/2013 Mapeamento de valuetype Quando entregar somente implementações de ValueTypes em uma DLL, caso o programa não referencie nenhum tipo da DLL, a mesma não será carregada Lembre-se então de carregá-la com Assembly.Load(“ ”)

19 versão 1 - julho/2013 Mapeamento de ANY O tipo any usado na IDL é mapeado para a classe C# System.Object –Quando um método receber um any, pode-se passar qualquer objeto e o IIOP.NET se encarregará da conversão –Quando um any for recebido, basta ser convertido para o tipo esperado Alternativamente pode-se utilizar a opção –mapAnyToCont para o compilador de IDL, e assim o tipo IDL any passará a ser convertido em um container org.omg.CORBA.Any

20 versão 1 - julho/2013 Mapeamento de ANY // C# OrbServices orb = OrbServices.GetSingleton(); int arg2 = 89; omg.org.CORBA.TypeCode ulongTC = orb.create_ulong_tc(); Any any = new Any(arg2, ulongTC); int result2 = m_testService.ExtractFromULongAny(any); // IDL CORBA::ULong ExtractFromULongAny(const CORBA::Any& arg); Exemplo onde é necessário enviar um unsigned long em um any Utiliza-se o container org.omg.CORBA.Any para forçar o marshaller a usar o tipo diferente, já que o int C# é signed

21 versão 1 - julho/2013 Mapeamento de ANY // C# OrbServices orb = OrbServices.GetSingleton(); TypeCode wstringTC = orb.create_wstring_tc(0); Any any = new Any("myString", wstringTC); myObject.Test(any); A FAQ do IIOP.NET menciona um problema do JacORB (não especifica qual versão) para receber Any’s com typecode 30 (valor de tipo encapsulado) Isso geralmente ocorre quando uma string.NET é convertida em um Any. O código acima mostra como evitar esse problema

22 versão 1 - julho/2013 Módulos Um módulo IDL é mapeado para um namespace C# com o mesmo nome // IDL module tecgraf { module openbus { module DRMAA {... } // namespace C# namespace tecgraf.openbus.DRMAA {}

23 versão 1 - julho/2013 Conflitos de nomes Em geral, os nomes usados na IDL são mapeados diretamente para os mesmos nomes em C# Conflitos de nomes no mapeamento são resolvidos usando um prefixo _ no nome em C#


Carregar ppt "Versão 1 - julho/2013 Tecgraf PUC-Rio Novembro de 2013 Mapeamento de IDL para C#"

Apresentações semelhantes


Anúncios Google