Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC Sommaire 1. Objectifs et intérêts... 2 2. Intégrer le driver SQL Server dans SJSAS 9... 2 2.1. Télécharger le driver... 2 2.2. Administration de SJSAS 9... 3 2.3. Intégrer le driver SQL Server... 4 3. Configurer JDBC pour utiliser une base SQL Server... 4 3.1. Ajoutez une connexion à la base de données (Connection Pool)... 4 3.2. Ajouter une interface standard vers la connexion (JDBC Resource)... 6 4. Utilisation de la ressource JDBC dans le codage... 8 4.1. Création d une application serveur... 8 4.2. Ajouter la bibliothèque pour accéder aux ressources JDBC... 8 4.3. Connexion à la ressource JDBC de SJSAS 9... 8 4.4. Utilisation de la connexion pour les requêtes SQL... 8 4.5. Déconnexion de la ressource JDBC... 9 5. Annexe : Listing d un service web utilisant JDBC... 9 BTS iris - Lycée Eiffel - Armentières Page 1 sur 10 06/05/2008
1. Objectifs et intérêts Ce document donne une méthode pour se connecter et utiliser une base de données SQL server 2005 à partir du serveur d application Sun Java System Application Server 9 (SJSAS 9). Cette méthode sera utilisée pour les accès à SQL server dans les architectures n-tiers Java EE 5 (par exemple dans le codage des méthodes d un service web). L intérêt essentiel de cette méthode est d avoir un code totalement indépendant du type de base de données utilisé (MySQL, oracle, SQL server, ) et de son emplacement. Exemple de fonctionnement : Utilisateur Serveur d application Base de données Serveur d application Application Web JDBC Utilisateur Service Web JDBC Resource Connection Pool Base de données 2. Intégrer le driver SQL Server dans SJSAS 9 2.1. Télécharger le driver La bibliothèque pour accéder à SQL Server 2005 en Java est téléchargeable sur le site de Microsoft : http://msdn2.microsoft.com/fr-fr/data/aa937724(en-us).aspx Sélectionnez la version 1.2. Exécutez le fichier «sqljdbc_1.2.2828.100_enu.exe» qui génèrera un dossier «sqljdbc_1.2» Nous allons utiliser le fichier \sqljdbc_1.2\enu\sqljdbc.jar pour la configuration de JDBC. Copiez ce fichier dans le répertoire des bibliothèques de SJSAS 9 (C:\Sun\AppServer\lib) BTS iris - Lycée Eiffel - Armentières Page 2 sur 10 06/05/2008
2.2. Administration de SJSAS 9 On lance le serveur en démarrant un domaine. Un domaine fournit l authentification et l administration de l instance du serveur qui y correspond. Un domaine par défaut (domain1) est créé pendant l installation. Démarrez le serveur d application SJSAS 9 : Soit à partir du menu Démarrer : Démarrer >Programmes > Sun Microsystems > Application Server PE 9 > Start Default Server Soit à partir de NetBeans : Onglet Runtime > Servers > Clic droit sur SJSAS 9 > Start Lancez la console d administration de SJSAS 9 : Soit à partir du menu Démarrer : Démarrer >Programmes > Sun Microsystems > Application Server PE 9 > Admin Console Soit à partir de NetBeans : Onglet Runtime > Servers > Clic droit sur SJSAS 9 > View Admin Console Soit à partir d un navigateur Web à l adresse : http://localhost:4848/ Login du domaine par défaut (domain1) du serveur d application : username = admin password = adminadmin BTS iris - Lycée Eiffel - Armentières Page 3 sur 10 06/05/2008
2.3. Intégrer le driver SQL Server Le serveur d application SJSAS 9 est conçu pour supporter plusieurs types de drivers JDBC. Certains sont déjà intégrés au serveur. Pour ce qui est de SQL server, il faut l intégrer après l installation de SJSAS 9. Site de référence : http://docs.sun.com/app/docs/doc/819-3658/6n5s5nklk?a=view#gcfoy 1 - Dans la console d administration > Application Server > JVM settings > Path Settings : 2 - Ajoutez l emplacement du driver SQL server dans la zone «ClassPath Prefix» : 3 - Cliquez sur Save 4 - Redémarrez SJSAS 9 3. Configurer JDBC pour utiliser une base SQL Server 3.1. Ajoutez une connexion à la base de données (Connection Pool) Dans la console d administration de SJSAS 9 > Resources > JDBC > Connection Pools Cliquez sur «New» BTS iris - Lycée Eiffel - Armentières Page 4 sur 10 06/05/2008
Sélectionnez les paramètres suivants : Name : Ce nom est utilisé plus tard pour configurer la ressource JDBC (ex. sqlserver2005connpool) Resource Type : javax.sql.datasource Database Vendor : mssql Cliquez sur Next et modifiez les paramètres suivants : General Settings : Datasource Classname : com.microsoft.sqlserver.jdbc.sqlserverdatasource Properties : servername : adresse IP du serveur SQL (ex. 192.168.33.2) port : numéro de port d écoute du serveur SQL = 1433 user : nom d utilisateur SQL autorisé à accéder à la base password : mot de passe databasename : nom de la base de données (ex. tapiris2008) URL (URL en majuscules) : jdbc:sqlserver://192.168.33.2:1433;databasename=tapiris2008 Cliquez sur Finish. BTS iris - Lycée Eiffel - Armentières Page 5 sur 10 06/05/2008
Vous pouvez tester si la nouvelle connexion accède bien à la base de données : Cliquez sur la nouvelle connexion (ex. sqlserver2005connpool) Cliquez sur le bouton «Ping» «Ping succeeded» doit s afficher. 3.2. Ajouter une interface standard vers la connexion (JDBC Resource) Cette étape permet de créer un nom JNDI unique pour accéder à la base de données. JNDI (Java Naming and Directory Interface) fait partie de la plateforme Java et fournit aux applications Java des interfaces standard pour accéder à différents types de ressource. Dans la console d administration de SJSAS 9 > Resources > JDBC > JDBC Resources Cliquez sur «New» BTS iris - Lycée Eiffel - Armentières Page 6 sur 10 06/05/2008
Sélectionnez les paramètres suivants : JNDI Name : Ce nom sera utilisé pour identifier la connexion à la base de données dans le codage des applications (ex. tapiris2008) Pool Name : Le nom de la connexion à utiliser (ex. sqlserver2005connpool) Cliquez sur OK BTS iris - Lycée Eiffel - Armentières Page 7 sur 10 06/05/2008
4. Utilisation de la ressource JDBC dans le codage 4.1. Création d une application serveur Voir le document «Création d un service web avec NetBeans 5.5 et SJAS 9» 4.2. Ajouter la bibliothèque pour accéder aux ressources JDBC Pour utiliser une ressource JDBC dans le codage de l application, vous devez inclure au projet la bibliothèque d extensions de SJSAS 9. Dans l inspecteur de projets de NetBeans > Projet courant > Clic droit sur le dossier «Libraries» > Add JAR/Folder Sélectionnez C:\Sun\AppServer\lib\ appserv-ext.jar 4.3. Connexion à la ressource JDBC de SJSAS 9 import com.sun.appserv.jdbc.datasource; import java.sql.*; import javax.naming.*;... InitialContext ic; DataSource ds; Connection myconnection;... ic = new InitialContext(); ds = (DataSource) ic.lookup("tapiris2008"); myconnection = ds.getconnection(); 4.4. Utilisation de la connexion pour les requêtes SQL Statement stmt; ResultSet rs ; String requete = "Select * from confposte1" ; String lectenreg = ""; int nbenreg = 0 ; int vectresult[] = {0} ; BTS iris - Lycée Eiffel - Armentières Page 8 sur 10 06/05/2008
int i = 0 ; // création du statement et envoi de la requête stmt = myconnection.createstatement(); rs = stmt.executequery(requete); // initialisation de vectresult avec le nombre d'enregistrements rs.last() ; nbenreg = rs.getrow() ; vectresult = new int [nbenreg] ; rs.beforefirst() ; // parcours des enregistrements et remplissage de vectresult while(rs.next()){ lectenreg = rs.getstring("numproduit"); vectresult [i] = Integer.parseInt(lectEnreg) ; i++ ; } // fermeture du statement et déconnexion de la base stmt.close(); 4.5. Déconnexion de la ressource JDBC myconnection.close(); 5. Annexe : Listing d un service web utilisant JDBC /* * WSTapiris.java * * * To change this template, choose Tools Template Manager * and open the template in the editor. */ package com.iris; import com.sun.appserv.jdbc.datasource; import java.sql.connection; import java.sql.resultset; import java.sql.sqlexception; import java.sql.statement; import java.util.vector; import javax.jws.webmethod; import javax.jws.webparam; import javax.jws.webservice; import javax.naming.initialcontext; import javax.naming.namingexception; import javax.xml.ws.webserviceref; /** * * @author BTS iris Armentières */ BTS iris - Lycée Eiffel - Armentières Page 9 sur 10 06/05/2008
@WebService() public class WSTapiris { /** * Web service operation */ @WebMethod public int[] LireConfPoste(@WebParam(name = "prmnumposte") int prmnumposte) { // Accès à la base en utilisant // la ressource JDBC du serveur d'appli SJSAS 9 InitialContext ic; DataSource ds; Connection myconnection; Statement stmt; ResultSet rs ; String requete = "Select * from confposte" ; String lectenreg = ""; int nbenreg = 0 ; int vectresult[] = {0} ; int i = 0 ; requete += prmnumposte ; try { // initialisation de la connexion à la base ic = new InitialContext(); ds = (DataSource) ic.lookup("tapiris2008"); myconnection = ds.getconnection(); // création du statement et envoi de la requête stmt = myconnection.createstatement(); rs = stmt.executequery(requete); // initialisation de vectresult avec le nombre d'enregistrements rs.last() ; nbenreg = rs.getrow() ; vectresult = new int [nbenreg] ; rs.beforefirst() ; // parcours des enregistrements et remplissage de vectresult while(rs.next()){ lectenreg = rs.getstring("numproduit"); vectresult [i] = Integer.parseInt(lectEnreg) ; i++ ; } // fermeture du statement et déconnexion de la base stmt.close(); myconnection.close(); } catch (SQLException ex) { ex.printstacktrace(); } catch (NamingException ex) { ex.printstacktrace(); } return vectresult ; } } BTS iris - Lycée Eiffel - Armentières Page 10 sur 10 06/05/2008