Upload
shobana-pattabiraman
View
233
Download
0
Embed Size (px)
Citation preview
JNDI
Shobana .P
III MCA
Ethiraj college for Women
20/10/2014
JNDI
The Java Naming and Directory Interface(JNDI) is a Java API for a directory service
that allows Java software clients to discover
and look up data and objects via a name.
JNDI Naming
In a distributed application, components need to access other components and resources such as databases.
For example, a servlet might invoke remote methods on an enterprise bean that retrieves information from a database.
The Java Naming and Directory Interface (JNDI) naming service enables components to locate other components and resources.
JNDI Naming
To locate a JDBC resource, for example, an
enterprise bean invokes the JNDI lookup
method.
The JNDI naming service maintains a set of
bindings that relate names to objects.
The lookup method passes a JNDI name
parameter and returns the related object.
Naming Service
A naming service is an entity that
i. associates names with objects.
We call this binding names to objects.
This is similar to a telephone company ’s associating a person ’s name with a specific residence ’s telephone number
Naming Service
ii. provides a facility to find an object based on a name.
We call this looking up or searchingfor an object.
This is similar to a telephone operator finding a person ’s telephone number based on that person ’s name and connecting the two people.
Naming Service
Directory Service
A directory object differs from a generic
object because we can store attributes with directory objects.
For example,we can use a directory object to represent a user in your company.we can store information about that user,like the user ’s password,as attributes in the directory object.
Directory Service
A directory service is a naming service
that has been extended and enhanced to
provide directory object operations for
manipulating attributes.
A directory is a system of directory
objects that are all connected. Some examples of directory products are Netscape Directory Server and Microsoft ’s Active Directory.
Directory Service
Directory Service
Directories are similar to DataBases,
except that they typically are organized in
a hierarchical tree-like structure.
Directory Service
Directory Service Examples of Directory Service
1. Netscape Directory Server
2. Microsoft ’s Active Directory
3. Lotus Notes (IBM)
4. NIS (Network Information System) by Sun
5. NDS (Network Directory Service) by Novell
6. LDAP (Lightweight Directory Access Protocol) mostcommonly used
LDAP
LDAP stands for Lightweight Directory Access
Protocol.
It is a lightweight client-server protocol for
accessing directory services, specifically
X.500-based (electronic)directory services.
LDAP runs over TCP/IP or other connection
oriented transfer services.
LDAP A directory is similar to a database, but tends to contain more descriptive, attribute-based information.
give quick-response to high-volume lookup or search operations
They may have the ability to replicate information widely in order to increase availability and reliability, while reducing response time.
JNDI Architecture
JNDI Packagesjavax.naming
Accesses simple naming services.
javax.naming.directory
Accesses directory services.
javax.naming.event
Handles event notification when
dealing with naming and directory
services.
JNDI Packagesjavax.naming.ldap
Deals with LDAP v3 controls and
extended operations.
javax.naming.spi
Consists of the Service Provider Interface (SPI) classes and interfaces used by LDAP service implementers to provide access
to a specific type of naming or directory
service.
Naming Operations
Adding, Replacing, and Removing a Binding
The Context interface contains methods for adding, replacing, and removing a binding in a
context (collection of bindings is a context).
Naming OperationsAdding a Binding
Context.bind() is used to add a binding to a context. It accepts as arguments the name of the object and the object to be bound.
// Create the object to be bound
Fruit fruit = new Fruit("orange");
// Perform the bind
ctx.bind("favorite", fruit);
This example creates an object of class Fruit and binds it to the name "favorite" in the context ctx. If you subsequently looked up the name "favorite" in ctx, then you would get the fruit object. Note that to compile the Fruit class, you need the FruitFactoryclass.
Naming OperationsAdding or Replacing a Binding
rebind() is used to add or replace a binding. It accepts the same arguments as bind(), but the semantics are such that if the name is already bound, then it will be unbound and the newly given object will be bound.
// Create the object to be bound
Fruit fruit = new Fruit(“lemon");
// Perform the bind
ctx.rebind("favorite", fruit);
When you run this example, it will replace the binding created by the bind() example.
Naming Operations
Removing a Binding
To remove a binding, use unbind().
// Remove the binding
ctx.unbind("favorite");
when run, removes the binding that was
created by the bind() or rebind() example
Naming OperationsRenaming an Object
rename an object in a context by using Context.rename().
// Rename to old_report.txt
ctx.rename("report.txt", "old_report.txt");
This example renames the object that was bound to "report.txt" to "old_report.txt".
After verifying that the object got renamed, the program renames it to its original name ("report.txt"), as follows.
// Rename back to report.txt
ctx.rename("old_report.txt", "report.txt");
Naming Operations
Looking up an object
To look up an object from the naming service,
use Context.lookup() and pass it the name of
the object that you want to retrieve.
Suppose that there is an object in the
naming service with the name "report.txt".
To retrieve the object, use
//look up for report.txt
Object obj = ctx.lookup("report.txt");
Naming OperationsListing a Context
Instead of getting a single object at a time, as with Context.lookup(), we can list an entire context by using a single operation ,
There are two methods for listing a context:
(i )one that returns the bindings
Context.listBindings()
(ii) and one that returns only the name-to-object class name pairs.
Context.list()
Naming OperationsCreating and Destroying a Context
The Context interface contains methods for creating and destroying a subcontext, a context that is bound in another context of the same type.
Creating a ContextTo create a context, use createSubcontext()
// Create the context
Context result = ctx.createSubcontext("new");
This example creates a new context, called "new", that is a child of ctx. If you list the context ctx, you will see that there is now an entry for "new".
Naming OperationsDestroying a Context
To destroy a context, use destroySubcontext()the name of the context to destroy.
// Destroy the context
ctx.destroySubcontext("new");
This example destroys the context "new" in the context ctx.
JNDI ExampleStudent.java
import java.io.Serializable;
//The interface itself has no methods defined in it. So any class can easily implement
this interface by simply implementing it:
public class Student implements Serializable
{
public Student(int id, String name)
{
this.id = id;
this.name = name;
}
private static final long serialVersionUID = 1L;
private int id;
private String name;
public int getId()
{
return id;
}
JNDI Examplepublic void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String toString()
{
return "Id = "+getId() +"Name = "+getName();
}
}
JNDI Example
Now let us see how to bind a student object
using naming service. The FirstApp.java is a
stand alone application which binds a Student
object.
FirstApp.java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
JNDI Examplepublic class FirstApp
{
public void bindObject()
{
Student student = new Student(1, "Bijoy");
Properties initialProperties = new Properties();
initialProperties.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
initialProperties.put(InitialContext.PROVIDER_URL,"jnp://localhost:1099");
initialProperties.put(InitialContext.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
JNDI ExampleTry
{
Context context = new InitialContext(initialProperties); context.bind("student", student);
System.out.println("Bound object = "+student);
}
catch (NamingException e)
{
e.printStackTrace();
}
}
JNDI Examplepublic static void main(String[] args)
{
new FirstApp().bindObject();
}
}
The bindObject() method creates a Context object and a Student object is binding to the specified context . The initialProperties has the details for initializing the context.It is desirable to give these properties through jndi.properties in src folder , if we need these things in a generic way.
Now lets see the SecondApp.java. It simply receoversthe already bound Student object.
JNDI Example
SecondApp.Java
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
JNDI Examplepublic class SecondApp
{
public void readObject()
{
Properties initialProperties = new Properties();
initialProperties.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
initialProperties.put(InitialContext.PROVIDER_URL,12 "jnp://localhost:1099");
initialProperties.put(InitialContext.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
JNDI ExampleTry
{
Context context = new
InitialContext(initialProperties);
Student student = (Student)
context.lookup("student");
System.out.println("Object received from context =
"+student);
}
catch (NamingException e)
{
e.printStackTrace();
}
}
JNDI Example
public static void main(String[] args)
{
new SecondApp().readObject();
}
}
JNDI Example
Output:
Output of FirstApp.Java
Bound object = Id = 1Name = Bijoy
Now run SecondApp.java as java application.
Output of SecondApp.Java
Object received from context = Id = 1Name =
Bijoy
JNDI Uses connecting a Java application to an external directory service (such as an address database or an LDAP server)
allowing a Java Servlet to look up configuration information provided by the hosting web container
JNDI allows distributed applications to look up services in an abstract, resource-independent way.
Thank you