O que é o JNDI ?
Qual é o seu uso básico?
Quando é usado?
O que é o JNDI ?
Qual é o seu uso básico?
Quando é usado?
Respostas:
O que é o JNDI?
Significa nomeação de Java e interface de diretório .
Qual é o seu uso básico?
O JNDI permite que aplicativos distribuídos procurem serviços de uma maneira abstrata e independente de recursos.
Quando é usado?
O caso de uso mais comum é configurar um conjunto de conexões com o banco de dados em um servidor de aplicativos Java EE. Qualquer aplicativo implementado nesse servidor pode obter acesso às conexões necessárias usando o nome JNDI java:comp/env/FooBarPool
sem precisar conhecer os detalhes sobre a conexão.
Isso tem várias vantagens:
devl->int->test->prod
ambientes, poderá usar o mesmo nome JNDI em cada ambiente e ocultar o banco de dados real que está sendo usado. Os aplicativos não precisam mudar à medida que migram entre ambientes.O que é o JNDI?
A Java Naming and Directory Interface TM (JNDI) é uma interface de programação de aplicativos (API) que fornece funcionalidade de nomeação e diretório para aplicativos gravados usando a linguagem de programação Java TM . Ele é definido como independente de qualquer implementação de serviço de diretório específica. Assim, uma variedade de diretórios (novos, emergentes e já implantados) pode ser acessada de maneira comum.
Qual é o seu uso básico?
A maior parte é abordada na resposta acima, mas eu gostaria de fornecer arquitetura aqui para que acima faça mais sentido.
Para usar o JNDI, você deve ter as classes JNDI e um ou mais provedores de serviços. O Java 2 SDK, v1.3 inclui três provedores de serviços para os seguintes serviços de nomenclatura / diretório:
Então, basicamente, você cria objetos e os registra nos serviços de diretório, nos quais você pode posteriormente procurar e executar operações.
JNDI em termos leigos é basicamente uma interface para poder obter instâncias de recursos internos / externos, como
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
ou qualquer outro tipo definido por um adaptador de recursos JCA. Ele fornece uma sintaxe para poder criar acesso interno ou externo. ie (comp / env neste caso significa onde o componente / ambiente, existem muitas outras sintaxes):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
para obter informações de configuração.
Visão geral da JNDI
JNDI é uma API especificada na tecnologia Java que fornece funcionalidade de nomenclatura e diretório para aplicativos gravados na linguagem de programação Java. Ele foi projetado especialmente para a plataforma Java usando o modelo de objeto do Java. Usando JNDI, aplicativos baseados na tecnologia Java podem armazenar e recuperar objetos Java nomeados de qualquer tipo. Além disso, o JNDI fornece métodos para executar operações de diretório padrão, como associar atributos a objetos e procurar objetos usando seus atributos.
A JNDI também é definida independentemente de qualquer implementação específica de serviço de nomes ou diretório. Ele permite que os aplicativos acessem serviços de nomes e diretórios diferentes, possivelmente múltiplos, usando uma API comum. Diferentes fornecedores de serviços de nomes e diretórios podem ser conectados perfeitamente por trás dessa API comum. Isso permite que aplicativos baseados na tecnologia Java aproveitem as informações em uma variedade de serviços de nomes e diretórios existentes, como LDAP, NDS, DNS e NIS (YP), além de permitir que os aplicativos coexistam com sistemas e softwares herdados.
Usando o JNDI como ferramenta, é possível criar novos aplicativos portáteis e poderosos que não apenas tiram proveito do modelo de objeto do Java, mas também estão bem integrados ao ambiente em que são implementados.
O que é o JNDI?
JNDI significa Java Naming and Directory Interface. Ele vem de fábrica com o J2EE.
Qual é o seu uso básico?
Com esta API, você pode acessar muitos tipos de dados, como objetos, dispositivos, arquivos de nomes e serviços de diretório, por exemplo. é usado pelo EJB para encontrar objetos remotos. O JNDI foi projetado para fornecer uma interface comum para acessar serviços existentes, como DNS, NDS, LDAP, CORBA e RMI.
Quando é usado?
Você pode usar o JNDI para executar operações de nomenclatura, incluindo operações de leitura e operações para atualizar o espaço para nome. As seguintes operações são descritas aqui .
Um serviço de nomenclatura associa nomes a objetos e localiza objetos com base em seus nomes. (O registro RMI é um bom exemplo de serviço de nomenclatura.) O JNDI fornece uma interface comum para muitos serviços de nomenclatura existentes, como LDAP, DNS.
Sem o JNDI, o local ou as informações de acesso dos recursos remotos teriam que ser codificados em aplicativos ou disponibilizados em uma configuração. Manter essas informações é bastante tediosa e propensa a erros.
Só estou curioso para saber por que os documentos oficiais são tão ignorados que já elaboram os detalhes meticulosamente.
Mas se você quiser entender os casos, consulte a resposta da duffymo .
A Java Naming and Directory Interface TM (JNDI) é uma interface de programação de aplicativos (API) que fornece funcionalidade de nomeação e diretório para aplicativos gravados usando a linguagem de programação Java TM . Ele é definido como independente de qualquer implementação de serviço de diretório específica. Assim, uma variedade de diretórios - novos, emergentes e já implantados - pode ser acessada de maneira comum.
E sua arquitetura
E normalmente como você o usa .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Talvez porque não expliquem de maneira suficiente que as pessoas comuns possam entender?
Usarei um exemplo para explicar como o JNDI pode ser usado para configurar o banco de dados sem que nenhum desenvolvedor de aplicativos saiba o nome de usuário e a senha do banco de dados.
1) Configuramos a fonte de dados no standalone-full.xml do servidor JBoss . Além disso, também podemos configurar os detalhes do pool.
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
Agora, esse jndi-name e seu objeto associado de fonte de dados estarão disponíveis para nosso application.application.
2) Podemos recuperar esse objeto de fonte de dados usando a classe JndiDataSourceLookup.
O Spring instancia o bean da fonte de dados, depois de fornecermos o nome jndi.
Agora, podemos alterar o tamanho do pool, nome de usuário ou senha de acordo com nosso ambiente ou requisito, mas isso não afetará o aplicativo.
Nota : encryptedSecurityDomain, precisamos configurá-lo separadamente no servidor JBoss, como
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
Este é um dos casos de uso. Espero que isso esclareça.
A melhor explicação para mim é dada aqui
O que é JNDI
É uma API para fornecer acesso a um serviço de diretório, ou seja, um nome de mapeamento de serviço (strings) com objetos, referência a objetos remotos ou dados simples . Isso é chamado de ligação. O conjunto de ligações é chamado de contexto . Os aplicativos usam a interface JNDI para acessar recursos.
Para simplificar, é como um mapa de hash com uma chave String e valores de Objeto que representam recursos na web.
Quais problemas o JNDI resolve
Sem o JNDI, o local ou as informações de acesso dos recursos remotos teriam que ser codificados em aplicativos ou disponibilizados em uma configuração. Manter essas informações é bastante tediosa e propensa a erros.
Se um recurso foi realocado em outro servidor, com outro endereço IP, por exemplo, todos os aplicativos que usam esse recurso precisariam ser atualizados com essas novas informações. Com o JNDI, isso não é necessário. Somente a ligação de recurso correspondente deve ser atualizada. Os aplicativos ainda podem acessá-lo com seu nome e a realocação é transparente.