Transcript Document
Java Naming and Directory
Interface
JNDI
Topics
Naming and Directory Services
JNDI Overview
Features and Code Samples
JNDI Providers
References
v001025
JNDI
2
Naming Service
Associate names with objects (bind)
Retrieve objects by their name (lookup)
Examples:
v001025
RMI Registry
CORBA Naming Service (COSNaming)
Domain Name Service (DNS)
File system
JNDI
3
Contexts
Contains a set of bindings and lookup
operations
Has its own naming convention
Examples
v001025
File system directory: “/”
DNS domain:
“edu”
LDAP:
“c=us”
JNDI
4
Names
Logical identifier assigned to an object
Naming convention defined by Naming
System
Examples
v001025
/dir/dir2/file for UNIX
drive:\dir\string for DOS
cn=dan, o=ISP for LDAP
www.cise.ufl.edu for DNS
JNDI
5
Names (Cont)
Atomic Name
name used in a binding
Ex. filename in a directory
Compound Name
v001025
sequence of atomic names
/usr/bin/ls
JNDI
6
Names (Cont)
Composite Name
applies multiple naming systems
http://www.apl.jhu.edu/~weimer/
URL scheme id: http
DNS: www.apl.jhu.edu
UNIX and webserver: /usr/weimer/public_html
v001025
JNDI
7
Directory Service
Can obtain an object with attributes and
search for objects based on attributes
Current Directory Systems
v001025
X.500 - ISO standard. Complex.
LDAP - Simplified X.500 over TCP/IP
NDS - Novell Directory Services.
NIS - Directory service for Solaris
JNDI
8
Attributes
Common LDAP Attributes
c = Country
o = Organization
ou = Organizational Unit
cn = Common Name (typically first or full name)
sn = User’s surname
v001025
JNDI
9
Naming and Directory Targets
Resources
printers
machines
Users
Java Objects !
v001025
JNDI
10
Naming Vs. Directory
Naming Services simply assign logical names
to addresses or objects
localhost => 127.0.0.1
white pages
Directory Services add attributes and
attribute-based searching
v001025
find all hosts that are Sparc Solaris and have available disk
space
yellow pages
JNDI
11
JNDI Goals
Provide a consistent API to access different
naming and directory services.
Clients learn one API.
Different naming and directory systems can
be combined into one logical system
New naming service implementations can be
added with no client modifications
v001025
JNDI
12
JNDI Architecture Overview
Java Client Application
JNDI API
JNDI Naming Manager
JNDI Service Provider Interface
DNS
v001025
LDAP
RMI
JNDI
CORBA
Anything
13
JNDI Architecture
Application Programming Interface
(API)
API for client programmer
Unifying interface
Service Provider Interface (SPI)
v001025
For vendors enabling JNDI access to their
naming/directory service
JNDI
14
JNDI API
Included in Java 2 SDK v 1.3
Have to download for JDK 1.1 and SDK 1.2
Packages
v001025
javax.naming
javax.naming.directory
javax.naming.event
javax.naming.ldap
javax.naming.spi
JNDI
15
Service Providers
Implementation for underlying products
Included in Java 2 SDK 1.3
LDAP
COSNaming
JNDI over RMI Registry
Have to download for previous versions
v001025
http://java.sun.com/products/jndi/
JNDI
16
Common JNDI Tasks
Obtain reference to initial context
Context Operations
List children of a context
Bind names to objects
Lookup objects via name
Create/destroy contexts
Note: NamingException can be thrown
from most Context operations
v001025
JNDI
17
JNDI Contexts
<<abstract>>
javax.naming.Context
bind(String name, Object obj)
createSubcontext(String name) : Context
list(String name) : NamingEnumeration
listBindings(String name) : NamingEnumeration
lookup(String name) : Object
javax.naming.InitialContext
InitialContext()
InitialContext(java.util.Hashtable env)
v001025
JNDI
18
Obtain Initial Context
import javax.naming.*;
java.util.Properties props = new java.util.Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
“com.sun.jndi.fscontext.RefFSContextFactory”);
props.put(Context.PROVIDER_URL, “file:///”);
Context initContext = new InitialContext( props );
v001025
JNDI
19
Initial Context
Starting point in the namespace
All operations performed are relative to
the initial context
Specify service provider with property
props.put(Context.INITIAL_CONTEXT_FACTORY”,
“com.sun.jndi.fscontext.RefFSContextFactory” );
v001025
JNDI
20
Initial Context (Cont)
Specify provider-specific properties
LDAP
props.put(Context.PROVIDER_URL, “ldap://host:port”);
props.put(Context.SECURITY_PRINCIPAL, “user” );
props.put(Context.SECURITY_CREDENTIALS, “password”);
File System
props.put(Context.PROVIDER_URL, “file://tmp/”);
Create
InitialContext initContext = new InitialContext( props );
v001025
JNDI
21
List children
NamingEnumeration children = initContext.list(“”);
while( children.hasMore() )
{
NameClassPair nc = (NameClassPair) children.next();
System.out.println(nc.getName());
System.out.println(nc.getClassName());
}
list() returns a NamingEnumeration of NameClassPair objects
listBindings() returns a NamingEnumeration of Binding objects
v001025
JNDI
22
Binding Names to an Object
Bind name to object within a context
File f = new File(“/tmp/dan”);
tmpDirContext.bind(“dan”, f );
NameAlreadyBoundException occurs if
“dan” is already bound in the tmp
context
Can use unbind() or rebind()
v001025
JNDI
23
Object Lookup
Lookup object in a context
String name; Object o =
initContext.lookup(name);
name can be compound
“/usr/tmp/dir/myfile”
v001025
Filesystem provider returns
File for files
JNDI
24
Attributes
DirContext contains an object with
attributes for each contained binding
Common LDAP Attributes
c = Country
o = Organization
ou = Organizational Unit
cn = Common Name (typically first or full name)
sn = User’s surname
v001025
JNDI
25
Basic Search
Specify a set of attributes that an entry
must have.
Specify required attribute values
Specify attributes to return
search(String name, Attributes match, String[]
retAttrIds )
Returns NamingEnumeration of
SearchResults
v001025
JNDI
26
Storing objects
Object Types to store
Java Serializable Object
Referenceable Java Object
Remote Objects like RMI and CORBA
objects
v001025
JNDI
27
Federation
Composite names span multiple
namespaces
ou=People/tmp/myFile
File f = (File)
ctx.lookup(“ou=People/tmp/myFile”);
lookup on this name will traverse
through LDAP and the Filesystem
provider to retrieve the file
v001025
JNDI
28
JNDI Providers
LDAP
com.novell.naming.service.nds.NdsInitialContextFactory
NIS
com.sun.jndi.nis.NISCtxFactory
RMI
com.sun.jndi.rmi.registry.RegistryContextFactory
COSNaming ( CORBA Naming System )
Files
v001025
com.sun.jndi.fscontext.[Ref]FSContextFactory
JNDI
29
Setup Requirement
For 1.3, essentially nothing. JNDI
should be included in the distribution
along with the 3 providers
For Java 2 SDK version 1.2
jndi.jar in $JAVA_HOME/jre/lib/ext
For jdk 1.1
v001025
Add jndi.jar to the CLASSPATH
JNDI
30
Summary
Provide a consistent API to access different
naming and directory services.
Clients learn one API.
Different naming and directory systems can
be combined into one logical system
New naming service implementations can be
added with no client modifications
v001025
JNDI
31
Resources
JNDI API Tutorial and Reference, Rosanna Lee and Scott
Seligman. Addison Wesley, 2000
Main JNDI Page
http://java.sun.com/products/jndi/
Java Lecture Source
http://www.apl.jhu.edu/~jcstaff/ejava/ejava_whatsnew_f00.htm
Java Online Tutorial
http://java.sun.com/docs/books/tutorial/
v001025
JNDI
32