360 likes | 745 Views
Java Naming and Directory Interface . JNDI. Topics. Naming and Directory Services JNDI Overview Features and Code Samples JNDI Providers References. Naming Service. Associate names with objects (bind) Retrieve objects by their name (lookup) Examples: RMI Registry
E N D
Topics • Naming and Directory Services • JNDI Overview • Features and Code Samples • JNDI Providers • References JNDI
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 JNDI
Contexts • Contains a set of bindings and lookup operations • Has its own naming convention • Examples • File system directory: “/” • DNS domain: “edu” • LDAP: “c=us” JNDI
Names • Logical identifier assigned to an object • Naming convention defined by Naming System • Examples • /dir/dir2/file for UNIX • drive:\dir\string for DOS • cn=dan, o=ISP for LDAP • www.cise.ufl.edu for DNS JNDI
Names (Cont) • Atomic Name • name used in a binding • Ex. filename in a directory • Compound Name • sequence of atomic names • /usr/bin/ls JNDI
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 JNDI
Directory Service • Can obtain an object with attributes and search for objects based on attributes • Current Directory Systems • X.500 - ISO standard. Complex. • LDAP - Simplified X.500 over TCP/IP • NDS - Novell Directory Services. • NIS - Directory service for Solaris JNDI
Attributes • Common LDAP Attributes c = Country o = Organization ou = Organizational Unit cn = Common Name (typically first or full name) sn = User’s surname JNDI
Naming and Directory Targets • Resources • printers • machines • Users • Java Objects ! JNDI
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 JNDI
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 JNDI
JNDI Architecture Overview Java Client Application JNDI API JNDI Naming Manager JNDI Service Provider Interface DNS RMI LDAP CORBA Anything JNDI
JNDI Architecture • Application Programming Interface (API) • API for client programmer • Unifying interface • Service Provider Interface (SPI) • For vendors enabling JNDI access to their naming/directory service JNDI
JNDI API • Included in Java 2 SDK v 1.3 • Have to download for JDK 1.1 and SDK 1.2 • Packages • javax.naming • javax.naming.directory • javax.naming.event • javax.naming.ldap • javax.naming.spi JNDI
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 • http://java.sun.com/products/jndi/ JNDI
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 JNDI
JNDI Contexts JNDI
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 ); JNDI
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” ); JNDI
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 ); JNDI
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 JNDI
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() JNDI
Object Lookup • Lookup object in a context • String name; Object o = initContext.lookup(name); • name can be compound • “/usr/tmp/dir/myfile” • Filesystem provider returns • File for files JNDI
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 JNDI
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 JNDI
Storing objects • Object Types to store • Java Serializable Object • Referenceable Java Object • Remote Objects like RMI and CORBA objects JNDI
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 JNDI
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 JNDI
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 • Add jndi.jar to the CLASSPATH JNDI
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 JNDI
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/ JNDI