• Nenhum resultado encontrado

O Serviço de Nomes CORBA

N/A
N/A
Protected

Academic year: 2022

Share "O Serviço de Nomes CORBA"

Copied!
13
0
0

Texto

(1)

1 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

O Serviço de Nomes CORBA

Revendo a OMA

Object Request Broker (ORB)

Object Services Application

Interfaces Domain

Interfaces Domain Interfaces

Domain Interfaces

Domain

Interfaces

OMA (Object Management Arquitecture):

(2)

3 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Object Services

” Naming service

– Dado o nome do objeto, obter a object reference – Analogia: lista telefônica

” Trading service

– Analogia: lista de páginas amarelas

” Event service

– Propagação de eventos assíncronos

” Security service

– Segurança

” Transaction service

– Transações distribuídas

4 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

Naming Service

” Permite que nomes sejam associados a object references

” Clientes obtém object references consultando o naming service

– Eles não precisam se basear em em object references convertidas para strings

” Como o clientes de um objeto chegam a ele pelo nome, você pode trocar o objeto sem precisar alterar os clientes

– Registre o novo objeto com o naming service

(3)

5 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Name s e NamingContext s

” Um NamingContext é um objeto que contém um conjunto de Names

” Cada Name pode estar associado a um objeto ou a um NamingContext

– o Name é relativo ao NamingContext que o contém

– os Names de um NamingContext podem estar associados a outros NamingContexts,

permitindo a criação de grafos de nomes

Hierarquias de Nomes

Root NamingContext

Development Production Test

. . . obj1 obj2

(4)

7 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Estrutura do Módulo CosNaming

// File: CosNaming.idl

#pragma prefix "omg.org"

module CosNaming {

// Definições de tipos (structs, sequences, etc...) ...

// Definições de interfaces interface NamingContext {

...

};

interface BindingIterator { ...

};

interface NamingContextExt { ...

};

};

8 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

Estrutura dos Nomes

” Um Name é uma sequência de NameComponents

” Cada NameComponent é um par (id, kind)

” Analogia: nomes de arquivos da forma nome.ext

– o nome corresponde ao id

– a extensão (ext) corresponde ao kind

” Muitos consideram que a distinção entre id e kind é uma má idéia

” Recomendação:

– Sempre deixe o campo kind vazio

– Se quiser um nome com extensão, coloque ambos no

campo id , usando o caracter “.” como separador

(5)

9 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Estrutura dos Nomes

(cont.)

// File: CosNaming.idl module CosNaming {

// Definições de tipos typedef string Istring;

struct NameComponent { Istring id;

Istring kind;

};

typedef sequence<NameComponent> Name;

// Mais definições de tipos...

};

Resolução de Nomes

” A resolução de um nome é sempre relativa a um contexto (o contexto inicial).

” O serviço de nomes procura nesse contexto uma associação com a primeira componente do nome

” Se o nome tiver mais de uma componente, essa associação deve ser com outro contexto

” A resolução do restante do nome prossegue no contexto associado à primeira componente

cxt->op([c1, c2,… ,cn])

cxt->resolve([c1])->op([c2, c3,…, cn])

(6)

11 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

A Interface NamingContext

// File: CosNaming.idl module CosNaming {

...

interface NamingContext { ...

void bind(in Name n, in Object obj)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

void rebind(in Name n, in Object obj)

raises(NotFound, CannotProceed, InvalidName);

void bind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName,

AlreadyBound);

void rebind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName);

12 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

A Interface NamingContext

(cont.) Object resolve(in Name n)

raises(NotFound, CannotProceed, InvalidName);

void unbind(in Name n)

raises(NotFound, CannotProceed, InvalidName);

NamingContext new_context();

NamingContext bind_new_context(in Name n)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

void destroy() raises(NotEmpty);

void list(in unsigned long how_many, out BindingList bl,

out BindingIterator bi);

};

...

};

(7)

13 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Registrando um Nome (em Java)

// Cria o objeto quoter

QuoterImpl quoterServant = new QuoterImpl("Reuters");

org.omg.CORBA.Object quoter =

quoterServant._this_object(orb);

// Registra o quoter no serviço de nomes org.omg.CORBA.Object obj =

orb.resolve_initial_references("NameService");

NamingContext nc = NamingContextHelper.narrow(obj);

NameComponent[] name = new NameComponent[1];

name[0] = new NameComponent(”ServiçoDeCotações", "");

nc.bind(name, quoter);

Obtendo um NamingContext Inicial

” Um problema do tipo “ovo e galinha”: como um programa obtém um NamingContext inicial?

– No exemplo anterior, como o objeto obteve uma referência para um NamingContext?

” Solução: a operação

resolve_initial_references é suportada diretamente pelo ORB

– Ela é um naming service minimal

(8)

15 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Resolvendo um Nome (em Java)

org.omg.CORBA.Object obj =

orb.resolve_initial_references("NameService");

NamingContext nc = NamingContextHelper.narrow(obj);

NameComponent[] name = ... // o nome a resolver;

try {

obj = nc.resolve(name);

}

catch (NotFound nf) {

System.out.println("Nome não encontrado... ");

}

16 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

Tipos Auxiliares para a Operação list

// File: CosNaming.idl module CosNaming {

// Definições de tipos ...

enum BindingType {nobject, ncontext};

struct Binding {

Name binding_name; // devia ser NameComponent!!!

BindingType binding_type;

};

typedef sequence<Binding> BindingList;

// Definições de interfaces ...

};

(9)

17 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

