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

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

Serviço de Negociação (Trading Service). Serviço de Nomes Serviço de nomes CORBA: mapeia nomes a objetos clientes devem saber exatamente qual objeto desejam.

Apresentações semelhantes


Apresentação em tema: "Serviço de Negociação (Trading Service). Serviço de Nomes Serviço de nomes CORBA: mapeia nomes a objetos clientes devem saber exatamente qual objeto desejam."— Transcrição da apresentação:

1 Serviço de Negociação (Trading Service)

2 Serviço de Nomes Serviço de nomes CORBA: mapeia nomes a objetos clientes devem saber exatamente qual objeto desejam

3 Necesidades do usuário Serviço mais dinâmico de descoberta de objetos cliente possui dados imprecisos ou incompletos sobre o que deseja uma maior variedade de serviços com funções semelhantes

4 Serviço de negociação OMG Trading Service como o serviço de nomes, contém referências para objetos usuários utilizam o trader para obter informações sobre serviços que atendam a suas necessidades análogo às páginas amarelas

5 Funcionalidades armazena anúncios de serviços entidades anunciam um serviço(exporter) a referência do objeto anunciado é imutável. a descrição do serviço é feita pelas suas propriedades, que podem ser alteradas

6 Funcionalidades pode-se anunciar um objeto mais de uma vez, sob diferentes propriedades anúncios podem ser retirados do trader (withdraw) procura por serviços sob certas restrições de propriedades do serviço (import)

7 Tipos de Serviço são armazenados num banco de dados de tipos de serviço, o Repositório de Tipos de Serviço cada trader pode ter referência para somente 1 repositório Repos. de tiposTrader 1 *  uses

8 Tipos de Serviço são identificados por um nome único no repositório Possuem: uma identificação uma lista de definições de propriedades (pode ser vazia) uma lista de tipos de serviços pais (pode ser vazia) IncarnationNumber add_type( in CosTrading::ServiceTypeName name, in Identifier if_name, in PropStructSeq props, in ServiceTypeNameSeq super_types )

9 Tipos de Serviços Propriedades são definidas por: um nome um código que determina o tipo do valor da propriedade o tipo normal somente para leitura obrigatória obrigatória e somente para leitura dinâmicas ou estáticas

10 Propriedades Dinâmicas podem mudar ao longo do tempo, como o número de folhas numa impressora a cada pesquisa, é consultado o valor da propriedade naquele momento é mais lento que propriedades estáticas Estáticas “imutáveis” - mudam com intervenção do administrador podem não refletir o estado real do objeto

11 Exemplos de tipos de serviços serviço de vídeo-conferência serviço de segurança ou certificação serviço de transações serviço de bate-papo serviço para armazenamento de grandes quantidades de dados (strorage) serviço de informação do clima

12 Módulos do trader - IDL CosTrading TraderComponents : atributos para as componentes do trader Register: operações para criação novas ofertas de serviços (exporters) Lookup : operações para pesquisa de serviços (importers) Admin : atributos para administração de políticas Link : operações para conexão entre traders (federação) Proxy : operações para proxies - objetos que não são implementações

13 Módulos do trader - IDL CosTradingRepos ServiceTypeRepository: operações para manipular tipos de serviço CosTradingDynamic DynamicPropEval: para obter valores de propriedades dinâmicas

14 Interação com o trader 3 estágios principais: definição do tipo no repositório de tipos registro do serviço pesquisa de serviço

15 Registrando um tipo de serviço

