Jndi

Preview:

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

Recommended