IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Struts/mysql connection impossible


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut Struts/mysql connection impossible
    Bonjour à tous,
    j'ai toruvé plusieurs problèmes similaires sur le fofo mais rien de bien clair alors je vais essayer de formuler mon probleme de la façon la plus précise possible.

    Je souhaite reprendre des Tp que j'ai déjà fais sous struts, mais en utilisant netbean, et sous un OS windows xp.
    Il n'est pas souhaité d'utiliser un pool de connection via les datasources, j'ai donc repris le tp ou l'on faiait une connection "mnauelle"

    J'ai installé la library .jar pour le driver sql:
    mysql-connector-java-5.0.6-bin.jar

    Voici le code que j'ai rajouté:
    context.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Context path="/monsite">
      <Resource name="jdbc/myDB" auth="Container"
             type="javax.sql.DataSource" 
             username="root" 
             password=""
             driverClassName="com.mysql.jdbc.Driver"
             url="jbdc:mysql://localhost:3306/mabase/"
             maxActive="10" maxIdle="4"/>
    </Context>
    web.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <web-app 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">
     
    <!--le début de la config qui fonctionne...-->
     
    <resource-ref>
            <description>
                Access to YourDB
            </description>
            <res-ref-name>
                jdbc/myDB
            </res-ref-name>
            <res-type>
                javax.sql.DataSource
            </res-type>
            <res-auth>
                Container
            </res-auth>
        </resource-ref>
    </web-app>
    l'action associé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class loginAction extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm  form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
     
            loginForm actionForm = (loginForm)form;
     
            Connection conn = null;
            Statement stmt = null;
            ResultSet rs = null;
            String login = actionForm.getLogin();
            String password = actionForm.getPassword();
            ActionMessages errors = new ActionMessages();
     
            try {
     
                // Obtain our environment naming context
                Context initCtx = new InitialContext();
                Context envCtx = (Context) initCtx.lookup("java:comp/env");
     
                // Look up our data source
                DataSource ds = (DataSource) envCtx.lookup("jdbc/myDB");
     
                // Allocate and use a connection from the pool
                conn = ds.getConnection();
     
                // Fetch and display data
                stmt = conn.createStatement();
                String requete = "Select identifiant, mot_de_passe from utilisateurs where identifiant=`"+login+"` and mot_de_passe=`"+password+"`";
                // SQL code
                rs = stmt.executeQuery(requete);
                if (rs.next()) {
     
                    //il ya un resultat (ou plus)
                    HttpSession session = request.getSession(true);
                    session.setAttribute("authentified", new Boolean(true) );
     
                    return (mapping.findForward("success"));
                }else{
                    errors.add("login",new ActionMessage("error.login.invalid"));
                    saveErrors(request,errors);
                    return (mapping.findForward("failure"));
                }
            // Make sure we do not close it twice
            } catch (SQLException e) {
                System.out.print("database exception:\n"+e);
                errors.add("login",new ActionMessage("error.DBerror"));
                saveErrors(request,errors);
                return (mapping.findForward("failure"));
            }finally {
                // Always make sure result sets and statements are closed,
                // and the connection is returned to the pool
                if (rs != null) {
                    try { rs.close(); } catch (SQLException e) { ; }
                    rs = null;
                }
                if (stmt != null) {
                    try { stmt.close(); } catch (SQLException e) { ; }
                    stmt = null;
                }
                if (conn != null) {
                    try { conn.close(); } catch (SQLException e) { ; }
                    conn = null;
                }
            }                                    
        }
    }
    Il se trouve qu'il ya échec sur la connection car la vue retournée affiche un message d'erreur error.DBerror. Le code ci-dessou est donc exécuté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    catch (SQLException e) {
                System.out.print("database exception:\n"+e);
                errors.add("login",new ActionMessage("error.DBerror"));
                saveErrors(request,errors);
                return (mapping.findForward("failure"));
    Mon premier probleme est que je ne sais pas ou trouver le réultat de l'affichage "System.out.print(e);" donc il m'est impossible de voir lerreur. J'ai cherché dans le dossier log mais aucune ligne ne concernant ce probleme n'est présente(C:\Documents and Settings\user\.netbeans\5.5\apache-tomcat-5.5.17_base\logs), donc pour le moment impossible de vous afficher le trace exact.

    Sinon il se pourrait que se soit ma config de la base qui est mal faite (le code étant repris et fonctionnant sur mon lieu de travail).
    Mysql est installé avec WAMP. Le fichier my(WAMP).ini contient une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    # ----------------------------------------------------------------------
    #
    # The following options will be read by MySQL client applications.
    # Note that only client applications shipped by MySQL are guaranteed
    # to read this section. If you want your own MySQL client program to
    # honor these values, you need to specify it as an option during the
    # MySQL client library initialization.
    #
    [client]
    port=3306
    #...
    # The TCP/IP Port the MySQL Server will listen on
    port=3306
    d'où le url="jbdc:mysql://localhost:3306/mabase/" (en enlevant le 3306 ça déconne quand même).

    J'aimerais donc avoir un peu d'aide là dessus car j'ai beau chercher ya un truc qui va pas
    A mons ais et comme je l'ai déjà dit, ça vient de la config pour la base car le reste n'est que du copier coller du code qui fonctionnait déjà...
    Si quelqu'un a une solution ou un indice pour me mettre sur la piste.

    en vous remerkiant

    edit: je n'ai rien touché dans l'admin de tomcat, ni au niveau datasource, ni au niveau userdatabase. D'après ce que j'ai compris, la seule configuration des fichiers ci desssus suffit et il n'ets pas nécessaire d'en définir plus. ai-je tort?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut
    Bon ben e n'arrive toujours pas a régler mon probleme

    J'ai rajouté dans la catégorie runtime la base en question (http://db.netbeans.org/), et elle est accessible.

    Il ya donc un probleme au niveau de la config au niveau struts, mais je ne sais pas d'ou ça vient :'(

    "Help me if you can i'm feeling down" comme disaient les beattles


    edit: j'ai trouvé un tuto pas mal (http://www.netbeans.org/kb/55/mysql-webapp.html) mais le probleme c'est qu'ils utilisent un pool de connection. Or je ne veut pas utiliser de pool mais une connection manuelle :/

    Sinon concernant les exceptions, j'ai ça:
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

    avec le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    System.out.print("contexte\n");
                // Obtain our environment naming context
                Context initCtx = new InitialContext();
                Context envCtx = (Context) initCtx.lookup("java:comp/env");
                System.out.print("datasource\n");
                // Look up our data source
                DataSource ds = (DataSource) envCtx.lookup("jdbc/myDB");
     
                System.out.print("connexion\n");
                // Allocate and use a connection from the pool
                conn = ds.getConnection();
     
                // Fetch and display data
                stmt = conn.createStatement();
                //String requete = "select identifiant, nom, prenom from utilisateurs where identifiant=`"+login+"` and mot_de_passe=`"+password+"`";
                String requete = "select * from utilisateurs";
                System.out.print("requete: "+requete+"\n");
                // Your SQL code here !
                rs = stmt.executeQuery(requete);
                System.out.print("execution requete\n");
    J'ai les messages suivants affichés dans la console:
    debut
    contexte
    datasource
    connexion
    exception caugh
    database exception:
    org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Par défaut
    Pour communiquer avec la base tu utilse l'api jdbc (Struts c'est pour autre chose).
    As tu bien installer ton driver jdbc en l'ajoutant dans le classpath?
    pour le tester, fais juste un main avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    try{
        Class.forName(com.mysql.jdbc.Driver); 
    }catch(ClassNotFoundException e){
       e.printStackTrace();
    }

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Même remarque : "Cannot load JDBC driver class 'com.mysql.jdbc.Driver'" pour moi ça veut dire que le driver jdbc mysql n'est pas dans le classpath ...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 331
    Par défaut
    Il n'est pas souhaité d'utiliser un pool de connection via les datasources, j'ai donc repris le tp ou l'on faiait une connection "mnauelle"
    Par contre je ne m'y connais pas trop, mais il me semble justement que tu utilise une Datasource.Es tu sur de l'initialisation de la datasource ("java:comp/env ")

    Sinon pour utiliser une Datasource avec Struts, tu dois faire un truc du style
    getDataSource(request).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 105
    Par défaut
    Bonjour à tous.
    Oui comme tu l'a souligné j'utilisait un pool de connection (-_-)
    je pensais que ct uniquement avec les balises datasource. Visblement le truc que j'essayais d'utiliser est un pool géré par struts et les balises datasrouces servent a créer un pool géré par tomcat.
    Au final j'ai bien réussi à me connecter.
    Le code a utiliser ts donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Class.forName("com.mysql.jdbc.Driver");
                Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mabase?user=root?pass= toto"); 
     
                //creation de la requete:
                stmt = conn.createStatement();
                String requete = "select ...;";
                rs = stmt.executeQuery(requete);
                if (rs.next()) {....}
    conn.close();
    Il peut y avoir des problemes si le driver jbdc n'est pas installé ou sil ya une erreur de syntaxe au niveau de l'appel à la base.

    Pour faire le test sous netBean allez dans l'onglet runtime (à coté de l'onglet project)> databases>drivers > new driver, et allez chercher le .jar requis qui devrait "s'installer" tout seul comme un grand.
    Une fois le driver installé, clic droit dessus et "connect using" et rentrez les infos necessaires, puis clic sur ok. Si tout va bien vou accederez à l'onglet advanced, sans message derreur, et votre base de données sera visible depuis netbean juste en desssous (clic droit>connect, si necessaire)

    Normalement ça devrait fonctionner. Pour ma part j'avais aussi rajouté la library dans l'onglet projects>monprojet>libraries, clic droit et "add library" où vous recherchez aussi le .jar
    voilà et encore merci

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

Discussions similaires

  1. JBOSS et Mysql Serveur : Impossible de se connecter à la BDD
    Par cryosore94 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 21/03/2009, 19h10
  2. [Delphi 2006][Mysql 4.0.24] connection impossible
    Par vincentj dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/03/2006, 16h05
  3. Réponses: 20
    Dernier message: 13/01/2006, 20h42
  4. mysql connection impossible
    Par BSD54 dans le forum Outils
    Réponses: 6
    Dernier message: 10/10/2005, 18h28
  5. [SGBD] PHP et MYSQL "Connection Impossible"
    Par saidus dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/10/2005, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo