JNDI (Java Naming and Directory Interface) allows Java applications to interact with directory servers like LDAP. It provides APIs to store, lookup, update and delete objects in a directory server. A JNDI application needs to specify configuration details like the initial context factory, provider URL, username and password to connect to the directory server. It can then use methods like bind(), lookup(), rebind() and unbind() to perform operations on the directory server. Subcontexts can also be created to organize stored objects hierarchically. Weblogic server includes an integrated LDAP server that can be used by JNDI applications for directory services.
JNDI (Java Naming and Directory Interface) allows Java applications to interact with directory servers like LDAP. It provides APIs to store, lookup, update and delete objects in a directory server. A JNDI application needs to specify configuration details like the initial context factory, provider URL, username and password to connect to the directory server. It can then use methods like bind(), lookup(), rebind() and unbind() to perform operations on the directory server. Subcontexts can also be created to organize stored objects hierarchically. Weblogic server includes an integrated LDAP server that can be used by JNDI applications for directory services.
JNDI (Java Naming and Directory Interface) allows Java applications to interact with directory servers like LDAP. It provides APIs to store, lookup, update and delete objects in a directory server. A JNDI application needs to specify configuration details like the initial context factory, provider URL, username and password to connect to the directory server. It can then use methods like bind(), lookup(), rebind() and unbind() to perform operations on the directory server. Subcontexts can also be created to organize stored objects hierarchically. Weblogic server includes an integrated LDAP server that can be used by JNDI applications for directory services.
We use JNDI to develop a java application to interact with directory servers. Similar to Database servers we have directory servers. Directory servers also use to store the data. As part of Database server we store the data in the form of relational records as part of directory server. We store the data in the form of objects.
*Difference between Database server and Directory servers: Directory servers give the best performance if we want to the store the data once and retrieve the data for multiple times. As part of Database servers we can store huge amount of data. Directory servers are not meant to store huge amount of data. They can store only small amount of data. (Yahoo, Google and etc) To interact with database servers where using query language. To interact with directory server we have to use the predefined functions/methods. Directory servers cant store the data permanently. These servers are meant to store the data temporally. In most of the project we use both database servers and directory servers. In most of the projects we write the java code to store the data into Database server permanently. Once if data into data is stored in server we write another java program to retrieve required data represent in the form of object and store it in directory server. JNDI API is mainly used to develop a java application to interact with directory servers. The following is architecture of JNDI.
JAVA Application
They are so many directory servers are available some of them all. 1. LDAP (Light weight Directory Access Protocol) from open source apache. 2. ADS (Active Directory Server) from Micro soft 3. NDS (Novel Directory Server) 4. DNS (Domain Naming Server)etc.
We no need to install directory servers separately. Now way days all the JEE servers are integrated directory servers. When we install JEE servers we get the directory server also. They following some of the JEE servers. Ex: 1. Weblogic 2. JBOSS 3. Tomcat 4. Websphere JNDI Driver software
Directory server
5. Resin
When install weblogic server it got install in a home directory called as BEA. To work with weblogic server we must configure the weblogic server. That meaning of weblogic server is placing all the required files in a folder. To work with weblogic server we have to configure the weblogic server (or) we have to create a Domain. The meaning of creating a domain is create the folder and copy all the required files into it.
*Procedure to create domain in weblogic server: Start the weblogic server configuration wizard (start -> All Programs -> oracle weblogic -> weblogic10gR3 -> tools -> click on configuration wizard). The above step launches a window hows name is oracle weblogic configuration wizard. From this select an option creates a new weblogic domain and click on NEXT. Select an option generates a domain configured automatically and click on NEXT. Enter the username and password which act as on administrator. Select the development mode and available JDK. Choose the customization as NO and click on create BUTTON. To start the weblogic server oracle guys are provide CMD files and SH files. We use start weblogic CMD to start the server. Now a days people are not give separate client software the client software is integrated with the server in the form of web based application. The advantage of this approach is we now to install the client software separately. We can access the client software by taking the help of BROWSER. To access oracle client software where using the following URL. Ex: http://localhost:8080/apex/
Server
The following is URL which is used to access admin console of web logic server. Ex: http://localhost:7001/console/
The default port number of weblogic server is 7001 and the default server name is admin. We can change the default port number and server name. We can use customization option to use our own port number as well as our Web application
Server S/W Browser 1 Browser 2 own server names. In the projects most of the time we change the settings according to our project requirements. Sun micro system as released JNDI API to develop a java application to communicate with directory server. Sun micro system as released all the classes and interfaces as part of javax.naming package. The most important interface is context. The most important class is initial context. Initial context class provide the implementation of context interface. Interface
Class
As a programmer we are responsible to develop a java application to create an object and store the object into directory server Update, Delete and Retrieve objects directory server. To develop a JNDI application we have to supply the following four values.
The following are the steps to develop JNDI Application. 1. Create Hash table. 2. Store the details in the Hash table using keys and values. 3. Get the connection to directory server by supplying Hash table object as input. 4. Call the methods bind/unbind/rebind/lookup methods to perform the operations with Directory server.
*Develop a JNDI application to store a string object into directory server. To store an object in the directory server we use a method bind. Syntax: void bind(key, Object) Ex: import java.util.*; import javax.naming.*; public class StoreObject{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context ic = new InitialContext(h); String name = "Raju"; ic.bind("uname",name); } } The bind() method convert the object into super class object and stored it in directory server. In the above example string object is stored into directory server. By converting it into super_class_object object.
*The following example demonistrate how to retrieve the data from directory server. import java.util.*; import javax.naming.*; public class RetrieveObject{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(h); Object o = c.lookup(uname); String s = (String)o; System.out.println(s); } }
With key we are using to searching if it is not available. It got a error message NameNotFoundException. *We using a method rebind to update a Record a directory server. import java.util.*; import javax.naming.*; public class UpdateRecord{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(h); c.rebind(uname,Naveen); } } *Unbind method is used to delete the Record a directory server. import java.util.*; import javax.naming.*; public class DeleteRecord{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(h); c.unbind(uname); } }
It is not recommended to store data directory into initial context. This is because of if we store directory the search operation takes time. It always recommended store the data into sub context (sub context is like a folder).
Initial Context
Sub Context
Object
Sub Context
*To create the sub context use a method. import java.util.*; import javax.naming.*; public class CreateSubContext{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(); c.createSubcontext(Btech); c.createSubcontext(mca); } }
*To create the sub context inside the sub context we can create the separate dot. import java.util.*; import javax.naming.*; public class CreateSubContext1{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(); c.createSubcontext(Btech.1 st year.mech); c.createSubcontext(Btech.1 st year.it); c.createSubcontext(Btech.1 st year.csc); } }
*if we want to create a sub context in another sub context we need to make sure that the base sub context is available. import java.util.*; import javax.naming.*; public class CreateSubContext{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(); c.createSubcontext(btech); c.createSubcontext(btech.1 st year); c.createSubcontext(Btech.1 st year.mech); c.createSubcontext(Btech.1 st year.it); c.createSubcontext(Btech.1 st year.csc); } }
*To store an object into a specific context we have to specify absolute context path. import java.util.*; import javax.naming.*; public class CreateBind{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context ic = new InitialContext(); ic.bind(betch.1 st year.csc.ramesh,abc); } }
*To remove sub context we use a method destroy sub context. import java.util.*; import javax.naming.*; public class CreateBind{ public static void main(String[] args) throws NamingException{ Hashtable h = new Hashtable(); h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextF actory"); h.put(Context.PROVIDER_URL,"t3://lacalhost:7001/"); h.put(Context.SECURITY_PRINCIPAL,"admin"); h.put(Context.SECURITY_CREDENTIALS,"inetsolv"); Context c = new InitialContext(); c.destroySubcontext(betch.1 st year.csc); } }
****Connection pool: When we develop a java application to get the connection from Database server. By using DriverManager.getConnection we always get physical connections.
Physical
If we got a physical connection and we are not closing the connection after we above work the other application can not use the same connections.
Database server Connection con = DriverManager.getConnection(jdbc:oracle:thin: @localhost:1521:xe,system,malli);