94 votes

Quel est le but de JNDI

Comment pouvez-vous vous rendez compte de l'utilisation de JNDI avec un exemple si possible?

116voto

Simon Nickerson Points 17147

JNDI est la Java Naming and Directory Interface. Il est utilisé pour séparer les préoccupations de l'application de développeur et de l'application deployer. Lorsque vous écrivez une application qui s'appuie sur une base de données, vous ne devriez pas avoir à vous soucier du nom d'utilisateur ou le mot de passe pour la connexion à la base de données. JNDI permet au développeur de donner un nom à une base de données, et de s'appuyer sur le déploiement de la carte ce nom à une instance de la base de données.

Par exemple, si vous écrivez du code qui s'exécute dans un conteneur Java EE, vous pouvez écrire ceci pour obtenir la main de la source de données avec le nom JNDI "Base de données":


DataSource dataSource = null;
try
{
    Context context = new InitialContext();
    dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
    // Couldn't find the data source: give up
}

Remarque il n'y a rien ici sur le pilote de base de données, ou le nom d'utilisateur ou le mot de passe. Qui est configuré à l'intérieur du conteneur.

JNDI n'est pas limité aux bases de données (JDBC); toutes sortes de services peut être donné des noms. Pour plus de détails, vous devriez vérifier le Soleil tutoriel sur le sujet.

33voto

oxbow_lakes Points 70013

JNDI est un mécanisme très puissant pour organiser les informations de configuration et de découverte et d'écoute pour les services via l'aide de l' EventContext. Dans JNDI vous pouvez chercher et d'écouter tout objet (pas seulement DataSources), en supposant que votre JNDI fournisseur de services prend en charge.

Bien sûr, le seul problème est le fait d'avoir un service JNDI fournisseur; la grande chose à ce sujet est qu'il est étonnamment facile à rouler. Après tout, vous pouvez encoder Java instance en XML à l'aide de la JavaBeans XMLEncoder et XMLDecoder: vous n'avez pas besoin de compter sur exécutant au sein d'un serveur d'application!

Quelle est donc la différence entre ce un avoir des fichiers de configuration? Eh bien, il peut être beaucoup plus propre parce que toutes vos applications peuvent obtenir leur configuration à partir de la même place. Si elles ont besoin de partager des informations de configuration (par exemple, base de données des emplacements), alors il peut être défini à la fois dans JNDI. Supposons que vous avez déplacé serveurs de base de données: vous n'avez pas besoin de vous rappeler la foule de fichiers de configuration avec l'emplacement en elle. Vous allez simplement à l'endroit: JNDI.

14voto

Ithar Points 67

JNDI est une API utilisée pour accéder à l'annuaire et les services de nommage (c'est à dire le moyen par lequel les noms sont associés à des objets). L'association d'un nom à un objet s'appelle une liaison.

Un exemple de base d'un service de nommage est le DNS qui mappe les noms des machines en adresses IP.

En utilisant JNDI, les applications peuvent stocker et de récupérer nommé Java objets de tout type.

Dans le contexte de java peut être utilisé dans les fichiers de configuration où vous ne voulez pas dur-code de l'environnement de variables spécifiques.

Printemps Exemple:

Printemps fichier de contexte

<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
    <jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
    <jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />    
</property>

Tomcat fichier de contexte

<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>

3voto

ilupper Points 65

JNDI permet la simplification d'une ressource construire dans juste un nom. Donc, c'est beaucoup de détails groupe en 1 pour le confort/sécurité/etc. (aka couche d'abstraction)

pour réaliser: configurer une liste de propriétés qui correspond à la champs prédéfinis dans le Contexte Jndi de l'Interface. (ces propriétés, spécifiez les paramètres de la jndi de l'exécution; mais *pas le nom de la recherche)

Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY = property name java.naming.factory.initial
    //field Context.PROVIDER_URL = property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case

Context ctx = new InitialContext(props);
    Object o = ctx.lookup("*name of resource*");

idéalement, une fonction spécialisée existerait à maintenir un annuaire LDAP, DNS, etc, au sein de votre organisation (donc unifié unique de cartographie ensemble de tous les services, la réduction des écarts)

Liste de JNDI les Fournisseurs de Services: http://java.sun.com/products/jndi/serviceproviders.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X