16 CosTradingRepos Definição, consulta e remoção de tipos de serviços module CosTradingRepos { interface ServiceTypeRepository { IncarnationNumber add_type( in CosTrading::ServiceTypeName name, in Identifier if_name, in PropStructSeq props, in ServiceTypeNameSeq super_types) void remove_type(in CosTrading::ServiceTypeName name) };

17 Oferta de serviço é a descrição de um serviço Exemplo Printer name: string floor: short language: string color: string ppm: short Propriedades

18 Oferta de serviço é a descrição de um serviço IncarnationNumber add_type( in CosTrading::ServiceTypeName name, in Identifier if_name, in PropStructSeq props, in ServiceTypeNameSeq super_types ) IDL:printer:1.0 IDL:printer_if:1.0 name: string floor: short language: string color: string ppm: short Propriedades

19 Implementação // conecta com o trader e obtém o objeto lookup org.omg.CORBA.Object trader = orb.resolve_initial_references("TradingService"); Lookup lookup = LookupHelper.narrow(trader); // referência para o repositório de tipos org.omg.CORBA.Object obj = lookup.type_repos(); ServiceTypeRepository typeRepos = ServiceTypeRepositoryHelper.narrow(obj); // cria uma seqüência de estrutura de propriedades.omg.CosTradingRepos.ServiceTypeRepositoryPackage.PropStruct[] props = new org.omg.CosTradingRepos.ServiceTypeRepositoryPackage.PropStruct[1];

20 Implementação props[0] = new...PropStruct(); // string que representa o nome da propriedade props[0].name = "name"; // tipo da propriedade props[0].value_type = orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string); // modo da propriedade (MANDATORY, READONLY ou NORMAL) props[0].mode = PropertyMode.PROP_MANDATORY_READONLY; props[1]... // adiciona o novo tipo de serviço typeRepos.add_type("printer", // tipo do serviço "IDL:Printer:1.0",// nome da IDL props, // propriedades new String[0]); // supertipos para herdar

21 Registrando um serviço

22 Interface Register registro de uma oferta de serviço OfferId export(in Object reference, in ServiceTypeName type, in PropertySeq properties) modificação de um serviço remoção um serviço já existente void modify(in OfferId id, in PropertyNameSeq del_list, in PropertySeq modify_list) void withdraw(in OfferId id)

23 interface Register { OfferId export( in Object reference, in ServiceTypeName type, in PropertySeq properties ); }; : Printer name = hp5000 floor = 4 language = ps color = 256 ppm = 12 Propriedades struct Property { PropertyName name; PropertyValue value; }; IDL:printer:1.0

24 Implementação // cria o servente e conecta-o PrinterImpl printerImpl = new PrinterImpl(); Printer printer = printerImpl._this(orb); // usa o objeto lookup para obter a componente “Register” Register register = lookup.register_if(); // seqüência de propriedades org.omg.CosTrading.Property[] props_reg = new org.omg.CosTrading.Property[1]; props_reg[0] = new org.omg.CosTrading.Property(); props_reg[0].name = "name"; props_reg[0].value = orb.create_any(); props_reg[0].value.insert_string("laser4"); // exporta o serviço String offer_id = register.export( printer, // o objeto "printer", // tipo do serviço props_reg); // propriedades

25 Pesquisa de serviço

26 Interface Lookup oferece meios de pesquisa: por um serviço específico que atende determinadas restrições por ordem de preferência void query( in ServiceTypeName type, in Constraint constr, in Preference pref, in PolicySeq policies, in SpecifiedProps desired_props, in unsigned long how_many, out OfferSeq offers, out OfferIterator offer_itr, out PolicyNameSeq limits_applied)

27 Expressões de busca (usadas como preferência) literais ‘a’ ‘string’ comparação == != = operadores aritméticos + - * / operadores booleanos and or not pertinência ‘elemento’ in Conjunto substrings ‘de’ ~ ‘abcdefg’ existência (de prop.) exist Propriedade

28 Políticas para consultas search_card, match_card, return_card : número máximo de serviços para serem procurados, ordenados e retornados, respectivamente max_list : número máximo a ser retornado. Para o restante, usa-se next_n() support_dynamic_properties : busca considera serviços com propriedades dinâmicas support_modifiable_properties : busca não considera propriedades somente-para-leitura outras (federação)...

29 Exemplo de busca Serviços disponíveis Name Floor Language ColorPPM mtl-all 3 postscript black24 rle2 text black40 hpps2 postscript black24 blue2 postscript 25612 colorPS3 postscript color12 Restrição: ((color == 'black') and (language == 'postscript')) Preferências: min(floor)

30 Resultado da busca name = rle color = black floor = 2 language = postscript ppm = 40 IOR:00000000002449444c3a6f6d672e6f72672f436... Oferta 1 name = hpps color = black floor = 3 language = postscript ppm = 24 IOR:000000d49444c3a6fd672e6f72672f436f73547... Oferta 2

31 Implementação lookup.query( // tipo do serviço "printer", // restrições "((color == 'black') and (language == 'postscript'))", // ordem de preferência (first, max, min, with, random) // em que as ofertas serão retornadas "random", // políticas desejadas (27) defaultPolicies, // propriedades a serem retornadas (all, some, none) desiredProperties, // número inicial de ofertas a serem retornadas 5, // ofertas retornadas offers, // ofertas restantes iterator, // políticas que tiveram seus limites atingidos limitsReached);

32 Federação de traders

33 Conceitos gerais agrupa recursos balanceamento de carga replicação escalabilidade melhor gereciamento das ofertas de serviços e das requisições destina-se somente a consultas, não a registro de serviços

34 D A C F B E

35 Interface Link criação de um vínculo void add_link(in LinkName name, in Lookup target, in FollowOption def_pass_on_follow_rule, in FollowOption limiting_follow_rule) modificação de um vínculo remoção de vínculos void modify_link(in LinkName name, in FollowOption def_pass_on_follow_rule, in FollowOption limiting_follow_rule void remove_link(in LinkName name) enum FollowOption { // pesquisa local somente local_only, // passa para outros, se não encontrar localmente if_no_local, // sempre encaminha para outros always };

36 Políticas para consultas follow_rule local_only : pesquisa local somente if_no_local : encaminha para outros, se não encontrar localmente always : sempre encaminha starting_trader : consulta é encaminhada para todos os traders e inicia no último hop_count : número máximo de traders que uma consulta pode percorrer

37 Administração

38 interface Admin : TraderComponents, SupportAttributes, ImportAttributes,LinkAttributes { readonly attribute OctetSeq request_id_stem; unsigned long set_def_search_card (in unsigned long value); unsigned long set_max_search_card (in unsigned long value); unsigned long set_def_match_card (in unsigned long value); unsigned long set_max_match_card (in unsigned long value); unsigned long set_def_return_card (in unsigned long value); unsigned long set_max_return_card (in unsigned long value); unsigned long set_max_list (in unsigned long value); boolean set_supports_modifiable_properties (in boolean value); boolean set_supports_dynamic_properties (in boolean value); boolean set_supports_proxy_offers (in boolean value); unsigned long set_def_hop_count (in unsigned long value); unsigned long set_max_hop_count (in unsigned long value); FollowOption set_def_follow_policy (in FollowOption policy); FollowOption set_max_follow_policy (in FollowOption policy); FollowOption set_max_link_follow_policy (in FollowOption policy); TypeRepository set_type_repos (in TypeRepository repository); };


Carregar ppt "Serviço de Negociação (Trading Service). Serviço de Nomes Serviço de nomes CORBA: mapeia nomes a objetos clientes devem saber exatamente qual objeto desejam."

Apresentações semelhantes


Anúncios Google