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