1 / 19

Tópicos Avançados em Sistemas Distribuídos

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:

Download Presentation

Tópicos Avançados em Sistemas Distribuídos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Guilherme Amaral Avelino - gavelino@gmail.com Tópicos Avançados em Sistemas Distribuídos Java Naming and Directory Interface - JNDI

  2. 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: • 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 10B0:1111 www.facid.com.br 74.55.112.146 Guilherme Amaral Avelino - gavelino@gmail.com

  3. Ponteiros e referências • Muitas vezes o sistema não armazena o recurso identificado pelo nome, guarda apenas uma referência (ou ponteiro) para ele Nome #ponteiro Ligado a Objeto Guilherme Amaral Avelino - gavelino@gmail.com

  4. Convenções de Nomenclatura • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  5. Nomes atômicos, compostos e federações • 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 (CompoundName) é 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 CompositiveName) é 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 Guilherme Amaral Avelino - gavelino@gmail.com

  6. Contexto • É 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, ... Guilherme Amaral Avelino - gavelino@gmail.com

  7. Serviço de Diretório • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  8. Java NamingandDirectory Interface • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  9. JNDI - Arquitetura • 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 ServiceProvider Interface para JNDI • Drivers JNDI em http://java.sun.com/products/jndi/serviceproviders.html Guilherme Amaral Avelino - gavelino@gmail.com

  10. JNDI - Arquitetura Guilherme Amaral Avelino - gavelino@gmail.com

  11. JNDI - Pacotes • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  12. JNDI - Pacotes • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  13. JNDI - Contexto • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  14. JNDI e J2EE • 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 Guilherme Amaral Avelino - gavelino@gmail.com

  15. Usando o JNDI • Manipulando contextos • Cria contexto inicial • Contextic = newInitialContext(); • Busca em um contexto • Contextctx = (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 • Destroisubcontextos • ic.destroySubcontext(“nome_subcontexto”); Guilherme Amaral Avelino - gavelino@gmail.com

  16. Usando o JNDI • Adicionando uma ligação • Usa o método bind(object, name) da classe Context Context 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 Guilherme Amaral Avelino - gavelino@gmail.com

  17. Usando o JNDI • 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.Referenceablee 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 Guilherme Amaral Avelino - gavelino@gmail.com

  18. Exercicio • 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? • Qual a vantagem de se utilizar o JNDI ao invés de acessar diretamente um servidor de nomes e diretórios? • O que é um contexto? Como ele facilita a busca por uma ligação em um serviço de atribuição de nomes? • Quais são os principais pacotes de classes fornecidos pelo JNDI e para que são utilizados? Guilherme Amaral Avelino - gavelino@gmail.com

  19. Exercicio • Cria a seguinte hierarquia de contextos e objetos (Fruit) usando a classes e métodos fornecidos pela API do JNDI. Guilherme Amaral Avelino - gavelino@gmail.com

More Related