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] Struts et DataSource


Sujet :

Struts 1 Java

  1. #1
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut [Struts] Struts et DataSource
    Bonjour,

    Je débute avec J2EE...
    ....et encore plus avec Struts !

    Voilà, j'ai écrit en J2EE une classe de connexion à ma base de données contenant une méthode comme celle-ci :

    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
     
    public Connection connection() {
        Connection con = null;
        String hostName = "localhost:3306";
        String serverName = "dbtest";
        String user = "root";
        String password = "";
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            String url = "jdbc:mysql://" + hostName + "/" + serverName;
            con = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            System.out.println("Problème de connexion");
        }
        return con;
    }
    Cette application fonctionne correctement, en J2EE !

    Or je veux maintenant utiliser les pull de connection Struts.
    Mais sans trop modifier mon code pour l'instant !

    Pour cela, j'ai défini dans mon struts-config.xml ceci :

    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
     
    <data-sources>
        <data-source key="madb" type="org.apache.commons.dbcp.BasicDataSource">
                <set-property
                    property="driverClassName"
                    value="com.mysql.jdbc.Driver" />
                 <set-property
                    property="url"
                    value="jdbc:mysql://localhost:3306/dbtest" />
                 <set-property
                    property="username"
                    value="root" />
                 <set-property
                    property="password"
                    value="" />
                <set-property
                    property="maxActive"
                    value="10" />
                <set-property
                    property="maxWait"
                    value="5000" />
                <set-property
                    property="defaultAutoCommit"
                    value="false" />
              </data-source>
    </data-sources>
    et je veux changer ma méthode de connexion.
    Mon problème est ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public Connection connection() {
        DataSource ds = null;
        Connection cnx = null;
        try {
            ds = getDataSource(request, "madb");
            cnx = ds.getConnection();
        } catch (Exception e) {
            System.out.println("Problème de connexion");
        }
        return cnx;
    }
    je veux garder la structure de mon programme, et donc ma méthode de connexion.
    Or, les exemples d'utilisation des DataSources impose le codage dans les requests !!!
    et moi, je n'en ai pas dans cette méthode !!!
    Comment faire pour y arriver ?

    [ Modéré par SEMPERE Benjamin ]
    Modification du titre
    Les Règles du Forum

  2. #2
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Dans ton appli, tu dois avoir au moins une servlet qui contient l'objet "request".

    Dans cette servlet, tu initialise ton DataSource qui doit être un attribut d'une classe Singleton (aide : http://smeric.developpez.com/java/uml/singleton/).

    Comme ca, lorsque tu récupère l'instance de te classe Singleton, tu a toujours accès à ton dataSource n'imoprte ou !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Accéder à ta classe singleton de manière statique
    DataSource tonDataSource = TaClasseSingleton.getTonDataSource():
    //récupération d'une connexion
    Connection conn = tonDataSOurce.getConnection();

  3. #3
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Merci pour ta réponse, mais peux-tu m'en dire un peu plus ?

    Effectivement, la classe dans laquelle j'ai ma méthode connection() est un singleton.

    Mais je ne vois pas trop où et comment faire ce que tu me dis !

  4. #4
    Membre averti Avatar de danyboy85
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 312
    Points
    312
    Par défaut
    Tu crée une classe Singleton :

    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
     
    public class AccesBD {
     
        //Attributs
        private static AccesBD instance;
        private DataSource ds = null;
     
        //Constructeur
        private AccesBD() {
        }
     
        //Méthodes
        public static AccesBD getInstance() {
            if (null == instance) { // Premier appel
                instance = new AccesBD();
            }
            return instance;
        }
     
       //Getters et Setters
        public DataSource getDs() {
            return ds;
        }
        public void setDs(DataSource ds) {
            this.ds = ds;
        }
    }
    Le point d'entrée de ton appli doit être une servlet ou tu ne passe qu'une fois (tu peux aussi faire un page index.html qui redirige vers cette servlet, qui elle redirige vers une nouvelle page). L'important c'est que tu ne passe qu'une seule fois dans la servlet.

    Dans celle-ci tun initialise ton dataSource :

    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
     
    public class IndexAction extends Action {
     
     
        public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
     
            String cible = new String("echec");
     
     
            DataSource ds;
            try {
                ds = getDataSource(request,"monDataSource");
                cible = "succes";
                AccesBD.getInstance().setDs(ds);
            } catch (Exception e) {
                cible = "echec";
                System.out.println("Erreur lors de la création du DataSource. Veuillez vérifier les paramètres de connexion à la base de données dans le fichier struts-config.xml");
            }
     
     
     
            // Transmission à la vue appropriée
            return (mapping.findForward(cible));
        }
    }
    puis dans tes méthodes qui ont besoin d'un accès à la base de données, tu accède à ton singleton de manière statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection conn = AccesBD.getInstance().getDs().getConnection();
    Voila je crois que j'ai tout dis...

  5. #5
    Membre habitué Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Points : 135
    Points
    135
    Par défaut
    Ca fonctionne impec.

    Merci beaucoup danyboy85

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

Discussions similaires

  1. Problème avec Struts 1 et dataSource
    Par amine1980 dans le forum Struts 1
    Réponses: 0
    Dernier message: 21/03/2015, 04h05
  2. [DataDource][Struts][Tomcat] Pb DataSource
    Par hepsilonz dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 17/01/2007, 22h24
  3. [Struts][struts-config.xml] question sur l element action
    Par SEMPERE Benjamin dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/10/2004, 16h25
  4. [struts]: struts-config.xml
    Par sleepy2002 dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/10/2004, 10h32
  5. Réponses: 3
    Dernier message: 02/09/2004, 11h26

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