Tópicos Avançados em Sistemas Distribuídos
-
Upload
thor-anderson -
Category
Documents
-
view
48 -
download
0
description
Transcript of 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]
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
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
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
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
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, ...
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
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
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
JNDI - Arquitetura
Guilherme Amaral Avelino - [email protected]
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
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
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
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
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”);
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
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
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?
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.