JNDI
A Java Naming and Directory Interface é uma Java Application Programming Interface (API) para serviços de diretório . Permite que os clientes descubram e pesquisem objetos e dados por nome. Como todas as APIs Java que fazem interface com sistemas host, ela é independente da implementação subjacente. Além disso, ele especifica uma interface de provedor de serviços (SPI) que permite que implementações de serviços de diretório sejam integradas à estrutura. As implementações podem usar um servidor, um arquivo ou um banco de dados; a escolha é do desenvolvedor.
Introdução
A API JNDI é usada pelas APIs Java RMI e Java EE para pesquisar objetos em uma rede. Jini tem seu próprio serviço de pesquisa e não usa a API JNDI.
A API fornece:
- um mecanismo para vincular um objeto a um nome;
- uma interface de pesquisa de diretório que permite consultas gerais;
- uma interface de eventos que permite aos clientes determinar quando as entradas do diretório foram modificadas;
- Extensões LDAP para suportar os recursos adicionais de um serviço LDAP.
A parte SPI permite suporte para praticamente qualquer tipo de diretório ou serviço de nomenclatura, incluindo:
- LDAP
- DNS
- Serviço de informações de rede
- RMI
- Serviço de nomes CORBA
- sistema de arquivo
A especificação JNDI foi lançada pela Sun Microsystems em 10 de março de 1997 . [1] . A partir de 2006, a versão atual é JNDI 1.2.
Pesquisa básica
A JNDI organiza seus nomes em uma hierarquia. Um nome pode ser qualquer string como "com.mydomain.ejb.MyBean". Um nome também pode ser um objeto que suporta a interface Name, porém a maneira mais comum de nomear um objeto é uma string. Um nome é associado a um objeto no diretório armazenando o objeto ou uma referência JNDI ao objeto no serviço de diretório identificado pelo nome.
A API JNDI define um contexto que especifica onde procurar um objeto. O contexto inicial é normalmente usado como ponto de partida.
No caso mais simples, um contexto inicial deve ser criado usando a implementação específica e os parâmetros extras exigidos pela implementação. O contexto inicial será usado para procurar um nome. O contexto inicial é análogo à raiz de uma árvore de diretórios para um sistema de arquivos. Abaixo está um exemplo de como criar um contexto inicial:
Argumentos da tabela de hash = new tabela de hash ();
//primeiro você deve especificar a fábrica.
//É assim que você escolhe entre a implementação do jboss ou um dos Sun
args . put ( Contexto .INITIAL_CONTEXT_FACTORY , " com.jndiprovider.TheirContextFactory " ); //O próximo argumento é a URL que especifica onde está o armazenamento de dados: args . put ( Contexto . PROVIDER_URL , "http://jndiprovider-database" ); //Talvez seja necessário fornecer credenciais de segurança //em seguida é criar o contexto inicial Context myCurrentContext = new InitialContext ( args );
Um contexto é então usado para pré-buscar os nomes associados nesse contexto. Por exemplo:
Referência de objeto = myCurrentContext . lookup ( "com.meudominio.MeuBean" );
//esta etapa é necessária com EJB.
MyBean myBean = ( MyBean ) PortableRemoteObject . estreito ( referência , classe MyBean . );
Pesquisas
Os atributos podem ser anexados a entradas especiais chamadas diretórios. Os diretórios são necessários para permitir que os objetos sejam pesquisados por seus atributos associados. Os diretórios são um tipo de contexto, eles restringem o espaço de nomes como uma estrutura de diretórios faz em um sistema de arquivos.