The DL_POLY Java Graphical User Interface II - FTP Directory Listing
Java Naming and Directory Interface
description
Transcript of Java Naming and Directory Interface
Java Naming and Directory Interface
JNDI
v001025 JNDI 2
Topics
Naming and Directory ServicesJNDI OverviewFeatures and Code SamplesJNDI ProvidersReferences
v001025 JNDI 3
Naming Service
Associate names with objects (bind)Retrieve objects by their name (lookup)Examples: RMI Registry CORBA Naming Service (COSNaming) Domain Name Service (DNS) File system
v001025 JNDI 4
Contexts
Contains a set of bindings and lookup operationsHas its own naming conventionExamples File system directory: “/” DNS domain: “edu” LDAP: “c=us”
v001025 JNDI 5
Names
Logical identifier assigned to an objectNaming convention defined by Naming SystemExamples /dir/dir2/file for UNIX drive:\dir\string for DOS cn=dan, o=ISP for LDAP www.cise.ufl.edu for DNS
v001025 JNDI 6
Names (Cont)
Atomic Name name used in a binding Ex. filename in a directory
Compound Name sequence of atomic names /usr/bin/ls
v001025 JNDI 7
Names (Cont)
Composite Nameapplies multiple naming systemshttp://www.apl.jhu.edu/~weimer/
URL scheme id: httpDNS: www.apl.jhu.eduUNIX and webserver: /usr/weimer/public_html
v001025 JNDI 8
Directory Service
Can obtain an object with attributes and search for objects based on attributesCurrent Directory Systems X.500 - ISO standard. Complex. LDAP - Simplified X.500 over TCP/IP NDS - Novell Directory Services. NIS - Directory service for Solaris
v001025 JNDI 9
Attributes
Common LDAP Attributesc = Countryo = Organizationou = Organizational Unitcn = Common Name (typically first or full name)sn = User’s surname
v001025 JNDI 10
Naming and Directory Targets
Resourcesprintersmachines
UsersJava Objects !
v001025 JNDI 11
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 find all hosts that are Sparc Solaris and have available disk
space yellow pages
v001025 JNDI 12
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 systemNew naming service implementations can be added with no client modifications
v001025 JNDI 13
JNDI Architecture Overview
JNDI API
JNDI Service Provider Interface
Java Client Application
JNDI Naming Manager
DNS LDAP CORBARMI Anything
v001025 JNDI 14
JNDI Architecture
Application Programming Interface (API)API for client programmerUnifying interface
Service Provider Interface (SPI)For vendors enabling JNDI access to their
naming/directory service
v001025 JNDI 15
JNDI API
Included in Java 2 SDK v 1.3Have to download for JDK 1.1 and SDK 1.2Packages javax.naming javax.naming.directory javax.naming.event javax.naming.ldap javax.naming.spi
v001025 JNDI 16
Service Providers
Implementation for underlying productsIncluded in Java 2 SDK 1.3LDAPCOSNamingJNDI over RMI Registry
Have to download for previous versionshttp://java.sun.com/products/jndi/
v001025 JNDI 17
Common JNDI Tasks
Obtain reference to initial contextContext OperationsList children of a contextBind names to objectsLookup objects via name Create/destroy contextsNote: NamingException can be thrown
from most Context operations
v001025 JNDI 18
JNDI Contextsjavax.naming.Context
bind(String name, Object obj)createSubcontext(String name) : Contextlist(String name) : NamingEnumerationlistBindings(String name) : NamingEnumerationlookup(String name) : Object
<<abstract>>
javax.naming.InitialContext
InitialContext()InitialContext(java.util.Hashtable env)
v001025 JNDI 19
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 20
Initial Context
Starting point in the namespaceAll operations performed are relative to the initial contextSpecify service provider with property
props.put(Context.INITIAL_CONTEXT_FACTORY”,“com.sun.jndi.fscontext.RefFSContextFactory” );
v001025 JNDI 21
Initial Context (Cont)Specify provider-specific propertiesLDAPprops.put(Context.PROVIDER_URL, “ldap://host:port”);props.put(Context.SECURITY_PRINCIPAL, “user” );props.put(Context.SECURITY_CREDENTIALS, “password”);
File Systemprops.put(Context.PROVIDER_URL, “file://tmp/”);
CreateInitialContext initContext = new InitialContext( props );
v001025 JNDI 22
List childrenNamingEnumeration 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 objectslistBindings() returns a NamingEnumeration of Binding objects
v001025 JNDI 23
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 contextCan use unbind() or rebind()
v001025 JNDI 24
Object Lookup
Lookup object in a contextString name; Object o =
initContext.lookup(name);name can be compound
“/usr/tmp/dir/myfile”Filesystem provider returns
File for files
v001025 JNDI 25
Attributes
DirContext contains an object with attributes for each contained bindingCommon LDAP Attributesc = Countryo = Organizationou = Organizational Unitcn = Common Name (typically first or full name)sn = User’s surname
v001025 JNDI 26
Basic SearchSpecify a set of attributes that an entry must have. Specify required attribute valuesSpecify attributes to returnsearch(String name, Attributes match, String[]
retAttrIds )
Returns NamingEnumeration of SearchResults
v001025 JNDI 27
Storing objects
Object Types to storeJava Serializable ObjectReferenceable Java ObjectRemote Objects like RMI and CORBA
objects
v001025 JNDI 28
Federation
Composite names span multiple namespacesou=People/tmp/myFileFile 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 29
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 com.sun.jndi.fscontext.[Ref]FSContextFactory
v001025 JNDI 30
Setup Requirement
For 1.3, essentially nothing. JNDI should be included in the distribution along with the 3 providersFor Java 2 SDK version 1.2 jndi.jar in $JAVA_HOME/jre/lib/ext
For jdk 1.1Add jndi.jar to the CLASSPATH
v001025 JNDI 31
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 systemNew naming service implementations can be added with no client modifications
v001025 JNDI 32
ResourcesJNDI API Tutorial and Reference, Rosanna Lee and Scott Seligman. Addison Wesley, 2000Main 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/