We do this all of the time in test and production environments. We use
Datasource in the web.xml. I went through your parameters and, assuming the
values are correct, they look fine. We use port 7101, though.
The invocation exception looks like the error I get when the ifxjdbc.jar is
not on the classpath. Other than that, I can't explain why you're having
issues.
Attached is the excerpt from my context.xml file for comparison:
<Context path="/myapp" debug="0" reloadable="true"
crossContext="true">
<Resource name="jdbc/myapp" auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="-1" maxWait="20000"
username="xxxx" password="xxxx"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://lexinfmx1:7101/jur_feds:INFORMIXSERVER=my_ifx"/>
</Context>
And the web.xml:
<resource-ref>
<description>Main DataSource</description>
<res-ref-name>jdbc/myapp</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Then I load it from JNDI using Spring, so I can't be of much help there.
Let me know if you have further questions.
-----Original Message-----
From: Amitava Chakraborty [mailto:[EMAIL PROTECTED]
Sent: Thursday, January 24, 2008 11:03 PM
To: [email protected]
Subject: Error encountered : JNDI on Tomcat 5.5 for Database Informix with
Informix JDBC driver
Hi All,
I am from IBM - Informix Product Interoperability team . I tried to
create a JNDI connection from Tomcat to Database Informix. But it is
throwing error. I classified the error by the following way :
1. When I tried with type="javax.sql.DataSource" , I am getting error
"Cannot create PoolableConnectionFactory (Can't load driver
java.lang.reflect.InvocationTargetException)" .
2. When I tried with type="com.informix.jdbcx.IfxConnectionPoolDataSource"
, I am getting error "java.sql.SQLException: No suitable driver".
3. But we use JNDI connections from WAS , WAS CE and Web Logic also. There
it works fine.
4. Here I have added a sample Java Code also for Pooled connection and it
is working fine.
So the clarification I need is, whether Tomcat supports Informix for a
JNDI connection. If yes, please suggest me the way it should work . I
attached my context.xml as well as web.xml contains also.
Looking for your help eagerly.
============================================================================
========
Context File Entry:
<Resource name="jdbc/myinformix" auth="Container"
type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="inform" password="inform123"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://idcps2.in.ibm.com:16001/stores_demo:INFORMIXSERVER
=ids1050"/>
WEB-INF\web.xml Entry:
<description>Informix Test Connection</description>
<resource-ref>
<description>Informix DB Connection</description>
<res-ref-name>jdbc/myinformix</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
type Exception report
message
description The server encountered an internal error () that prevented it
from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to get connection, DataSource
invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory (Can't load driver
java.lang.reflect.InvocationTargetException)"
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra
pper.java:460)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
55)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
javax.servlet.ServletException: Unable to get connection, DataSource
invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory (Can't load driver
java.lang.reflect.InvocationTargetException)"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextI
mpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImp
l.java:774)
org.apache.jsp.Informix.test_005fconnection_jsp._jspService(test_005fconnect
ion_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
31)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
javax.servlet.jsp.JspException: Unable to get connection, DataSource
invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create
PoolableConnectionFactory (Can't load driver
java.lang.reflect.InvocationTargetException)"
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(Unk
nown
Source)
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(Unknow
n
Source)
org.apache.jsp.Informix.test_005fconnection_jsp._jspx_meth_sql_005fquery_005
f0(test_005fconnection_jsp.java:99)
org.apache.jsp.Informix.test_005fconnection_jsp._jspService(test_005fconnect
ion_jsp.java:57)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
31)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
============================================================================
===============
Context File Entry:
<Resource name="jdbc/myinformix" auth="Container"
type="com.informix.jdbcx.IfxConnectionPoolDataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="inform" password="inform123"
driverClassName="com.informix.jdbc.IfxDriver"
url="jdbc:informix-sqli://idcps2.in.ibm.com:16001/stores_demo:INFORMIXSERVER
=ids1050"/>
WEB-INF\web.xml Entry:
<resource-ref>
<description>Informix DB Connection</description>
<res-ref-name>jdbc/myinformix</res-ref-name>
<res-type>com.informix.jdbcx.IfxConnectionPoolDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWra
pper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
55)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
javax.servlet.ServletException: Unable to get connection, DataSource
invalid: "java.sql.SQLException: No suitable driver"
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextI
mpl.java:841)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImp
l.java:774)
org.apache.jsp.Informix.test_005fconnection_jsp._jspService(test_005fconnect
ion_jsp.java:82)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
31)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root cause
javax.servlet.jsp.JspException: Unable to get connection, DataSource
invalid: "java.sql.SQLException: No suitable driver"
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(Unk
nown
Source)
org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(Unknow
n
Source)
org.apache.jsp.Informix.test_005fconnection_jsp._jspx_meth_sql_005fquery_005
f0(test_005fconnection_jsp.java:101)
org.apache.jsp.Informix.test_005fconnection_jsp._jspService(test_005fconnect
ion_jsp.java:59)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:3
31)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
============================================================================
===========================
Stand Alone Java Program works perfectly for a pooled connection
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.informix.jdbcx.IfxConnectionPoolDataSource;
import javax.sql.*;
public class test5
{
IfxConnectionPoolDataSource cpds = null;
public Connection getConnection () throws SQLException, Exception
{
cpds = new IfxConnectionPoolDataSource();
cpds.setUser("informix");
cpds.setPassword("inform123");
cpds.setServerName("ids1050");
cpds.setDatabaseName("stores_demo");
cpds.setPortNumber(16001);
cpds.setIfxPROTOCOLTRACE(99);
cpds.setIfxIFXHOST("idcps2.in.ibm.com");
PooledConnection pooledCon = cpds.getPooledConnection();
return pooledCon.getConnection();
}
void testinsert (Connection conn) throws SQLException
{
int rc ;
String sql = "INSERT INTO TOMCAT_TEST VALUES ( 1, 'TEST') " ;
try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
System.out.println("Executing the statement: " + sql);
rc = pstmt.executeUpdate();
System.out.println("Statement executed successfully with RC "+
rc);
sql="select * from TOMCAT_TEST";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while (rs.next())
{
System.out.println("After fetch the value is ID="
+rs.getString(1) + " CHAR "+ rs.getString(2) );
}
}
catch (SQLException s)
{
printSQLException(s);
System.out.println("Prepare Statement: " + s.toString());
}
}
public void createTable (Connection conn) throws SQLException
{
String sql = "CREATE TABLE TOMCAT_TEST( ID_TOMCAT
INTEGER,ID_CHAR CHAR(12)) LOCK MODE ROW" ;
Statement stmt = conn.createStatement();
System.out.println("Creating the table TOMCAT_TEST ...");
stmt.executeUpdate(sql);
System.out.println("Table created successfully!");
}
public void dropTable (Connection conn) throws SQLException
{
String sql = "DROP TABLE TOMCAT_TEST";
Statement stmt = conn.createStatement();
try
{
System.out.println("Dropping the table TOMCAT_TEST ...");
stmt.executeUpdate(sql);
System.out.println("Table dropped successfully!");
}
catch (SQLException exc)
{
if (exc.getSQLState().equals("42000"))
{
System.out.println("The table, dbuser1.user1, does
not exist in the database.");
System.out.println("Skip dropping the table.");
}
else
{
printSQLException(exc);
throw exc;
}
}
}
public static void printSQLException (SQLException exc)
{
if (exc != null)
{
System.out.println("Error Code: " + exc.getErrorCode());
System.out.println("SQL State: " + exc.getSQLState());
System.out.println("Message: " + exc.getMessage());
exc.printStackTrace();
printSQLException(exc.getNextException());
}
else
{
return;
}
}
public static void main (String[] args)
{
test5 test = new test5();
try
{
Connection conn = test.getConnection();
test.dropTable(conn);
test.createTable(conn);
test.testinsert(conn);
}
catch (Exception exc)
{
exc.printStackTrace();
}
}
}
Thanks..
Amitava Chakraborty PMP(r)
Lead - Informix Interoperability
IBM India PVT LTD.
Plot No 1&2, Block - G, 2nd Floor ,
The Mira Corporation Suites, Old Ishwar Nagar,
Mathura Rd. New Delhi 110065
-------------------------------------------
Ph : Extn : 91-11-46592644 / 91-129-4033409
Mobile : +919958995870
Fax : 91-11-26921061
E - id : [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]