Connecting with the com.ibm.as400.access.AS400JDBCDriver in the plain standard way described As400 unfortunately seems to only work with JDK 1.4.0 or later.

If you need all Cocoon SQL functionality

If you need all Cocoon SQL functionality (XSP and SQLTransformer) you probably need to switch to JDK 1.4, which means:

If you don't need/use SQLTransformer and are happy with ESQL

Then maybe you could stick with JDK 1.3 without changing other applications, and retain your current Tomcat setup except for minor changes.

The trick is to not use Cocoon's built-in connection pooling facility (provided by Avalon), but rather use your servlet container's one. Currently, this has been tested on Tomcat, which uses connection pooling services provided by Apache Commons DBCP.

You need to:

  1. Let the com.ibm.as400.access.AS400JDBCDriver be accessible by Tomcat at its startup by copying jt400.jar to $TOMCAT_HOME/common/lib;

  2. Add to Tomcat's server.xml configuration file (located in $TOMCAT_HOME/conf) the desired JDBC connection as a JNDI resource:

    <Resource name="jdbc/as400" auth="Container" type="javax.sql.DataSource"/>
    <ResourceParams name="jdbc/as400">
            <parameter>
              <name>username</name>
              <value><$YOUR_USERNAME></value>
            </parameter>
            <parameter>
              <name>password</name>
              <value><$YOUR_PASSWORD></value>
            </parameter>
            <parameter>
              <name>driverClassName</name>
              <value>com.ibm.as400.access.AS400JDBCDriver</value>
             </parameter>
        <parameter>
          <name>url</name>
          <value>jdbc:as400://<$YOUR_HOST>/<$YOUR_COLLECTION></value>
        </parameter>
    </ResourceParams>

    1.#Please note that you can append a ;trace=true option to the JDBC URL, as well as any other options documented in JTOpen documentation. The trace option obviously kills performance, but allows you to debug connection problems by writing a quite detailed log to System.out, which in Tomcat default configuration gets logged to $TOMCAT_HOME/logs/catalina.out. 1.#Please also note that the snippet above must be inserted inside the relevant <Context/> element for your application. If you didn't define one (just dropped something into the webapps directory), putting it in the <GlobalNamingResources> could work (?).

  3. Add to your application's cocoon.xconf file a reference to the J2EE connection you have just defined:{{{<datasources>

    • ..

      <j2ee name="$CONNECTION_NAME">

      • <dbname>as400</dbname>

      </j2ee>

    • ..

</datasources>}}} Please note that $CONNECTION_NAME is the name you want to use in your Cocoon application.
The <dbname/> string is, instead, the name you chose in server.xml's resource definition.

Note that server.xml's resource name is jdbc/as400, where <dbname/> only contains as400. This is because database connections are usually looked up inside the jdbc/ hierarchy.

This latter JNDI configuration is obviously only a "desperation-workaround", since it has shown problems with SQLTransformer.
Switching to JDK 1.4 should be seen as the best option, since it seems to allow all Cocoon SQL functionality to be used on databases stored on our AS/400 boxes.

A final note

Please note that all the above has been tested on Tomcat 4.1.12.

(Lorenzo)

As400JDK13 (last edited 2009-09-20 23:39:53 by localhost)