2. SCOT
Agenda
• What is JNDI?
• Naming and Directory Services
• Naming Concepts
• Issues
• JNDI Architecture
• Programming with JNDI
• Role of JNDI in J2EE
(c)CDAC(Formerly NCST)
JNDI 2
5. SCOT
JNDI
Java Naming and Directory Interface
(JNDI) provides a standard interface for
Java applications to access naming and
directory services.
(c)CDAC(Formerly NCST)
JNDI 5
6. SCOT
Naming Service
• Naming Service performs:
– Binding: Associating names with objects
– Lookup: Find an object based on a name.
• Examples: DNS and File systems
• Examples:
– DNS
– Filesystems
(c)CDAC(Formerly NCST)
JNDI 6
7. SCOT
Directory Service
• Directory is a naming service that stores
objects with attributes.
– Usernames and passwords etc stored in
attrs.
• Tree like structure
(c)CDAC(Formerly NCST)
JNDI 7
8. SCOT
Names
• Atomic name is a indivisible component of
a
name
– in /etc/fstab, etc and fstab are atomic
names.
• Compound name is zero or more atomic
names put together.
– /etc/fstab is a compound name
(c)CDAC(Formerly NCST)
JNDI 8
9. SCOT
Binding
• Binding is an association of a name with an object.
– Filename “autoexec.bat” has a binding to some
file data on the disk.
– “c:windows” foldername is bound to a folder on
your drive.
• Compound name such as /usr/people/ed/.cshrc
consists of multiple bindings, one to usr, one to
people, one to ed, and one to .cshrc.
(c)CDAC(Formerly NCST)
JNDI 9
10. SCOT
Context
• Contains zero or more bindings.
– Each binding has a distinct atomic name.
• /etc contains files named mtab and exports.
• The /etc folder is a context containing bindings
with atomic names mtab and exports.
• mtab and exports are each bound to a file on
the disk.
(c)CDAC(Formerly NCST)
JNDI 10
11. SCOT
Sub-Context
• /usr – CONTEXT
– /usr/people – SUB-CONTEXT
– /usr/bin – SUB-CONTEXT
– /usr/local – SUB-CONTEXT
• Each atomic name is bound to a sub-context the
subfolder.
• Subcontext are full-fledged contexts
• Can contain more name-object bindings, such as
other files or other folders.
(c)CDAC(Formerly NCST)
JNDI 11
12. SCOT
Naming System and Namespaces
• Naming system: A connected set of
contexts.
• Namespace: all the names contained within
that naming system.
(c)CDAC(Formerly NCST)
JNDI 12
13. SCOT
InitialContext
• Starting point for exploring a namespace.
• Starting point for performing all naming
and
directory operations.
(c)CDAC(Formerly NCST)
JNDI 13
14. SCOT
Issues
• Many naming and directory products.
– Netscape Directory Server
– MicrosoftActiveDirectory
• Various naming and directory protocols: Each
directory standard has a different protocol for
accessing the directory.
– Lightweight Directory Access Protocol (LDAP)
– Network Information System (NIS)
– Novell’s Network Directory System (NDS)
• EveryDS has it’s ownAPI.
(c)CDAC(Formerly NCST)
JNDI 14
15. SCOT
Introducing JNDI
• Standard interface to interact with naming and
directory systems.
• For Java programs.
• Provides common interface to disparate
directories: Same API for LDAP and NIS NDS.
• Used in EJB, RMI-IIOP, JDBC for operations like
locating entities i.e. Users, Machines (e.g. printer),
Objects, Services (e.g. datasource) etc.
(c)CDAC(Formerly NCST)
JNDI 15
16. SCOT
JNDI Architecture
• The client API
– Allow Java code to perform directory
operations.
• The Service Provider: Driver
• The Service Provider Interface (SPI)
– An interface to which naming and directory
service vendors can plug in.
(c)CDAC(Formerly NCST)
JNDI 16
18. SCOT
JNDI Packages
The JNDI comprises of 5 packages
• javax.naming – Contains classes and interfaces
for accessing naming services
• javax.naming.directory – Extends javax.naming
and provides functionality to access directory
services in addition to naming services
(c)CDAC(Formerly NCST)
JNDI 18
19. SCOT
JNDI Packages
• javax.naming.event – Classes and interfaces for
supporting event notification in naming and
directory services
• javax.naming.ldap – Classes and interfaces for
using features that are specific to LDAP v3 that
are not already covered by the more generic
javax.naming.directory
• javax.naming.spi – Vendors develop their
naming/directory services conforming to SPI.
Applications can then access these services
through the JNDI API
(c)CDAC(Formerly NCST)
JNDI 19
20. SCOT
InitialContextFactory
• Used to acquire an initial context
• Implementation of the JNDI driver: Knows the
specific semantics of a particular directory
structure.
• bootstrapping.
• Necessary information for JNDI to acquire that
initial context.
– The IP address of the J2EE server
– The port number that the J2EE server accepts
– Any username/password necessary to use the
J2EE server. (c)CDAC(Formerly NCST)
JNDI 20
21. SCOT
javax.naming.Context ctx =
new javax.naming.InitialContext
(System.getProperties());
java
-Djava.naming.factory.initial=
com.sun.jndi.fscontext.RefFSContextFactory
-Djava.naming.provider.url=
file:c:examples.InitCtx
class of the JNDI driver
• provider URL: URL that the service provider
accepts for bootstrapping.
(c)CDAC(Formerly NCST)
JNDI 21
22. SCOT
Other JNDI operations
Methods invoked on a Context
• list() - list of contents available at the context.
– names of objects bound to the JNDI tree
– subcontexts.
• lookup() - look up objects bound to the JNDI tree
– Return type is driver specific
• RMI-IIOP java.rmi.Remote
• file system java.io.File
(c)CDAC(Formerly NCST)
JNDI 22
23. SCOT
• rename() - give a new name to a context
– c:temp to c:tmp
• createSubcontext() - create a subcontext at the
context
– c:foobar at the folder c:foo.
• destroySubcontext() - destroy a subcontext of the
context
– Destroy c:foobar from the folder c:foo.
• bind() – associates a name to a content and stores
it at the Context
– JNDI drivers accept different parameters to bind()
• rebind() - forces a bind even if some object is
already bound to (c)CDAC(Formerly NCST)
the name.
JNDI 23
24. SCOT
Binding
import javax.naming.*;
public class Startup {
public static void main(String
args[]) throws Exception {
AccountImpl acct_impl = new
AccountImpl();
Context ctx = new
InitialContext
(System.getProperties());
ctx.rebind(“myname",
acct_impl);(c)CDAC(Formerly NCST)
JNDI 24
}
25. SCOT
Looking Up
import javax.naming.*;
import java.rmi.*;
public class Client {
public static void main (String[]
args) throws Exception { Context
ctx = new InitialContext
(System.getProperties());
Object remoteObject =
ctx.lookup(“myname");
Account account = (Account)
(c)CDAC(Formerly NCST)
JNDI 25
javax.rmi.PortableRemoteObject.na
26. SCOT
Role of JNDI in J2EE
• J2EE servers have a JNDI implementation.
• Used to Look up beans.
• Connect to resource factories
– JDBC DataSource
– Java Message Service (JMS) drivers
• Acquiring a reference to the Java
Transaction API’s (JTA) UserTransaction
interface.
(c)CDAC(Formerly NCST)
JNDI 26
27. SCOT
References
• Mastering Enterprise JavaBeans by Ed
Roman et. al. (Wiley)
• JNDI Tutorial on java.sun.com
• Java Server Programming J2EE Edition –
Volume 1 – Wrox.
• Java Enterprise in a nutshell – David
Flanagan et. Al. – O’reilly
(c)CDAC(Formerly NCST)
JNDI 27