IBM Informix Dynamic server (IDS) is known worldwide for being exceptionally easy to manage, offering high availability and high performing online transaction processing capabilities. It also helps to simplify and automate many tasks associated with deploying databases instances for medium to enterprise business applications. The latest release of IBM Informix Dynamic server, IDS v11.50 (code named Cheetah 2), provides high-availability with the capabilities of HDR technology and MACH-11, a new, flexible, extensible system-monitoring and administration tool (OAT), and a good number of security features.
Apache Tomcat provides an HTTP Web server environment for Java™ code and has management tools to configure and edit configuration files. The latest release of Apache Tomcat 6.0 is designed to run on Java SE 5.0 and later versions, and uses the Eclipse JDT Java compiler to compile the JSP pages, which requires only JRE to run the Tomcat.
JNDI DataSource and its advantages in deployed applications
JNDI is an essential part of the Java 2 Platform, Enterprise Edition (J2EE) since it provides a standard interface to locate Java objects, machines, users, and services, or to connect to databases. Naming and directory services are the backbone of JDNI. A directory stores and organizes information in a hierarchical tree wherein each node in the tree has a valid name with its own set of associated data. A directory service provides access to this information.
A naming service is a type of directory service which maps names of the network resources to their network addresses. It is capable of attaching a name to an object in the network and also finding the object using this name. These objects can be used by many applications. JNDI is used by Java-based clients to interact with naming and directory systems. With JNDI, Java applications can read and write Java objects from directories.
A DataSource is a means of storing data. It is the representation of a data source in the Java programming language. It has certain properties which describe the real world data source that it represents. Some of the data source properties include:
- databaseName: The name of the database server to which application will connect
- dataSourceName: The logical name of the object being represented by the DataSource
- networkProtocol: The protocol used to communicate with the server
- password: The user's database password
- portNumber: The port to which the server is listening for requests
A DataSource object works with the JNDI naming service, and its creation and management is well separated from the application. This makes the code more portable. Also, in case of any changes to the information about the data source, only the data source properties are required to be changed instead of changing every application which uses this data source. This helps in easy code maintenance.
Since a DataSource object is registered with a JNDI naming service, a Java application can use a logical name for the data source and register this logical name with the JNDI naming service. The JNDI naming service then supplies the DataSource object associated with this logical name to the applications, which can then be used to connect to the data source it represents.
An added advantage of using the DataSource is that the application developer can use connection pooling feature to improve performance and XADataSource for handling distributed transactions.
Configuring a JNDI DataSource on Informix
Step 1:
Declare one environment variable, CATALINA_HOME, pointing to the installation root directory of Tomcat.
Step 2:
Copy the driver files to $CATALINA_HOME/common/lib. .
So, for Informix JDBC driver ifxjdbc.jar and ifxjdbcx.jar should be copied to the above mentioned directory.
For JAVA Common Client (JCC) driver, db2jcc.jar should be copied to the above mentioned directory.
Step 3:
Open the file context.xml, which resides under $CATALINA_HOME/conf directory. Add the following entries to context.xml.
Listing 1. For Informix JDBC drivers :
<Resource name="jdbc/<JNDI Name>"
auth="Container" type="javax.sql.DataSource"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://<Informix Host>:<Informix Socket Port>/<Database Name
>:INFORMIXSERVER=<Informix Server Name>"
username="<User Name>"
password="<Password>" maxActive="100" maxIdle="30" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
|
Listing 2. For JAVA common client driver (IBM Data Server driver for JDBC and SQLJ)
<Resource name="jdbc/<JNDI Name>"
auth="Container" type="javax.sql.DataSource"
driverClassName="com.ibm.db2.jcc.DB2Driver"
url="jdbc:db2://<Informix Host>:<Informix DRDA Port>/<Database Name>"
username="<User Name>"
password="<Password>" maxActive="100" maxIdle="30" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"/>
|
Step 4:
Open the file context.xml, residing under the $CATALINA_HOME/conf directory. Add these entries under context.xml section.
Listing 3. For Informix JDBC Drivers
<Resource
name="jdbc/<JNDI Name>"
type="javax.sql.DataSource"
validationQuery="select * from systables"
url="jdbc:informix-sqli://<Informix Host>:<Informix Socket Port>/<Database Name
>:INFORMIXSERVER=<Informix Server Name>"
password="<Password>"
driverClassName="com.informix.jdbc.IfxDriver"
maxActive="4"
maxWait="5000"
maxIdle="2"
username="<UserName>"/>
|
Listing 4. For JAVA common client driver (IBM Data Server driver for JDBC and SQLJ):
<Resource
name="jdbc/<JNDI Name>"
type="javax.sql.DataSource"
validationQuery="select * from systables"
url="jdbc:db2://<Informix Host>:<Informix DRDA Port>/<Database Name>;"
password="<Password>"
driverClassName="com.ibm.db2.jcc.DB2Driver"
maxActive="4"
maxWait="5000"
maxIdle="2"
username="<Username>"/>
|
Step 5:
Now go to the WEB-INF directory under the Web Application installation location,
( for example, $CATALINA_HOME/webapps/jsp-examples/WEB-INF ). Open the file named web.xml.
Make an entry for the JNDI DataSource as shown in Listing 5:
Listing 5. For JAVA Common Client Drivers :
<description>Informix Test Connection</description>
<resource-ref>
<description>Informix DB Connection</description>
<res-ref-name>jdbc/<JNDI Name></res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
|
Step 6:
Create a JSP file as shown in Listing 6 to test the connectivity and place it
in the application virtual directory.
Listing 6. For JAVA common client drivers :
<%@page import="java.sql.*"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.*"%>
<html>
<body>
<%
Context initCtx=new InitialContext();
if ( initCtx == null )
{
out.println("No Context <br>");
}
else
{
out.println("Context Found <br>");
Context envContext = (Context) initCtx.lookup("java:/comp/env");
DataSource db = (DataSource) envContext.lookup("jdbc/informix");
if ( initCtx == null )
{
out.println("No Informix JDBC JNDI Found <br>");
}
else
{
out.println("Informix JDBC JNDI Found <br>");
Connection conn = db.getConnection();
out.println("Got Connection <br>");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM Orders");
// Assuming there is table in your databse and one of the column is order id
out.println("order id <br> ================================= <br> ");
while(rs.next()){
out.print(rs.getString(1)+"<br>");
}
out.println("==========Test Completed======================= <br> ");
rs.close();
stmt.close();
conn.close();
}
|
Step 7:
Restart the Tomcat server for the changes to take effect.
Step 8:
Open your test JSP file to see whether you are able to get the data. At this point you should be able to access data from
your Informix database.
In this article, we’ve described how you can use IDS with Tomcat. Also we’ve examined JNDI and its advantages. After walking through the steps described in this article, you should be able to configure a JNDI DataSource making use of both the Informix JDBC driver and Java Common Client (JCC) driver.
Learn
-
Visit the developerWorks Informix Zone to read articles and tutorials and connect to other resources to expand your Informix skills.
-
Learn more about Informix at the "IBM Informix Dynamic Server 11 Information Center.
- The
Apache Tomcat v6.0.16 Release Notes lists known issues and dependencies.
- Take a look at the
Apache Tomcat
Wikipedia entry for more information.
- Detailed information on
Directory service is provided on Wikipedia.
Get products and technologies
-
Download a free trial version of Informix Dynamic Server.
- Download
IBM product evaluation versions
and get your hands on application development tools and middleware products from
IBM Information Management, Lotus®, Rational®, Tivoli®, and
WebSphere®.
Discuss
- Participate in the discussion forum.
- Check out
developerWorks
blogs and
get involved in the
developerWorks community.








