Qu'est-ce que JNDI ?
Quelle est son utilisation de base?
Quand est-il utilisé?
Qu'est-ce que JNDI ?
Quelle est son utilisation de base?
Quand est-il utilisé?
Réponses:
Qu'est-ce que JNDI?
Il signifie Java Naming and Directory Interface .
Quelle est son utilisation de base?
JNDI permet aux applications distribuées de rechercher des services d'une manière abstraite et indépendante des ressources.
Quand est-il utilisé?
Le cas d'utilisation le plus courant consiste à configurer un pool de connexions de base de données sur un serveur d'applications Java EE. Toute application déployée sur ce serveur peut accéder aux connexions dont elle a besoin en utilisant le nom JNDI java:comp/env/FooBarPool
sans avoir à connaître les détails de la connexion.
Cela présente plusieurs avantages:
devl->int->test->prod
environnements, vous pouvez utiliser le même nom JNDI dans chaque environnement et masquer la base de données réelle utilisée. Les applications n'ont pas à changer lorsqu'elles migrent entre les environnements.Qu'est-ce que JNDI?
Java Naming and Directory Interface TM (JNDI) est une interface de programmation d'application (API) qui fournit des fonctionnalités de nommage et de répertoire aux applications écrites à l'aide du langage de programmation Java TM . Il est défini comme indépendant de toute implémentation de service d'annuaire spécifique. Ainsi, une variété d'annuaires (nouveaux, émergents et déjà déployés) sont accessibles de manière commune.
Quelle est son utilisation de base?
La majeure partie est couverte dans la réponse ci-dessus, mais je voudrais fournir une architecture ici afin que ce qui précède ait plus de sens.
Pour utiliser JNDI, vous devez avoir les classes JNDI et un ou plusieurs fournisseurs de services. Le SDK Java 2, v1.3 comprend trois fournisseurs de services pour les services de nommage / annuaire suivants:
Donc, fondamentalement, vous créez des objets et les enregistrez sur les services d'annuaire sur lesquels vous pourrez ensuite rechercher et exécuter l'opération.
JNDI en termes simples est essentiellement une interface pour pouvoir obtenir des instances de ressources internes / externes telles que
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
ou tout autre type défini par un adaptateur de ressources JCA. Il fournit une syntaxe permettant de créer des accès, qu'ils soient internes ou externes. c'est-à-dire (comp / env dans ce cas signifie où composant / environnement, il y a beaucoup d'autres syntaxes):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
des informations de configuration.
Présentation de JNDI
JNDI est une API spécifiée dans la technologie Java qui fournit des fonctionnalités de nommage et de répertoire aux applications écrites dans le langage de programmation Java. Il est spécialement conçu pour la plate-forme Java utilisant le modèle objet de Java. Grâce à JNDI, les applications basées sur la technologie Java peuvent stocker et récupérer des objets Java nommés de tout type. De plus, JNDI fournit des méthodes pour effectuer des opérations d'annuaire standard, telles que l'association d'attributs à des objets et la recherche d'objets à l'aide de leurs attributs.
JNDI est également défini indépendamment de toute implémentation de nommage ou de service d'annuaire spécifique. Il permet aux applications d'accéder à des services de nommage et d'annuaire différents, voire multiples, à l'aide d'une API commune. Différents fournisseurs de noms et de services d'annuaire peuvent être connectés de manière transparente derrière cette API commune. Cela permet aux applications basées sur la technologie Java de tirer parti des informations dans une variété de services de nommage et d'annuaire existants, tels que LDAP, NDS, DNS et NIS (YP), ainsi que de permettre aux applications de coexister avec les logiciels et systèmes hérités.
En utilisant JNDI comme outil, vous pouvez créer de nouvelles applications puissantes et portables qui non seulement profitent du modèle objet de Java, mais sont également bien intégrées à l'environnement dans lequel elles sont déployées.
Qu'est-ce que JNDI?
JNDI signifie Java Naming and Directory Interface. Il est livré en standard avec J2EE.
Quelle est son utilisation de base?
Avec cette API, vous pouvez accéder à de nombreux types de données, comme les objets, les appareils, les fichiers de nommage et les services d'annuaire, par exemple. il est utilisé par EJB pour rechercher des objets distants. JNDI est conçu pour fournir une interface commune pour accéder aux services existants tels que DNS, NDS, LDAP, CORBA et RMI.
Quand est-il utilisé?
Vous pouvez utiliser le JNDI pour effectuer des opérations de dénomination, y compris des opérations de lecture et des opérations de mise à jour de l'espace de noms. Les opérations suivantes sont décrites ici .
Un service de nommage associe des noms à des objets et trouve des objets en fonction de leurs prénoms (le registre RMI est un bon exemple de service de nommage). JNDI fournit une interface commune à de nombreux services de nommage existants, tels que LDAP, DNS.
Sans JNDI, les informations de localisation ou d'accès des ressources distantes devraient être codées en dur dans les applications ou mises à disposition dans une configuration. La conservation de ces informations est assez fastidieuse et sujette aux erreurs.
Je suis juste curieux de savoir pourquoi les documents officiels sont si ignorés qui élaborent méticuleusement les détails déjà.
Mais si vous souhaitez comprendre les cas, veuillez vous référer à la réponse de duffymo .
Java Naming and Directory Interface TM (JNDI) est une interface de programmation d'application (API) qui fournit des fonctionnalités de nommage et de répertoire aux applications écrites à l'aide du langage de programmation Java TM . Il est défini comme indépendant de toute implémentation de service d'annuaire spécifique. Ainsi, une variété d'annuaires - nouveaux, émergents et déjà déployés - sont accessibles de manière commune.
Et son architecture
Et normalement comment vous l'utilisez .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Peut-être parce qu'ils n'expliquent pas suffisamment que les gens ordinaires peuvent comprendre?
J'utiliserai un exemple pour expliquer comment JNDI peut être utilisé pour configurer la base de données sans qu'aucun développeur d'application ne connaisse le nom d'utilisateur et le mot de passe de la base de données.
1) Nous avons configuré la source de données dans standalone-full.xml du serveur JBoss . De plus, nous pouvons également configurer les détails du 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>
Maintenant, ce nom jndi et son objet source de données associé seront disponibles pour notre application.application.
2) Nous pouvons récupérer cet objet de source de données en utilisant la classe JndiDataSourceLookup.
Spring instanciera le bean de la source de données, une fois que nous aurons fourni le nom jndi.
Maintenant, nous pouvons changer la taille du pool, le nom d'utilisateur ou le mot de passe selon notre environnement ou nos exigences, mais cela n'aura pas d'impact sur l'application.
Remarque : encryptedSecurityDomain, nous devons le configurer séparément dans le serveur JBoss comme
<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>
C'est l'un des cas d'utilisation. J'espère que cela clarifie.
La meilleure explication pour moi est donnée ici
Qu'est-ce que JNDI
Il s'agit d'une API permettant d'accéder à un service d'annuaire, c'est-à-dire un nom de mappage de service (chaînes) avec des objets, une référence à des objets distants ou des données simples . C'est ce qu'on appelle la liaison. L'ensemble des liaisons est appelé le contexte . Les applications utilisent l'interface JNDI pour accéder aux ressources.
Pour le dire très simplement, c'est comme une table de hachage avec une clé String et des valeurs Object représentant des ressources sur le Web.
Quels problèmes JNDI résout-il
Sans JNDI, les informations de localisation ou d'accès des ressources distantes devraient être codées en dur dans les applications ou mises à disposition dans une configuration. La conservation de ces informations est assez fastidieuse et sujette aux erreurs.
Si une ressource a été déplacée sur un autre serveur, avec une autre adresse IP, par exemple, toutes les applications utilisant cette ressource devront être mises à jour avec ces nouvelles informations. Avec JNDI, ce n'est pas nécessaire. Seule la liaison de ressources correspondante doit être mise à jour. Les applications peuvent toujours y accéder avec son nom et la relocalisation est transparente.