Interface Auxiliar para a Operação list

// File: CosNaming.idl module CosNaming {

...

interface BindingIterator {

boolean next_one(out Binding b);

boolean next_n(in unsigned long how_many, out BindingList bl);

void destroy();

};

...

};

” Problema:

– E se os clientes esquecerem de chamar destroy ?

Defeito da Interface NamingContext

” A maioria de suas operações recebem Names (sequências de NameComponents)

– É inconveniente lidar com Name s

” Solução (na nova versão no serviço de nomes):

– Uma convenção para nomes “stringficados”:

O caracter “/” é usado para separar os componentes do nome

O caracter “.” é usado para separar os campos ide kind de cada componente

O caracter “\” é usado como “escape”

Exemplos: "a/b/c", "id1.kind1/id2.kind2/id3"

– Uma nova interface ( NamingContextExt ) com operações de conversão entre Name s e nomes

“stringficados”.

(10)

19 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

A Interface NamingContextExt

module CosNaming { ...

interface NamingContextExt : NamingContext { typedef string StringName;

typedef string Address;

typedef string URLString;

StringName to_string(in Name n) raises(InvalidName);

Name to_name(in StringName sn) raises(InvalidName);

exception InvalidAddress {};

URLString to_url(in Address addr, in StringName sn) raises(InvalidAddress, InvalidName);

Object resolve_str(in StringName n)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

};

};

20 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

Naming Service: Sumário

” Serviço básico e bastante utilizado

” Operações bind, unbind e rebind para object references e para NamingContexts

” Operações para resolver nomes e para listar o conteúdo de um NamingContext

” Operações para criar e destruir um NamingContext

” Flexibilidade: não impõe ao usuário uma

política de definição de nomes

(11)

21 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

O CosNaming Completo

// File: CosNaming.idl

#pragma prefix "omg.org"

module CosNaming {

typedef string Istring;

struct NameComponent { Istring id;

Istring kind;

};

typedef sequence<NameComponent> Name;

enum BindingType {nobject, ncontext};

struct Binding {

Name binding_name; // should be NameComponent!!!

BindingType binding_type;

};

typedef sequence<Binding> BindingList;

interface BindingIterator; // forward declaration

O CosNaming Completo

(cont.)

interface NamingContext { enum NotFoundReason {

missing_node, not_context, not_object };

exception NotFound { NotFoundReason why;

Name rest_of_name;

};

exception CannotProceed { NamingContext cxt;

Name rest_of_name;

};

exception InvalidName {};

exception AlreadyBound {};

exception NotEmpty {};

(12)

23 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

O CosNaming Completo

(cont.)

void bind(in Name n, in Object obj)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

void rebind(in Name n, in Object obj)

raises(NotFound, CannotProceed, InvalidName);

void bind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName,

AlreadyBound);

void rebind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName);

Object resolve(in Name n)

raises(NotFound, CannotProceed, InvalidName);

void unbind(in Name n)

raises(NotFound, CannotProceed, InvalidName);

NamingContext new_context();

24 Copyright © 1998, 1999 Francisco Reverbel

IME-USP

Departamento de Ciência da Computação

O CosNaming Completo

(cont.)

NamingContext bind_new_context(in Name n)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

void destroy() raises(NotEmpty);

void list(in unsigned long how_many, out BindingList bl,

out BindingIterator bi);

}; // end of interface NamingContext

interface BindingIterator {

boolean next_one(out Binding b);

boolean next_n(in unsigned long how_many, out BindingList bl);

void destroy();

};

(13)

25 Copyright © 1998, 1999 Francisco Reverbel IME-USP

Departamento de Ciência da Computação

O CosNaming Completo

(cont.)

interface NamingContextExt : NamingContext { typedef string StringName;

typedef string Address;

typedef string URLString;

StringName to_string(in Name n) raises(InvalidName);

Name to_name(in StringName sn) raises(InvalidName);

exception InvalidAddress {};

URLString to_url(in Address addr, in StringName sn) raises(InvalidAddress, InvalidName);

Object resolve_str(in StringName n)

raises(NotFound, CannotProceed, InvalidName, AlreadyBound);

};

}; // end of module CosNaming

Referências

Documentos relacionados

• Conforme comprovado pelo tratamento S2, a utilização de dois ventiladores novos, sistema de nebulização e acionamento automático dos equipamentos foram capazes de

Entretanto pode-se identificar, a partir do olhar das mulheres, a fragilidade da atenção básica como um dos fatores que comprometeram a assistência pré natal e o tratamento

Não pertencesse ele ao mundo inteligível, então não seria possível alguma lei moral muito menos o imperativo categórico que é o desdobramento da própria

As lajes são placas de concreto que têm como função absorver as ações verticais, permanentes e variáveis, que são transmitidos para as vigas - juntamente com as cargas

O risco de disseção aórtica tipo A nos doentes com SM está associada a uma elevada taxa de mortalidade e está relacionada com o diâmetro da raiz da aorta e da aorta ascendente

Estrutura para análises fisico-químicas laboratoriais 23 Pesca com 'galão' realizada no açude Paus Branco, Madalena/CE 28 Macrófitas aquáticas flutuantes no nude Paus

Os deslocamentos captados são aqueles de origem e destino entre as grandes regiões (Norte, Nordeste, Centro-oeste, Sudeste e Sul) e entre as Unidades da Federação

Quando esse sinal desaparecer, a controladora manterá o transmissor no ar por um tempo (conhecido como rabicho ou “hang time”) e emite também o conhecido bip de cortesia, que