Catégories: Outil | Java | WSAD | Article
Utiliser une source de données MySQL avec WSAD 5
Un article de ToutProgrammer.com.
MySQL est le serveur de bases de données Open Source le plus utilisé dans le monde. Nous allons voir dans cet article comment mettre en oeuvre celui-ci avec WSAD (l'environnement de développement Java d'IBM) qui est l'un des IDE Java parmi les plus complets qui soient, mais également l'un des plus compliqués à utiliser.
Sommaire |
[modifier] Pourquoi MySQL?
WSAD est utilisé principalement en entreprise en raison du coût de la licence qui est très élevé. Si souvent ce type d'outil (le serveur d'applications WebSphere compris) est utilisé avec des sources de données sur des SGBDR couteux comme Oracle, Microsoft SQL Server ou IBM DB2, il n'est pourtant pas obligatoire d'utiliser de tels logiciels pendant la phase de développement.
MySQL Server, l'un des serveurs parmi les plus utilisés en raison principalement de son coût de licence nul, peut être mis en oeuvre avec WSAD grâce à JDBC. C'est ce que nous allons voir dans cet article.
[modifier] Configuration de WSAD
Ce qui suit a été réalisé sur WSAD 5.1.1, mais ceci ne devrait pas être différent quelque soit la version si elle appartient à la branche 5.x de l'EDI d'IBM.
[modifier] Téléchargement et installation du connecteur Java Pour MySQL
Le connecteur Java MySQL va permettre d'utiliser JDBC avec le serveur de bases de données MySQL. Ce connecteur est librement téléchargeable sur le site de l'éditeur MySQL à l'adresse suivante: http://dev.mysql.com/downloads/connector/j/
Régulièrement, MySQL publie de nouvelles versions du connecteur. Dans notre cas, la version utilisée sera la version 3.1.7.
Une fois l'archive téléchargée, vous devez en extraire le .jar qui porte le nom mysql-connector-java-3.1.7-bin.jar(dépendant bien entendu de la version). Celui-ci contient tout le nécessaire pour utiliser le serveur MySQL à partir d'une application cliente Java. Le plus simple est de placer ensuite celui-ci dans le répertoire WEB-INF/lib de votre application Web ou en tout cas dans son classpath.
[modifier] Créer le serveur de test
Nous allons voir dans cette première partie comment configurer le serveur de test local à WSAD. Comme nous le verrons, nous utiliserons le serveur WebSphere embarqué et non Jakarta Tomcat. En effet, lorsque l'on utilise Tomcat, la configuration de la source de données doit s'effectuer directement dans le fichier de configuration de Tomcat par le développeur. Ceci ne présentant que peu de difficulté, cet article ne présentera pas ce processus de configuration.
Si vous avez déjà un tel serveur configuré dans WSAD, vous pouvez passer directement à l'étape suivante. Dans le cas contraire, cliquez le menu Fichier>Nouveau>Autre pour arriver sur la fenêtre suivante:
Sélectionnez "Serveur et configuration de serveur" dans la rubrique "Serveur" de cette boîte de dialogue. En cliquant le bouton "Suivant", vous arrivez alors sur la boîte ci-dessous:
Vous devez y indiquer le nom du serveur et le nom du dossier qui le contiendra. J'ai choisi d'utiliser le nom "WAS 5.1 TE" pour le nom du serveur et "Serveurs" comme nom de dossier.
WSAD propose plusieurs versions du serveur Websphere mais également plusieurs versions d'environnements de test. Choisissez le type de serveur "Environnement de test" puis cliquez sur "Suivant>" pour arriver sur la boîte d'alerte ci-dessous:
Vous devez juste cliquer "Oui" pour arriver sur la fenêtre suivante:
Vous pouvez laisser les paramètres par défaut. Vous devez modifier le port si votre serveur Web de test doit fonctionner sur un port autre que 9080.
Ceci achève la première étape.
[modifier] Ajout de la source de données
Cette étape va permettre l'ajout de la source de données au serveur de test.
Si vous n'y êtes pas déjà, ouvrez la perspective "Serveur". Ouvrez ensuite le dossier "Serveurs" puis double-cliquez sur le répertoire "WAS 5.1 TE.wsi" afin d'ouvrir la vue suivante:
Supprimez les 2 fournisseurs JDBC existants (Cloudscape JDBC et Default DB2 JDBC) car elles ne nous serviront pas. Nous allons ajouter notre propre fournisseur JDBC en cliquant le bouton "Ajouter ...". Vous arrivez alors sur la fenêtre suivante:
Comme il n'existe pas de fournisseur JDBC pour MySQL, vous devez sélectionner "Défini par l'utilisateur" comme "Type de base de données" et "User-defined JDBC Provider" comme "Type de fournisseur JDBC". Une fois ceci fait, cliquez sur suivant pour arriver sur l'écran ci-dessous:
Indiquez dans les champs prévus à cet effet, le nom du fournisseur (MySQL par exemple) ainsi qu'une description (MySQL pour être original).
Dans le champs "Nom de la classe d'implémentation" vous devez indiquer la classe com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource.
Enfin, vous devez sélectionnez le fichier .jar du client MySQL. Nous l'avions placé dans le répertoire WEB-INF/lib de notre application et il porte le nom mysql-connector-java-3.1.7-bin.jar.
Dès que ceci est fait, cliquez le bouton "Fin" pour revenir sur la vue "Sources de données" de notre serveur.
Nous allons maintenant ajouter la source de données. Pour cela, sélectionnez notre nouveau fournisseur JDBC "MySQL" et cliquez le bouton "Ajouter..." à droite de la liste "Source de données définie dans le fournisseur JDBC sélectionné ci-dessus". Vous arrivez alors sur l'écran suivant:
Vous pouvez choisir comme "Type de source de données" une version 5.0. Cliquez ensuite sur "Suivant>" pour arriver sur la boîte de dialogue ci-dessous:
Indiquez dans cet écran un nom pour la source de données, un nom JNDI, une description et un "Nom de la classe auxiliaire de la source de données".
Pour ce dernier, vous pouvez indiquer la classe suivante: com.ibm.websphere.rsadapter.ConnectJDBCDataStoreHelper. Cliquez "Fin" pour revenir à la vue "Sources de données" de notre serveur.
Il nous reste à définir les paramétrages de la base de données. C'est ce qui va être fait avec la dernière liste "Propriétés de la ressource définie dans la source de données sélectionnée ci-dessus". Cliquez le bouton "Ajouter..." afin d'arriver sur l'écran suivant:
Ajoutez comme indiqué une propriété dont le nom est "url", le type est "java.lang.String" et pour valeur quelque chose comme "jdbc:mysql://[hôte]/[base]?user=[utilisateur]&password=[motdepasse]&autoReload=true".
Voici le détail des données:
| Paramètre | Description |
|---|---|
| [hôte] | Nom de l'hôte du serveur. Si votre serveur MySQL est en local, ce sera alors localhost. |
| [base] | Nom de l'instance de la base de données. |
| [utilisateur] | Nom de l'utilisateur autorisé à accéder à 'instance de base de données. |
| [motdepasse] | Mot de passe de l'utilisateur. |
Dès que c'est fait, vous pouvez confirmer afin de terminer la création de la source de données. Vous devriez alors obtenir quelque chose d'approchant ceci:
Il nous reste à tester tout cela.
[modifier] Test de la source de données
Pour tester cela, nous allons utiliser une simple servlet dans une application Web.
Voici le code de cette servlet:
package com.toutprogrammer.articles.mysqlwsad.servlets; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; /** * @version 1.0 * @author Stéphane VANPOPERYNGHE */ public class TestDataSource extends HttpServlet implements Servlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) DataSource ds = null; Connection conn = null; ServletOutputStream sos = resp.getOutputStream(); try { ds = (DataSource)(ctx.lookup("jdbc/test")); resp.setContentType("text/html"); sos.println("<html>"); sos.println("<head>"); sos.println("<title>Test</title>"); sos.println("</head>"); sos.println("<body>"); PreparedStatement stmt = sos.println("<ul>"); while (rs.next()) { sos.println("<li>"+ rs.getString("firstname")+" "+ rs.getString("lastname")+" </li>"); } sos.println("</ul>"); sos.println("</body>"); sos.println("</html>"); throw new ServletException(e); throw new ServletException(e); } finally { if (sos!=null) sos.close(); if (conn!=null) { try {conn.close();} throw new ServletException(e); } } } } }
Si la table users de la base test a le format suivant:
| firstname | lastname |
|---|---|
| John | SMITH |
| Paul | MARTIN |
| Sam | CHATOUILLE |
| Will | BROWN |
Nous obtiendrons le résultat suivant dans le navigateur:










