Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre régulier Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 198
    Points : 86
    Points
    86

    Par défaut Connexion entre Eclipse et MySQL avec Tomcat

    Bonjour,

    j'utilise Eclipse Java EE avec Tomcat, mais je voudrais faire un exercice qui utilise MySQL afin de créer une table avec un certain nombre de données dedans. J'utilise un pool de connexion, c'est pourquoi j'utilise le fichier exemple15.xml sous tomcat/conf/Catalina/localhost/:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <Context path="/exemple15" reloadable="true"
    docBase="J:\PROJETWEB\exemple15"
    workDir="J:\PROJETWEB\exemple15\work">
    	<Resource name="jdbc_struts2_MySQL"
    		auth="Container"
    		type="javax.sql.DataSource"
    		username="root"
    		password=""
    		driverClassName="com.mysql.jdbc.Driver"
    		url="jdbc:mysql://localhost:3306/struts2"
    		maxActive="20"
    		maxIdle="10"
    		validationQuery="SELECT 1"/>
    </Context>
    Ensuite j'ai installé le pilote mysql-connector-java-5.1.19-bin.jar dans le répertoire tomcat/lib.

    Bref apparemment tout fonctionne lorsque j'exécute mon application, sauf qu'evidemment je n'ai pas les données de la table qui apparaissent, car je ne sais pas comment exécuter les requêtes ci-dessous sous Eclipse:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    -- 
    -- Structure de la table `client`
    -- 
     
    CREATE TABLE `client` (
      `idClient` int(11) NOT NULL auto_increment,
      `identifiant` varchar(20) character set utf8 NOT NULL default '',
      `motdepasse` varchar(20) character set utf8 NOT NULL default '',
      PRIMARY KEY  (`idClient`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=5 ;
     
    -- 
    -- Contenu de la table `client`
    -- 
     
    INSERT INTO `client` (`idClient`, `identifiant`, `motdepasse`) VALUES (1, 'jlafosse', 'jerome');
    INSERT INTO `client` (`idClient`, `identifiant`, `motdepasse`) VALUES (2, 'astapane', 'amelie');
    INSERT INTO `client` (`idClient`, `identifiant`, `motdepasse`) VALUES (3, 'amartin', 'alain');
    INSERT INTO `client` (`idClient`, `identifiant`, `motdepasse`) VALUES (4, 'pleroy', 'pierre');
    Bref, comment pourrais-je créer ma base de données MySQL, nommée "struts2" avec une table client et trois champs: idClient, identifiant et motdepasse.

    Merci d'avance pour votre réponse.

    Mumu27!

  2. #2
    Membre régulier Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 198
    Points : 86
    Points
    86

    Par défaut

    J'ai fait quelques modifications à mes fichiers au vu des différents forums que j'ai pu consulter.

    Voici l'arborescence de mon projet dans Eclipse Java EE:

    /WEB-INF/src
    exemple15
    ClientAction.java
    Ajouter_Client-validation.xml
    ClientAction-Modifier_Client-validation.xml
    exemple15.boiteoutils
    ApplicationListener.java
    GestionBaseDeDonnees.java
    exemple15.javabeans
    Client.java
    exemple15.modeles
    DAO.java
    ModeleClientDAO.java
    ModeleDAO.java
    log4j.properties
    struts.xml
    css
    styles.css
    images
    aide.jpg
    ajouterclient.jpg
    editerclient.jpg
    important.jpg
    supprimerclient.jpg
    jsp
    EditerClient.jsp
    ListerClient.jsp
    WEB-INF
    lib
    web.xml

    Voici les fichiers:


    ClientAction.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    package exemple15;
     
    import java.util.ArrayList;
    import java.util.List;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import com.opensymphony.xwork2.Preparable;
    import exemple15.javabeans.Client;
    import exemple15.modeles.ModeleClientDAO;
     
     
    @SuppressWarnings("serial")
    public class ClientAction extends ActionSupport implements Preparable, ModelDriven{
     
        private Client client;
        private List<Client> listeClients;
        private int idClientEnCours;
     
        public void prepare() throws Exception {
        	ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
        	// en création, créer un nouvel objet vide
        	if(idClientEnCours==0) 
        	{
        		client=new Client();
        	} 
        	// en modification, retourner les infos de l'objet
        	else
        	{
        		client=modeleClientDAO.getClient(idClientEnCours);
        	}
        }
     
        public Object getModel() {
        	return client;
        }
     
    	public int getIdClientEnCours() {
    		return idClientEnCours;
    	}
     
    	public void setIdClientEnCours(int idClientEnCours) {
    		this.idClientEnCours = idClientEnCours;
    	}
     
    	public Client getClient() {
    		return client;
    	}
     
    	public void setClient(Client client) {
    		this.client = client;
    	}
     
    	public List<Client> getListeClients() {
    		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
    		listeClients=(ArrayList<Client>)modeleClientDAO.getListeClient();
    		return listeClients;
    	}
     
    	public void setListeClients(List<Client> listeClients) {
    		this.listeClients = listeClients;
    	}
     
    	// retourner la liste des clients après récupération
    	public String lister() 
    	{
    		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
    		listeClients=(ArrayList<Client>)modeleClientDAO.getListeClient();
            return SUCCESS;
        }
     
    	// ajouter le client dans le modèle
    	public String ajouter()
    	{	
    		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
    		modeleClientDAO.ajouterClient(client);
    	    return SUCCESS;
    	}
     
    	// afficher le formulaire en édition
    	public String editer()
    	{
    		 return SUCCESS;
    	}
     
    	// modifier un client
    	public String modifier()
    	{
    		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
    		modeleClientDAO.modifierClient(client);
    		return SUCCESS;
    	}
     
    	// supprimer un client à partir du paramètre reçu nommé idClient
    	public String supprimer()
    	{
    		ModeleClientDAO modeleClientDAO=new ModeleClientDAO();
    		modeleClientDAO.supprimerClient(idClientEnCours);
    		return SUCCESS;
    	}
     
     
    }

    ClientAction-Ajouter_Client-validation.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!DOCTYPE validators PUBLIC
            "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
     
    <validators>
        <field name="client.identifiant">
        	<field-validator type="requiredstring">
                <message>Le champ identifiant est obligatoire</message>
            </field-validator>
        	<field-validator type="stringlength">
        		<param name="minLength">4</param>
        		<param name="maxLength">10</param>
                <message>Le champ identifiant doit avoir entre 4 et 10 caracteres</message>
            </field-validator>
        </field>
        <field name="client.motdepasse">
        	<field-validator type="requiredstring">
                <message>Le champ mot de passe est obligatoire</message>
            </field-validator>
        </field>
    </validators>

    ClientAction-Modifier_Client-validation.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!DOCTYPE validators PUBLIC
            "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
            "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
     
    <validators>
        <field name="client.identifiant">
        	<field-validator type="requiredstring">
                <message>Le champ identifiant est obligatoire</message>
            </field-validator>
        	<field-validator type="stringlength">
        		<param name="minLength">4</param>
        		<param name="maxLength">10</param>
                <message>Le champ identifiant doit avoir entre 4 et 10 caracteres</message>
            </field-validator>
        </field>
        <field name="client.motdepasse">
        	<field-validator type="requiredstring">
                <message>Le champ mot de passe est obligatoire</message>
            </field-validator>
        </field>
    </validators>

    ApplicationListener.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    package exemple15.boiteoutils;
     
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.sql.DataSource;
     
    public class ApplicationListener implements ServletContextListener{
     
    	Context context=null;
     
    	//fonction appelée lors de la création du lanceur
    	public void contextInitialized(ServletContextEvent servletContextEvent) 
    	{
    		ServletContext servletContext=servletContextEvent.getServletContext();
    		String dataSourceJNDI=servletContext.getInitParameter("dataSourceJNDI");
     
    		try
    		{
    			context=new InitialContext();
    			DataSource dataSource=(DataSource)context.lookup(dataSourceJNDI);
    			if(dataSource==null)
    			{
    				System.out.println("Il n'y a pas de DataSource pour le projet : exemple15");
    			}
    			else
    			{
    				System.out.println("DataSource : exemple15 charge !");
    			}
    			servletContext.setAttribute("dataSource", dataSource);
    		}
    		catch(NamingException e)
    		{
    			throw new RuntimeException();
    		}
    		finally
    		{
    			try
    			{
    				//fermer le context
    				if(context!=null)
    				{
    					context.close();
    				}
    			}
    			catch(Exception e)
    			{
    				System.out.println("Erreur lors de initCtx !");
    			}
    		}
    	}
     
     
    	//fonction appelée lors de la destruction du lanceur
    	public void contextDestroyed(ServletContextEvent servletContextEvent)
    	{
    		try
    		{
    			//fermer le context
    			if(context!=null)
    			{
    				context.close();
    			}
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur lors de initCtx !");
    		}
    	}
    }

    GestionBaseDeDonnees.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package exemple15.boiteoutils;
     
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
     
    public class GestionBaseDeDonnees
    {
    	// Permet de fermer un resultset
    	public static void closeResulset(ResultSet resultat)
    	{
    		if(resultat!=null)
    		{
    			try
    			{
    				resultat.close();
    			}
     
    			catch(Exception e)
    			{
    				System.out.println("Erreur lors de la fermerture d'une connexion d'un resultset");
    			}
    		}
    	}
     
    	// Fermeture d'une requête 
    	public static void closeRequest(Statement requete)
    	{
    		if(requete!=null)
    		{
    			try
    			{
    				requete.close();
    			}
    			catch(Exception e)
    			{
    				System.out.println("Erreur lors de la fermerture d'une requête");
    			}
    		}
    	}
     
    	// Fermeture d'une connexion 
    	public static void closeConnection(Connection connexion)
    	{
    		if(connexion!=null)
    		{
    			try
    			{
    				connexion.close();
    			}
     
    			catch(Exception e)
    			{
    				System.out.println("Erreur lors de la fermerture d'une connexion");
    			}
    		}
    	}
     
     
    }

    Client.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    package exemple15.javabeans;
     
     
    @SuppressWarnings("serial")
    public class Client {
     
        private int idClient;
    	private String identifiant;
        private String motdepasse;
     
    	public Client(){
     
        }
     
    	public Client(int idClient,String identifiant, String motdepasse){
        	this.idClient=idClient;
        	this.identifiant=identifiant;
        	this.motdepasse=motdepasse;
        }
     
     
    	public int getIdClient() {
    		return idClient;
    	}
     
    	public void setIdClient(int idClient) {
    		this.idClient = idClient;
    	}
     
    	public String getIdentifiant() {
    		return identifiant;
    	}
     
    	public void setIdentifiant(String identifiant) {
    		this.identifiant = identifiant;
    	}
     
    	public String getMotdepasse() {
    		return motdepasse;
    	}
     
    	public void setMotdepasse(String motdepasse) {
    		this.motdepasse = motdepasse;
    	}
     
     
    }

    DAO.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    package exemple15.modeles;
     
    import java.sql.Connection;
     
    public interface DAO {
     
    	// Définition de la méthode à déclarer dans les classes utilisatrices 
    	public Connection getConnection();
    }

    ModeleClientDAO.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    package exemple15.modeles;
     
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.ArrayList;
    import java.util.List;
    import exemple15.boiteoutils.GestionBaseDeDonnees;
    import exemple15.javabeans.Client;
     
     
    public class ModeleClientDAO extends ModeleDAO{
     
    	// Variables
    	Connection connexion=null;
    	ResultSet resultat=null;
    	private static List<Client> listeClients;
     
     
     
        // retourner la liste des clients
    	public List<Client> getListeClient()
    	{	
    		// Variables
    		PreparedStatement requete=null;
    		Client client=null;
    		String requeteString=null;
    		listeClients=new ArrayList<Client>();
     
    		try
    		{			
    			// Ouverture d'une connexion
    			connexion=super.getConnection();
     
    			// requete pour la liste des clients
    			requeteString="SELECT * FROM client WHERE 1 ORDER BY idClient";
    			requete=connexion.prepareStatement(requeteString);
     
    			// Execution de la requête
    			resultat=requete.executeQuery();
     
    			// On stocke le resultat dans une liste
    			if(resultat!=null)
    			{
    				while(resultat.next())
    				{
    					// On effectue le mapping des attributs avec les champs de la table SQL
    					client=mapperClient(resultat);
     
    					// On ajoute l'objet a la liste des clients
    					listeClients.add((Client)client);
    				}
    			}
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients");
    		}
    		finally
    		{
    			try
    			{
    				// Fermeture de la connexion
    				if(resultat!=null)
    				{
    					GestionBaseDeDonnees.closeResulset(resultat);
    				}
    				if(requete!=null)
    				{
    					GestionBaseDeDonnees.closeRequest(requete);
    				}
    				if(connexion!=null)
    				{
    					GestionBaseDeDonnees.closeConnection(connexion);
    				}
    			}
    			catch(Exception ex)
    			{
    				System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction getListeClients");
    			}	
    		}
     
    		// Retourner la liste des clients
    		return listeClients;
    	}
     
     
     
    	// trouver un client dans la base
    	public Client getClient(int idClient) 
    	{
    		// Variables
    		PreparedStatement requete=null;
    		Client client=null;
    		String requeteString=null;
     
    		try
    		{
    			// Ouverture d'une connexion
    			connexion=super.getConnection();
     
    			// Création de la requête
    			requeteString = "SELECT * FROM client WHERE idClient=?";
     
    			// On prépare la requête
    			requete=connexion.prepareStatement(requeteString);
    			requete.setInt(1,idClient);
     
    			// Execution de la requête
    			resultat=requete.executeQuery();
     
    			// On stocke le resultat dans l'objet client
    			if(resultat!=null)
    			{
    				if(resultat.next())
    				{
    					// On effectue le mapping des attributs avec les champs de la table SQL
    					client=mapperClient(resultat);
    				}
    			}
    		}
    		catch(Exception e)
    		{
    			client=null;
    			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction getClient");
    		}
    		finally
    		{
    			try
    			{
    				// Fermeture de la connexion
    				if(resultat!=null)
    				{
    					GestionBaseDeDonnees.closeResulset(resultat);
    				}
    				if(requete!=null)
    				{
    					GestionBaseDeDonnees.closeRequest(requete);
    				}
    				if(connexion!=null)
    				{
    					GestionBaseDeDonnees.closeConnection(connexion);
    				}
    			}
    			catch(Exception ex)
    			{
    				System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction getClient");
    			}	
    		}
     
    		// Retourner le client
    		return client;
    	}
     
     
     
    	// ajouter un client dans la base
    	public int ajouterClient(Client client) 
    	{
    		// Variables
    		PreparedStatement requete=null;
    		String requeteString=null;
    		int codeErreur=0;
     
    		try
    		{			
    			// Ouverture d'une connexion
    			connexion=super.getConnection();
     
    			// Création de la requête
    			requeteString="INSERT INTO client (identifiant,motdepasse) VALUES(?,?)";
     
    			// Préparation de la requête
    			requete=connexion.prepareStatement(requeteString);
    			requete.setString(1, client.getIdentifiant());
    			requete.setString(2, client.getMotdepasse());
     
    			// On vide le client par sécurité
    			client=null;
     
    			// Execution de la requête
    			codeErreur=requete.executeUpdate();
    		}
    		catch(Exception e)
    		{
    			codeErreur=0;
    			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction ajouterClient");
    		}
    		finally
    		{
    			try
    			{
    				// Fermeture de la connexion
    				if(resultat!=null)
    				{
    					GestionBaseDeDonnees.closeResulset(resultat);
    				}
    				if(requete!=null)
    				{
    					GestionBaseDeDonnees.closeRequest(requete);
    				}
    				if(connexion!=null)
    				{
    					GestionBaseDeDonnees.closeConnection(connexion);
    				}
    			}
    			catch(Exception ex)
    			{
    				System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction ajouterClient");
    			}	
    		}
     
    		// Retourner le code d'erreur
    		return codeErreur;
        }
     
     
     
     
    	// supprimer un client dans la base
    	public int supprimerClient(int idClient) 
    	{
    		// Variables
    		PreparedStatement requete=null;
    		String requeteString=null;
    		int codeErreur=0;
     
    		try
    		{			
    			// Ouverture d'une connexion
    			connexion=super.getConnection();
     
    			// Supprimer le client
    			requeteString="DELETE FROM client WHERE idClient=?";
    			requete=connexion.prepareStatement(requeteString);
    			requete.setInt(1, idClient);
     
    			// Execution de la requête
    			codeErreur=requete.executeUpdate();
    		}
    		catch(Exception e)
    		{
    			codeErreur=0;
    			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction supprimerClient");
    		}
    		finally
    		{
    			try
    			{
    				// Fermeture de la connexion
    				if(resultat!=null)
    				{
    					GestionBaseDeDonnees.closeResulset(resultat);
    				}
    				if(requete!=null)
    				{
    					GestionBaseDeDonnees.closeRequest(requete);
    				}
    				if(connexion!=null)
    				{
    					GestionBaseDeDonnees.closeConnection(connexion);
    				}
    			}
    			catch(Exception ex)
    			{
    				System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction supprimerClient");
    			}	
    		}
     
    		// Retourner le code d'erreur
    		return codeErreur;
    	}
     
     
     
     
    	// modifier un client dans la base
    	public int modifierClient(Client client) 
    	{
    		// Variables
    		PreparedStatement requete=null;
    		String requeteString=null;
    		int codeErreur=0;
     
    		try
    		{			
    			// Ouverture d'une connexion
    			connexion=super.getConnection();
     
    			// Création de la requête
    			requeteString="UPDATE client set identifiant=?,motdepasse=? WHERE idClient=?";
    			requete=connexion.prepareStatement(requeteString);
    			requete.setString(1, client.getIdentifiant());
    			requete.setString(2, client.getMotdepasse());
    			requete.setInt(3, client.getIdClient());
     
    			// On vide le client par sécurité
    			client=null;
     
    			// Execution de la requête
    			codeErreur=requete.executeUpdate();
    		}
    		catch(Exception e)
    		{
    			System.out.println("Erreur dans la requete dans la classe ModeleClientDAO fonction modifierClient");
    		}
    		finally
    		{
    			try
    			{
    				// Fermeture de la connexion
    				if(resultat!=null)
    				{
    					GestionBaseDeDonnees.closeResulset(resultat);
    				}
    				if(requete!=null)
    				{
    					GestionBaseDeDonnees.closeRequest(requete);
    				}
    				if(connexion!=null)
    				{
    					GestionBaseDeDonnees.closeConnection(connexion);
    				}
    			}
    			catch(Exception ex)
    			{
    				System.out.println("Erreur lors de la fermeture de la connexion avec la base de données dans la classe ModeleClientDAO fonction modifierClient");
    			}	
    		}
     
    		// Retourner le code d'erreur
    		return codeErreur;
    	}
     
     
    	// Réaliser la transformation Relationnel vers Objet
        public Client mapperClient(ResultSet resultat)
        {
        	// Variables
        	Client client=new Client();
     
        	try 
        	{	
    	    	if (resultat.getString("idClient")==null)
    	    	{
    	    		client.setIdClient(0);
    	    	}
    	    	else 
    	    	{
    	    		client.setIdClient(resultat.getInt("idClient"));		
    	    	}
     
    	    	if (resultat.getString("identifiant")==null)
    	    	{
    	    		client.setIdentifiant("");		
    	    	}
    	    	else 
    	    	{
    	    		client.setIdentifiant(resultat.getString("identifiant"));	
    	    	}
     
    	    	if (resultat.getString("motdepasse")==null)
    	    	{
    	    		client.setMotdepasse("");
    	    	}
    	    	else 
    	    	{
    	    		client.setMotdepasse(resultat.getString("motdepasse"));
    	    	}		
        	}
            catch (Exception e)
            {
            	//Si il y a une erreur durant le mapping des attributs
    	    	client=null;
    	    	System.out.println("Erreur lors du mapping des attributs d'un client dans la class ModeleClientDAO, fonction mapperClient");
            }
     
            //On retourne le client
            return client;
        }
     
    }

    ModeleDAO.java
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    package exemple15.modeles;
     
    import java.sql.Connection;
    import java.sql.SQLException;
    import javax.servlet.ServletContext;
    import javax.sql.DataSource;
    import org.apache.struts2.ServletActionContext;
     
     
    // Classe de connexion
    public class ModeleDAO  implements DAO
    {	
    	DataSource dataSource=null;
     
    	// Récupérer une connexion
    	public Connection getConnection() 
    	{
    		ServletContext servletContext=ServletActionContext.getServletContext();
    		if(this.dataSource==null)
    		{
    			dataSource=(DataSource)servletContext.getAttribute("dataSource");
    		}
    		Connection connection=null;
    		if(dataSource!=null)
    		{
    			try
    			{
    				connection=dataSource.getConnection();
    			}
    			catch(SQLException e)
    			{
    				System.out.println(e);
    			}
    		}
     
    		// retourner la connexion
    		return connection;
    	}
     
     
    	// Positionner une dataSource
    	public void setConnection(DataSource dataSource)
    	{
    		this.dataSource=dataSource;
    	}
    }

    log4j.properties
    Code :
    1
    2
    3
    4
    5
    #définition du niveau et des Appender du rootLogger (ordre : DEBUG - INFO - WARN - ERROR - FATAL)
    #log4j.logger.freemarker=OFF
    #log4j.logger.com.opensymphony.xwork2=OFF
    #log4j.logger.org.apache=INFO
    #log4j.rootLogger=DEBUG

    struts.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
     
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="false" />
     
        <package name="exemple15" namespace="/" extends="struts-default">
            <default-action-ref name="Lister_Client" />
     
            <action name="Lister_Client" class="exemple15.ClientAction" method="lister">
                <result>/jsp/ListerClient.jsp</result>
            </action>
     
            <action name="Ajouter_Client" class="exemple15.ClientAction" method="ajouter">
                <result name="input">/jsp/ListerClient.jsp</result>
                <result name="success" type="redirectAction">Lister_Client</result>
            </action>
     
            <action name="Editer_Client" class="exemple15.ClientAction" method="editer">
    			<interceptor-ref name="paramsPrepareParamsStack"/>
                <result name="success">/jsp/EditerClient.jsp</result>
            </action>
     
            <action name="Modifier_Client" class="exemple15.ClientAction" method="modifier">
            	<result name="input">/jsp/EditerClient.jsp</result>
                <result name="success" type="redirectAction">Lister_Client</result>
            </action>
     
            <action name="Supprimer_Client" class="exemple15.ClientAction" method="supprimer">
                <result name="success" type="redirectAction">Lister_Client</result>
            </action>
     
        </package>
    </struts>

    styles.css
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    * { margin: 0; padding: 0;}
     
    html, body {
    	margin: 0; 
    	text-align: center; 
    }
     
    #enveloppe 
    {
    	position: relative; 
    	margin-left: 4%;
    	margin-top: 2%;
    	width: 400px;
    	text-align: left; 
    	background:#fefefe;
    	border-style:solid;
    	border-width:1px;
    	border-color:#eaeaea;
    	padding: 14px;
    }
     
    .input
    {
    	width:200px;
    	height:18px;
    	border:1px solid;
    	border-color:#6f6e6e;
    	border-width:1px;
    	border-color:#A8A6A7;
    	color:#686667;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:11px;
    	font-weight: normal;		
     
    }
     
    .inputerreur
    {
    	width:200px;
    	height:18px;
    	border:1px solid;
    	border-color:#6f6e6e;
    	border-width:1px;
    	border-color:#A8A6A7;
    	color:#686667;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:11px;
    	font-weight: normal;
    	background-color:#F00;	
    }
     
    .errorMessage
    {
    	color:#D53A3E;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:13px;
    }
     
    #message_erreur
    {
    	margin-top:16px;
    	margin-bottom:0px;
    	margin-left:40px;
    	padding-bottom:2px;
    	padding-top:2px;
    	padding-left:20px;
    	padding-right:50px;
    	text-align:justify;
    	border-style:solid;
    	border-top-width:1px;
    	border-top-color:#D53A3E;
    	border-right-width:2px;
    	border-right-color:#D53A3E;
    	border-bottom-width:2px;
    	border-bottom-color:#D53A3E;
    	border-left-width:1px;
    	border-left-color:#D53A3E;
    	width:600px;
    }
     
    #message_erreur ul
    {
    	padding-top:0px;
    	margin-top:2px;
    	padding-bottom:0px;
    	padding-right:20px;
    	margin-bottom:0px;
    	margin-left:8px;
    	margin-right:10px;
    	color:#D53A3E;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:13px;
    	font-weight:normal;
    	list-style-image:url(../images/important.gif);
    }
     
    #message_erreur label
    {
    	color:#D53A3E;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:12px;
    	font-weight:bold;
    }
     
    #tableau
    {
    	margin-top:20px;
    	border-style:solid;
    	border-width:1px;
    	border-color:#A8A6A7;
    	background-color:#E8E8E8;
    	color:#686667;
    	font-family:tahoma, verdana, arial, sans-serif;
    	font-size:11px;
    	width:100%;
    }
    .ligne1
    {
    	background-color: #CCCBC6;
    }
    .ligne2
    {
    	background-color: #F5F4F6;
    }

    EditerClient.jsp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>Editer un client</title>
    <style type="text/css">@import url(css/styles.css);</style>
    </head>
    <body>
    <!-- Message d'erreur -->
    <s:if test="errors.size()>0">
    <div id="message_erreur">
    	<label>Les erreurs suivantes se sont produites : </label>
    	<ul><s:fielderror/></ul>
    </div>
    </s:if>
     
    <div id="enveloppe">									
    	<h3>Editer un client</h3>
    	<s:form method="post" action="Modifier_Client">
    		<s:hidden key="client.idClient"/>
    		<s:textfield name="client.identifiant" id="client.identifiant" label="Identifiant" labelposition="top" cssClass="input"/>
    		<s:textfield name="client.motdepasse" id="client.motdepasse" label="Mot de passe" labelposition="top" cssClass="input"/>
    		<s:submit value="Modifier un client"/>
    	</s:form>		
    </div>
    </body>
    </html>

    ListerClient.jsp
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
    <title>Liste des clients</title>
    <style type="text/css">@import url(css/styles.css);</style>
    </head>
    <body>
    <!-- Message d'erreur -->
    <s:if test="errors.size()>0">
    <div id="message_erreur">
    	<label>Les erreurs suivantes se sont produites : </label>
    	<ul><s:fielderror/></ul>
    </div>
    </s:if>
     
    <div id="enveloppe">									
    	<h3>Ajouter un client</h3>
    	<s:form method="post" action="Ajouter_Client">
    		<s:textfield name="client.identifiant" id="client.identifiant" label="Identifiant" labelposition="top" cssClass="input"/>
    		<s:textfield name="client.motdepasse" id="client.motdepasse" label="Mot de passe" labelposition="top" cssClass="input"/>
    		<s:submit value="Ajouter un client"/>
    	</s:form>
     
    	<table border="0" id="tableau" cellpadding="0" cellspacing="0">
    	<tr><td><b>ID</b></td><td><b>Identifiant</b></td><td><b>Mot de passe</b></td><td colspan="2" align="center"><b>Gestion</b></td></tr>
    	<s:iterator value="listeClients" status="ligne">
    	<s:if test="#ligne.odd"><tr class="ligne1"></s:if>
    	<s:if test="#ligne.even"><tr class="ligne2"></s:if>
        	<td><s:property value="idClient"/></td>
        	<td><s:property value="identifiant"/></td>
        	<td><s:property value="motdepasse"/></td>
        	<td align="center"><a href="Editer_Client.action?idClientEnCours=${idClient}"/><img src="images/editerclient.png" alt="Editer" title="Editer" border="0"/></a></td>
        	<td align="center"><a href="Supprimer_Client.action?idClientEnCours=${idClient}"/><img src="images/supprimerclient.png" alt="Supprimer" title="Supprimer" border="0"/></a></td>
      	</tr>
    	</s:iterator>
    	</table>	
    </div>
    </body>
    </html>

    web.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="exemple15" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     
    	<!-- Chargeur du datasource -->
        <listener>
            <listener-class>exemple15.boiteoutils.ApplicationListener</listener-class>
        </listener>
     
    	<!-- Parametre globaux -->
    	<context-param>
            <param-name>dataSourceJNDI</param-name>
            <param-value>java:/comp/env/jdbc_struts2_MySQL</param-value>
        </context-param>
     
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>
     
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
     
        <!-- Informations de connexion a la base de donnees -->
    	<resource-ref>
    		<description>Connexion a la base de donnees MySQL</description>
    		<res-ref-name>jdbc_struts2_MySQL</res-ref-name>
    		<res-type>javax.sql.DataSource</res-type>
    		<res-auth>Container</res-auth>
    	</resource-ref>
     
    </web-app>

    J'essaye de mettre en place un pool de connexion, le fichier qui sert à la déclaration du pool dans le fichier de configuration du projet
    C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\conf\Catalina\localhost\exemple15.xml

    Voici le fichier exemple15.xml:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Context path="/exemple15" reloadable="true"
    docBase="D:\workspace\exemple15">
    	<Resource name="jdbc_struts2_MySQL"
    		auth="Container"
    		type="javax.sql.DataSource"
    		username="root"
    		password="Esprit27"
    		driverClassName="com.mysql.jdbc.Driver"
    		url="jdbc:mysql://localhost:3306/struts2"
    		maxActive="20"
    		maxIdle="10"
    		validationQuery="SELECT 1"/>
    </Context>
    J'utilise Eclipse Java EE, Tomcat 7.0, MySQL 5.5 et j'ai installé le pilote approprié (mysql-connector-java-5.1.19-bin.jar) dans le répertoire /WEB-INF/lib de l'application.

    Mon application se trouve dans le répertoire D:\workspace\exemple15.
    J'ai crée la base de données struts avec la table client et les trois champs dans MySQL.

    Voici le message d'erreur qui s'affiche dans la console d'Eclipse en tapant l'url http://localhost:8080/exemple15/, l'appli sinon s'affiche, mais sans les données:
    Cannot create JDBC driver of class '' for connect URL 'null'
    Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients
    De plus je ne connais pas à priori le nom de mon datasource que l'on retrouve à plusieurs endroits dans le projet (dans web.xml pour le <param-value> et le <res-ref-name> et dans exemple15.xml pour le <Resource name, j'ai mis le nom cité dans l'exemple, mais je ne sais pas ce qui le détermine. Dans l'exemple ils mettent: jdbc_struts2_MySQL, cependant je ne sais pas si on peut mettre ce qu'on veut. Quand j'ai installé MySQL5.5, il m'a demandé de rentrer le nom MySQL55 à un moment donné, faut-il que j'utilise ce nom comme Datasource. De plus on utilise un docBase et workDir dans exemple15.xml et je ne sais pas trop quoi mettre sur ces données, si ce n'est pour le premier le répertoire de mon projet.

    Je vous remercie par avance de votre aide, car je patine un peu en ce moment.

    mumu27

  3. #3
    Membre régulier Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 198
    Points : 86
    Points
    86

    Par défaut

    J'ai regardé d'un peu plus près le problème en fait, j'ai un souci avec la tentative d'ouverture de connexion dans la fonction getListeClient() de la classe ModeleClientDAO.java:
    Code :
    1
    2
    // Ouverture d'une connexion
    connexion=super.getConnection();
    En effet la variable connexion renvoie la valeur null.
    Pour le Datasource, je n'ai pas de souci je pense.
    Voici le message de la console:

    23 avr. 2012 17:07:44 org.apache.catalina.core.AprLifecycleListener init
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files (x86)/Java/jre6/bin/client;C:/Program Files (x86)/Java/jre6/bin;C:/Program Files (x86)/Java/jre6/lib/i386;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\eclipse;;.
    23 avr. 2012 17:07:44 org.apache.tomcat.util.digester.SetPropertiesRule begin
    ATTENTION: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:exemple15' did not find a matching property.
    23 avr. 2012 17:07:44 org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["http-bio-8080"]
    23 avr. 2012 17:07:45 org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
    23 avr. 2012 17:07:45 org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 1597 ms
    23 avr. 2012 17:07:45 org.apache.catalina.core.StandardService startInternal
    INFO: Démarrage du service Catalina
    23 avr. 2012 17:07:45 org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/7.0.16
    DataSource : exemple15 charge !
    log4j:INFO Using URL [file:/D:/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/exemple15/WEB-INF/classes/log4j.properties] for automatic log4j configuration of repository named [default].
    23 avr. 2012 17:07:49 org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["http-bio-8080"]
    23 avr. 2012 17:07:49 org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler ["ajp-bio-8009"]
    23 avr. 2012 17:07:49 org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3994 ms
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    Erreur dans la requete dans la classe ModeleClientDAO fonction getListeClients:
    23 avr. 2012 17:08:05 org.apache.jasper.compiler.TldLocationsCache tldScanJar
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned where no TLDs were found. Skipping JAR scanning can improve startup time and JSP compilation time.
    Cannot create JDBC driver of class '' for connect URL 'null'
    java.lang.NullPointerException
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
    ...
    Merci d'avance pour votre aide, si quelqu'un a une piste.

    mumu27

  4. #4
    Membre régulier Avatar de mumu27
    Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 198
    Points : 86
    Points
    86

    Par défaut

    J'ai trouvé le problème, en faît il faut éditer le fichier context.xml de tomcat intégré à eclipse.

    Ajouter entre les balises Context de début et de fin du fichier le code suivant :

    <Resource name="jdbc_struts2_MySQL"
    auth="Container"
    type="javax.sql.DataSource"
    username="root"
    password="Esprit27"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/struts2"
    maxActive="20"
    maxIdle="10"
    validationQuery="SELECT 1"/>

    Voilà, en espérant que cela aide quelqu'un.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2012
    Messages : 91
    Points : 24
    Points
    24

    Par défaut

    bonsoir,
    j'ai un problème de connexion mysql tomcat axis avec eclipse
    svp dite moi quelles sont les étapes à suivre pour réaliser la connexion.
    merci d'avance.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •