J2EE : Configurer JBoss pour DB2400

Olivier Constans

L'objet de ce tutoriel est de configurer un serveur d'application Jboss afin de pouvoir écrire des applications qui soient en mesure d'interagir avec une base de données DB2 UDB pour iSeries (AS400). ♪

- Titre : J2EE : Configurer JBoss pour DB2400

- Auteur : Olivier Constans

- Parution : 12 mai 2004

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2020 Olivier Constans. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Configuration

- III. Déploiement

I - Introduction

L' iSeries est un ordinateur IBM utilisant un système d'exploitation propriétaire, l' OS400 (i5/OS V5R3 pour la toute dernière mouture de cet OS) mais aussi Linux, unix (AIX) ou encore Windows pour les tout derniers serveurs IBM eServer i5. Ces derniers sont, en effet, capables de faire cohabiter plusieurs systèmes d'exploitation différents dans des systèmes virtuels hébergés dans un seul et unique serveur (voir le lien précédent pour plus d'informations).

La base de données utilisée sur l'iSeries est une version de la base de données DB2 UDB.

Bien que l'iSeries ou AS400 ne soit pas souvent cité ou connu, cet ordinateur est présent dans nombre d'entreprises de tailles moyennes à grosses et tout informaticien peut donc être confronté à devoir un jour, au cours de sa carrière, exploiter les données stockées sur un tel système.

Dans le cadre de ce tutoriel, nous allons donc supposer que nous avons la charge de mettre en place un serveur d'application JBoss sur lequel une application J2EE exploitera des données stockées dans un eServer i5 sous système d'exploitation OS400 et avec donc DB2400 UDB comme SGBD. La version de JBoss utilisée dans ce tutoriel est la version 3.23.

II - Configuration

Le décor étant planté, entrons dans le vif du sujet : la liaison de Jboss avec une base de données est effectuée grâce à plusieurs fichiers XML. Ces fichiers XML sont situés dans les répertoires. \jboss-3.2.3\server\all\conf, ..\jboss-3.2.3\server\default\conf et ..\jboss-3.2.3\server\minimal\conf. (chacun de ces trois répertoires correspond à une version plus ou moins complète du serveur JBoss).

Dans ces répertoires, le fichier suivant va nous intéresser : standardjbosscmp-jdbc.xml.

Tout d'abord nous allons effectuer une copie de ce fichier avant modification. Ensuite, nous allons l'ouvrir avec un éditeur de texte. En voici le début :

standardjbosscmp-jdbc.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC
"-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN"
"http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">
<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Standard JBossCMP-JDBC Configuration                                 -->
<!--                                                                       -->
<!-- ===================================================================== -->
<!-- $Id: standardjbosscmp-jdbc.xml,v 1.39.2.34 2003/11/25 01:48:16 ejort Exp $ -->
<jbosscmp-jdbc>
<defaults>
<datasource>java:/DefaultDS</datasource>
<datasource-mapping>Hypersonic SQL</datasource-mapping>
<create-table>true</create-table>
etc...

Dans le code XML précédent, nous allons modifier les lignes <datasource> et <datasource-mapping>. En effet, par défaut, Jboss est configuré pour fonctionner avec la base de données « Hypersonnic ». Nous allons remplacer le nom de la source de données java:/DefaultDS par java:/DB2400. De la même façon, nous allons remplacer le « type-mapping » Hypersonic SQL par DB2/400. En effet, si nous descendons plus bas dans le source XML, nous verrons que le type de mapping DB2/400 est défini pour JBOSS 3.2.3.

standardjbosscmp-jdbc.xml

...
<type-mapping-definition>
<name>DB2/400</name>
<mapping>
<java-type>java.lang.Character</java-type>
<jdbc-type>CHAR</jdbc-type>
<sql-type>CHAR(1)</sql-type>
</mapping>
<mapping>
<java-type>java.lang.String</java-type>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(256)</sql-type>
</mapping>
<!-- Apparent DB2/400 doesn't handle Byte type either
<mapping>
<java-type>java.lang.Byte</java-type>
<jdbc-type>CHAR</jdbc-type>
<sql-type>CHAR(1) FOR BIT DATA</sql-type>
</mapping>
-->

Finalement, le début de notre fichier XML doit contenir :

standardjbosscmp-jdbc.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC
"-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN"
"http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd">
<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Standard JBossCMP-JDBC Configuration                                 -->
<!--                                                                       -->
<!-- ===================================================================== -->
<!-- $Id: standardjbosscmp-jdbc.xml,v 1.39.2.34 2003/11/25 01:48:16 ejort Exp $ -->
<jbosscmp-jdbc>
<defaults>
<datasource>java:/DB2400DS</datasource>
<datasource-mapping>DB2/400</datasource-mapping>
<create-table>true</create-table>
<remove-table>false</remove-table>
<read-only>false</read-only>
<read-time-out>300000</read-time-out>
<row-lockinq
etc...

III - Déploiement

Enregistrons notre fichier. Nous allons maintenant répercuter ces modifications dans tous les autres répertoires « server » de Jboss :

\jboss-3.2.3\server\all
\jboss-3.2.3\server\Default
\jboss-3.2.3\server\Minimal

En copiant nos deux fichiers modifiés respectivement dans les répertoires \conf de chacun des répertoires cités ci-dessus.

Passons à présent à la définition de la source de données. Pour utiliser DB2 400 avec JBoss, nous devons disposer de la bibliothèque des classes IBM qui permet d'établir une connexion avec l'As400 à l'aide d'un driver JDBC.

Dans notre cas, nous utiliserons la version open source d'IBM jtopen4.3 disponible à l'adresse suivante : http://www-124.ibm.com/developerworks/oss/jt400/.
Une fois la toolbox d'IBM installée, nous allons trouver dans le sous-répertoire lib l'archive jt400.jar. Cette archive devra être copiée dans les trois répertoires serveur de JBoss suivant :

\jboss-3.2.3\server\all\lib
\jboss-3.2.3\server\Default\lib \jboss-3.2.3\server\Minimal\lib

À présent, il nous faut créer le fichier XML qui va définir la source de données DB2400DS que nous avons référencée au début de ce tutoriel dans nos fichiers XML.

Pour faire cela, nous allons copier le fichier db2-ds.xml présent dans le répertoire \jboss-3.2.3\docs\examples\jca vers le répertoire server\all\deploy. Puis, nous allons renommer ce fichier en db2400-ds.xml et enfin l'ouvrir avec un éditeur de texte :

db2400-ds.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- =====================================================================
--> <!-- --> <!-- JBoss Server Configuration --> <!-- --> <!-- =====================================================================
--> <!-- $Id: db2-ds.xml,v 1.1.2.1 2003/09/05 16:38:24 patriot1burke Exp $ -->
<datasources> <local-tx-datasource> <jndi-name>DB2DS</jndi-name> <connection-url>jdbc:db2:yourdatabase</connection-url>
<driver-class>COM.ibm.db2.jdbc.app.DB2Driver</driver-class> <user-name>x</user-name>
<password>y</password> <min-pool-size>0</min-pool-size> <!-- sql to call when
connection is created <new-connection-sql>some arbitrary sql</new-connection-sql>
--> <!-- sql to call on an existing pooled connection when it is obtained from
pool <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
--> </local-tx-datasource> </datasources>

À présent on en modifie le contenu de la façon suivante :

db2400-ds.xml

<?xml version="1.0" encoding="UTF-8"?> <!-- =====================================================================
--> <!-- --> <!-- JBoss Server Configuration --> <!-- --> <!-- =====================================================================
--> <!-- $Id: db2400-ds.xml,v 1.1.2.1 2003/09/05 16:38:24 patriot1burke Exp $
--> <datasources> <local-tx-datasource> <jndi-name>DB2400DS</jndi-name> <connection-url>jdbc:as400//yourdatabase</connection-url>
<driver-class>com.ibm.as400.access.JDBCDriver</driver-class> <user-name>x</user-name>
<password>y</password> <min-pool-size>0</min-pool-size> <!-- sql to call when
connection is created <new-connection-sql>some arbitrary sql</new-connection-sql>
--> <!-- sql to call on an existing pooled connection when it is obtained from
pool <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
--> </local-tx-datasource> </datasources>

L'url de connexion est de la forme jdbc:as400//yourdatabase, yourdatabase étant l'adresse IP de votre système ou son nom d'hôte. Attention de bien respecter la casse pour la définition de la classe du driver JDBC.

L'utilisateur et le mot de passe peuvent être laissés à blanc. Dans ce cas nous les passerons au système lors de l'établissement de la connexion. Enregistrez votre fichier modifié et copiez-le dans les deux autres répertoires server\default\deploy et server\minimal\deploy.

Voilà, Jboss est maintenant prêt pour communiquer avec un as400 et nous verrons comment, dans un prochain article, en écrivant un EJB session chargé de vérifier l'enregistrement d'un utilisateur dans une base de données DB2 UDB pour iSeries.

à suivre…