19
TÓPICOS AVANÇADOS EM SISTEMAS DISTRIBUÍDOS Java Naming and Directory Interface - JNDI Guilherme Amaral Avelino - [email protected]

Tópicos Avançados em Sistemas Distribuídos

Embed Size (px)

DESCRIPTION

Tópicos Avançados em Sistemas Distribuídos. Java Naming and Directory Interface - JNDI. Serviço de Nomes. A principal funcionalidade de um serviço de nomes é permitir a associação de um nome (ou outra representação mais simples) a recursos computacionais como: - PowerPoint PPT Presentation

Citation preview

Page 1: Tópicos Avançados em Sistemas Distribuídos

TÓPICOS AVANÇADOS EM SISTEMAS DISTRIBUÍDOSJava Naming and Directory Interface - JNDI

Guilherme Amaral Avelino - [email protected]

Page 2: Tópicos Avançados em Sistemas Distribuídos

Serviço de Nomes

Guilherme Amaral Avelino - [email protected]

A principal funcionalidade de um serviço de nomes é permitir a associação de um nome (ou outra representação mais simples) a recursos computacionais como: Endereços de memória, de rede, de serviços; Objetos e referências; Códigos no geral.

Suas duas funções básicas são: Associar Localizar

Exemplos: Sistema de arquivos Sistema DNS

/usr/bin/etc/usr/bin/etc

10B0:111110B0:1111

www.facid.com.brwww.facid.com.br

74.55.112.14674.55.112.146

Page 3: Tópicos Avançados em Sistemas Distribuídos

Ponteiros e referências

Guilherme Amaral Avelino - [email protected]

Muitas vezes o sistema não armazena o recurso identificado pelo nome, guarda apenas uma referência (ou ponteiro) para ele

Nome#ponteir

o

Objeto

Ligado a

Page 4: Tópicos Avançados em Sistemas Distribuídos

Convenções de Nomenclatura

Guilherme Amaral Avelino - [email protected]

Cada serviço de nomes tem seu próprio mecanismo para fornecer um nome Estruturas similares, mas com convenções

diferentes geram incompatibilidades Exemplos:

Nomes de arquivos Unix – requer que componentes de nomes sejam ordenados da esquerda para a direita e separados pelo caractere ‘/’. Ex: /usr/bin/arquivo.txt

Nomes de domínio – estabelece que componentes do mesmo nome sejam ordenados relativos a raiz do domínio (.com, .net, .br) da direita para a esquerda e separados pelo caractere ‘.’ . Ex: maq.subdom.dom.com.br

LDAP – pares nome-valor são ordenados da direita para a esquerda. Ex: tel=43222122, area=86, pais=55

Page 5: Tópicos Avançados em Sistemas Distribuídos

Nomes atômicos, compostos e federações

Guilherme Amaral Avelino - [email protected]

Nome atômico é o componente indivisível de um nome arquivo.txt em c:\textos\arquivo.txt usr em /usr/local/bin/java org em jakarta.apache.org

Nome composto (Compound Name) é a combinação de zero ou mais nomes atômicos de acordo com uma certa convenção Ex: nomes a direita no exemplo anterior

Federação (Federation ou Compositive Name) é um nome que mistura nomes de espaços de nomes diferentes. Exemplo: http://java.sun.com/products/j2ee/index.html Espaço de nomes URL Scheme ID: http:// Espaço de nomes DNS: java.sun.com Espaço de nomes do sistema de arquivos:

/products/j2ee/index.html

Page 6: Tópicos Avançados em Sistemas Distribuídos

Contexto

Guilherme Amaral Avelino - [email protected]

É um conjunto de ligações nome objetos Um contexto pode ser associado a outro

contexto (subcontexto), fornecendo uma hierarquia para busca de nomes

A resolução de um nome (obtenção de um objeto associado) ocorre em um escopo limitado pelo seu contexto

Exemplos de contextos e subcontextos: /usr/bin/java

usr é o contexto; bin é subcontexto de usr, ... www.abc.com.br

br é o contexto, com é subcontexto de br, ...

Page 7: Tópicos Avançados em Sistemas Distribuídos

Serviço de Diretório

Guilherme Amaral Avelino - [email protected]

Extensão natural de um serviço de nomes, ao qual são adicionados atributos Atributos representam características dos

objetos ligados Objetos podem ser localizados pelos seus

atributos Ex: adição de e-mail a um nome de um

usuário

Page 8: Tópicos Avançados em Sistemas Distribuídos

Java Naming and Directory Interface

Guilherme Amaral Avelino - [email protected]

Conjunto de APIs Java para acesso serviços de nomes e diretórios, onde: O serviço de nomes associa nomes a

objetos O serviço de diretórios estende este

conceito adicionando atributos as ligações Facilita o armazenamento e

compartilhamento de informações Ex: uma impressora compartilhada

Page 9: Tópicos Avançados em Sistemas Distribuídos

JNDI - Arquitetura

Guilherme Amaral Avelino - [email protected]

A JNDI é apenas uma API, não um serviço de atribuição de nomes e de diretórios

Para utilizar a JNDI é necessário que haja um serviço disponível

Fornece uma interface entre programas JAVA e serviços de atribuição de nomes

É independente de qualquer implementação de serviços de diretório e pode ser usado com qualquer um que implemente a Service Provider Interface para JNDI

Drivers JNDI em http://java.sun.com/products/jndi/serviceproviders.html

Page 10: Tópicos Avançados em Sistemas Distribuídos

JNDI - Arquitetura

Guilherme Amaral Avelino - [email protected]

Page 11: Tópicos Avançados em Sistemas Distribuídos

JNDI - Pacotes

Guilherme Amaral Avelino - [email protected]

javax.naming Contém classes e interfaces para acesso ao serviços de

atribuição de nomes Context, Name, Binding

javax.naming.directory Estende a classe Naming, adicionando funcionalidades

para acesso a serviços de diretórios Adiciona novas classes para atributos Adiciona a interface DirContext, o qual representa um

contexto de diretório e adiciona métodos para examinar e atualizar atributos associados a diretórios

javax.naming.event Provê suporte para notificação de acessos a serviços de

nomes e diretórios NamingEvent e NamingListener

Page 12: Tópicos Avançados em Sistemas Distribuídos

JNDI - Pacotes

Guilherme Amaral Avelino - [email protected]

javax.naming.ldap Fornece suporte específico para o LDAP

versão 3, adicionando funcionalidades específicas não cobertas pela javax.naming.directory

javax.naming.spi Provê o meio através do qual

desenvolvedores de diferentes servidores de nomes e diretórios possam integrar estes ao JNDI

Page 13: Tópicos Avançados em Sistemas Distribuídos

JNDI - Contexto

Guilherme Amaral Avelino - [email protected]

Interface javax.naming.Context Possui um método lookup para busca de

nomes Busca através de uma String Busca através de um objeto da classe Name

Javax.naming.InitialContext Contexto inicial de um serviço de nome Pode se adicionar propriedades a este

contexto através de um objeto HashTable

Page 14: Tópicos Avançados em Sistemas Distribuídos

JNDI e J2EE

Guilherme Amaral Avelino - [email protected]

JNDI é um dos serviços padrões do J2EE Tem por finalidade fornecer aos componentes

de uma aplicação um padrão para acesso a recursos e outros componentes

Servidores de aplicação J2EE devem fornecer serviço JNDI, denominado ambiente de nomes que contém: Ambiente de variáveis Referências para os EJBs Referências para as fábricas de recursos

JDBC, Jmail, JMS, etc

Page 15: Tópicos Avançados em Sistemas Distribuídos

Usando o JNDI

Guilherme Amaral Avelino - [email protected]

Manipulando contextos Cria contexto inicial

Context ic = new InitialContext(); Busca em um contexto

Context ctx = (Context)ic.lookup(“subcontexto”); Lista nomes e subcontextos

ic.List(“subcontexto”); Cria subcontextos

ic.createSubcontext(“nome_subcontexto”); Ligar um nome composto cria automaticamente todos os

subcontextos intermediários exigidos. Ex: com/sams/publishing/book/j2ee

com, com/sams, com/sams/publishing, com/sams/publishing/book

Destroi subcontextos ic.destroySubcontext(“nome_subcontexto”);

Page 16: Tópicos Avançados em Sistemas Distribuídos

Usando o JNDI

Guilherme Amaral Avelino - [email protected]

Adicionando uma ligação Usa o método bind(object, name) da classe

ContextContext ic = new InitialContext;Pessoa pessoa = new Pessoa(“Pedro”);ic.bind(“Gerente”, pessoa);

O objeto ligado deve implementar a interface Serializable

Exceções podem ser lançadas caso o nome já esteja ligado ou se o nome estiver errado

Page 17: Tópicos Avançados em Sistemas Distribuídos

Usando o JNDI

Guilherme Amaral Avelino - [email protected]

Armazenando uma referência Objeto grande demais Objeto deve ser instanciado dinâmicamente Provedor de serviço deve suportar objetos

Referenceable Exigências:

Objeto deve implementar a interface javax.naming.Referenceable e definir o método getReference(), o qual define o nome da classe referida e uma classe Factory, que pode ser utilizada para construir o objeto referenciado

Deve existir uma classe que implemente ObjectFactory fornecendo método necessário para criação de uma instância do objeto

Page 18: Tópicos Avançados em Sistemas Distribuídos

Exercicio

Guilherme Amaral Avelino - [email protected]

1. Qual a função de um serviço de atribuição de nomes e de que forma ele facilita o desenvolvimento de aplicações distribuídas?

2. Qual a vantagem de se utilizar o JNDI ao invés de acessar diretamente um servidor de nomes e diretórios?

3. O que é um contexto? Como ele facilita a busca por uma ligação em um serviço de atribuição de nomes?

4. Quais são os principais pacotes de classes fornecidos pelo JNDI e para que são utilizados?

Page 19: Tópicos Avançados em Sistemas Distribuídos

Exercicio

Guilherme Amaral Avelino - [email protected]

5. Cria a seguinte hierarquia de contextos e objetos (Fruit) usando a classes e métodos fornecidos pela API do JNDI.