JNDI

A JNDI ou Java Naming and Directory Interface é uma API para acesso a serviços de diretórios. Ela permite que aplicações cliente descubram e obtenham dados ou objetos através de um nome. Assim como todas as APIs Java, ela é independente de plataforma. Adicionalmente, ela especifica uma interface de serviço (SPI), que permite que softwares de serviço de diretório suportem o seu framework. A solução de diretório pode ser baseada em rede, arquivos ou base de dados, sendo apenas uma questão de escolha do fornecedor do produto.

A API JNDI é utilizada em aplicações Java que acessam recursos externos, como base de dados, filas ou tópicos JMS e componentes JavaEE. Os administradores do sistema gravam objetos administrados num serviço de diretório disponibilizado pelo servidor de aplicações (normalmente); a aplicação busca estes objetos através da JNDI (lookup). A API disponibiliza:

  • um mecanismo para ligar um objeto a um nome;
  • uma interface padronizada de busca de objetos no serviço de diretório;
  • uma interface de eventos que permite que um usuário saiba quando uma entrada (nome + objeto) foi modificada;
  • extensões que suportam as capacidades do padrão LDAP.

A SPI permite que a JNDI suporte praticamente qualquer tipo de serviço de diretório incluindo:

A especificação JNDI foi lançada em 10 de março de 1997 pela Sun Microsystems. A versão atual da JNDI é 1.2.

Lookup básico

A JNDI organiza os nomes em uma hierarquia. Um nome pode ser qualquer string, como "org.mydomain.ejb.MyBean". Um nome também pode ser um objeto que suporte a interface Name, porém os objetos são normalmente nomeados através de strings. Cada nome na hierarquia JNDI corresponde a um objeto (ou uma referência deste objeto) gravado no serviço de diretório.

A JNDI define um contexto que especifica onde procurar pelo objeto. O contexto inicial é tipicamente utilizado como ponto de partida.

O contexto inicial é análogo a raiz, ou topo, de uma árvore de diretórios ou sistema de arquivos. Um exemplo de criação de um contexto inicial num trecho de programa em Java:

    Hashtable args = new Hashtable();
    //Inicialmente e necessario definir a classe ''factory'' do contexto 
    args.put( Context.INITIAL_CONTEXT_FACTORY, "com.jndiprovider.TheirContextFactory");
    //O próximo argumento é a URL definindo a localização do objeto:
    args.put( Context.PROVIDER_URL, "http://jndiprovider-database");
    //Finalmente é criado o contexto inicial
    Context myCurrentContext = new InitialContext( args );

Através do objeto de contexto (Context) é realizada a busca (lookup) pelo objeto de nome org.mydomain.ejb.MyBean. Um exemplo:

    Object obj = myCurrentContext.lookup( "org.mydomain.ejb.MyBean" );
    //este passo e necessario para EJBs.
    MyBean myBean = (MyBean) PortableRemoteObject.narrow( reference, MyBean.class );

Buscando

Os diretórios são uma espécie de contexto, eles restringem o espaço da busca (namespace) da mesma maneira que faz uma estrutura de diretórios de um sistema de arquivos.

Ligações externas

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.