You are currently viewing Java Naming and Directory Interface (JNDI) Tutorial

Java Naming and Directory Interface (JNDI) Tutorial

  • Post author:
  • Post category:Java
  • Post comments:0 Comments
  • Post last modified:February 22, 2024

Java Naming and Directory Interface (JNDI) is an API in Java that provides naming and directory functionality to applications written in Java. It allows Java applications to look up objects or resources using a name, which may be associated with various naming or directory services, such as LDAP, DNS, or even local files. In this tutorial, we will cover the basics of JNDI, including its architecture, how to use it, and provide examples.

What is JNDI?

JNDI provides a unified interface to multiple naming and directory services. It enables Java applications to access different naming and directory services in a consistent manner. Some common use cases for JNDI include:

  • Looking up data sources for database connections
  • Accessing messaging resources like JMS (Java Message Service) queues and topics
  • Obtaining configuration information stored in a directory
  • Accessing EJBs (Enterprise JavaBeans) and RMI (Remote Method Invocation) objects


The core classes of JNDI are defined in the javax.naming package. Here are some key components of JNDI:

  • Context: Represents a naming context, which is a set of name-to-object bindings. A Context object can be hierarchical, allowing for subcontexts.
  • InitialContext: This is the starting point for all JNDI operations. It is used to obtain the initial context for starting the lookup.
  • Naming Service Providers: These are implementations of the JNDI interfaces for specific naming or directory services. For example, there are providers for LDAP, DNS, and RMI registries.

Using JNDI

1. Setting up JNDI Environment

Before you can use JNDI to look up objects, you need to set up the JNDI environment. This typically involves providing properties such as the initial context factory, provider URL, and any security credentials.

Here’s an example of setting up the JNDI environment:

In this example:

  • We set the initial context factory to com.sun.jndi.fscontext.RefFSContextFactory, which is a file system context factory provided by JNDI.
  • The provider URL is set to file:///tmp, indicating that we are using a file-based naming context rooted at /tmp.

2. Performing a Lookup

Once you have set up the initial context, you can perform lookups to retrieve objects or resources. The Context interface provides the lookup() method for this purpose.

Here’s an example of looking up an object:

In this example:

  • We assume the initial context has been configured (as shown in the previous example).
  • We perform a lookup for an object with the name java:comp/env/jdbc/myDataSource. This name is typically defined in a configuration file (like web.xml for web applications) or in the JNDI service provider.

3. Example with Resource Injection (Java EE)

In Java EE applications, you can use resource injection to inject JNDI resources directly into your code. This is commonly used for database connections, JMS resources, and more.

In this example:

  • We inject the DataSource object named java:comp/env/jdbc/myDataSource using the @Resource annotation.
  • The doSomething() method demonstrates how you can then use the injected DataSource to obtain a database connection.


JNDI is a powerful API in Java for accessing naming and directory services in a unified manner. In this tutorial, we covered the basics of JNDI, including its architecture, setting up the JNDI environment, performing lookups, and using resource injection in Java EE applications. JNDI is commonly used in Java enterprise applications for accessing databases, messaging systems, and other resources. For more advanced usage and specific implementations, refer to the Java documentation and JNDI tutorials.

Leave a Reply