How can you realize the usage of JNDI , with an example if possible?
JNDI is the Java Naming and Directory Interface. It's used to separate the concerns of the application developer and the application deployer. When you're writing an application which relies on a database, you shouldn't need to worry about the user name or password for connecting to that database. JNDI allows the developer to give a name to a database, and rely on the deployer to map that name to an actual instance of the database.
For example, if you're writing code that runs in a Java EE container, you can write this to get hold of the data source with JNDI name "Database":
DataSource dataSource = null;
try
{
Context context = new InitialContext();
dataSource = context.lookup("Database");
}
catch (NamingException e)
{
// Couldn't find the data source: give up
}
Note there's nothing here about the database driver, or the user name, or the password. That is configured inside the container.
JNDI is not restricted to databases (JDBC); all sorts of services can be given names. For more details, you should check out the Sun tutorial on the subject.
JNDI is a very powerful mechanism for both organizing configuration information and discovering and listening to services via using the EventContext
. In JNDI you can lookup and listen to any object (not just DataSource
s), assuming your JNDI service provider supports it.
Of course, the only issue is actually having a JNDI service provider; the great thing about this is that it surprisingly easy to roll your own. After all you can encode any Java instance into XML
using the JavaBeans XMLEncoder
and XMLDecoder
: you don't need to rely on running within an application server!
So what is the difference between this an having configuration files? Well, it can be much cleaner because all of your applications can get their configuration from the same place. If they need to share configuration information (e.g. database locations) then this can be defined once in JNDI. Suppose you moved database servers: you don't need to remember the gazillion config files with the location in it. You just go to the one place: JNDI.