Upload
tulika-singh
View
832
Download
2
Tags:
Embed Size (px)
Citation preview
JNDI 1
SCOT
(c)CDAC(Formerly NCST)
Java Naming and DirectoryInterface (JNDI)
Vijay Bhatt
NCST Juhu, Mumbai
JNDI 2
SCOT
(c)CDAC(Formerly NCST)
Agenda• What is JNDI?
• Naming and Directory Services
• Naming Concepts
• Issues
• JNDI Architecture
• Programming with JNDI
• Role of JNDI in J2EE
JNDI 3
SCOT
(c)CDAC(Formerly NCST)
• Class.forName("com.microsoft.jdbc.
sqlserver.SQLServerDriver");
• cnn = DriverManager.getConnection
("jdbc:microsoft:sqlserver://siddh
ant:1433",“username",“password");
JNDI 4
SCOT
(c)CDAC(Formerly NCST)
• Context ctx = new InitialContext();
• DataSource ds =
(DataSource)ctx.lookup(“myname”);
• Connection con = ds.getConnection(“abc”,”***”);
JNDI 5
SCOT
(c)CDAC(Formerly NCST)
JNDI
Java Naming and Directory Interface (JNDI) provides a standard interface for Java applications to access naming and directory services.
JNDI 6
SCOT
(c)CDAC(Formerly NCST)
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
JNDI 7
SCOT
(c)CDAC(Formerly NCST)
Directory Service
• Directory is a naming service that stores
objects with attributes.
– Usernames and passwords etc stored in attrs.
• Tree like structure
JNDI 8
SCOT
(c)CDAC(Formerly NCST)
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
JNDI 9
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 10
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 11
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 12
SCOT
(c)CDAC(Formerly NCST)
Naming System and Namespaces
• Naming system: A connected set of
contexts.
• Namespace: all the names contained within
that naming system.
JNDI 13
SCOT
(c)CDAC(Formerly NCST)
InitialContext
• Starting point for exploring a namespace.
• Starting point for performing all naming and
directory operations.
JNDI 14
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 15
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 16
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 17
SCOT
(c)CDAC(Formerly NCST)
JNDI 18
SCOT
(c)CDAC(Formerly NCST)
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
JNDI 19
SCOT
(c)CDAC(Formerly NCST)
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
JNDI 20
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 21
SCOT
(c)CDAC(Formerly NCST)
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.InitCtxclass of the JNDI driver• provider URL: URL that the service provider accepts for bootstrapping.
JNDI 22
SCOT
(c)CDAC(Formerly NCST)
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
JNDI 23
SCOT
(c)CDAC(Formerly NCST)
• rename() - give a new name to a context – c:\temp to c:\tmp• createSubcontext() - create a subcontext at the context – c:\foo\bar at the folder c:\foo.• destroySubcontext() - destroy a subcontext of the context – Destroy c:\foo\bar 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 the name.
JNDI 24
SCOT
(c)CDAC(Formerly NCST)
Bindingimport 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); } }
JNDI 25
SCOT
(c)CDAC(Formerly NCST)
Looking Upimport 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) javax.rmi.PortableRemoteObject.narrow ( remoteObject, Account.class); int b = account.method1(5));}}
JNDI 26
SCOT
(c)CDAC(Formerly NCST)
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.
JNDI 27
SCOT
(c)CDAC(Formerly NCST)
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