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

Tomcat et TomEE Java Discussion :

[Debutant]Connection a une Base de Donnees: NullPointerException


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut [Debutant]Connection a une Base de Donnees: NullPointerException
    Bonjour,
    J'utilise Eclipse 3.2 et Tomcat 5.5. J'ai developpe une premiere application toute simple, avec une requete a une base de donnees. Probleme, j'aiune exception a l'execution: NullPointerException, a la ligne ou je fais: con = ds.getConnection();. Mon application s'appelle test.

    Voila les morceaux interressants de mon server.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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     <GlobalNamingResources>
        <Environment
          name="simpleValue"
          type="java.lang.Integer"
          value="30"/>
        <Resource
          name="SRDemoDS"
          type="javax.sql.DataSource"
          password="oracle"
          driverClassName="oracle.jdbc.OracleDriver"
          maxIdle="2"
          maxWait="5000"
          username="srdemo"
          url="jdbc:oracle:thin:@ifs_alpha:1521:A1"
          maxActive="4"/>
       </GlobalNamingResources>
       <Service
          name="Catalina">
    ...
       <Engine
            defaultHost="localhost"
            name="Catalina">
          <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
          <Host
              appBase="webapps"
              name="localhost">
            <Context
                path="/test">
              <Resource
                auth="Container"
                description="reference to SRDemo DB for testing connection"
                name="SRDemoDS"
                type="javax.sql.DataSource"/>
            </Context>
          </Host>
        </Engine>
      </Service>
    </Server>
    Voici mon 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" 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">
            <display-name>test</display-name>
            <servlet>
            <servlet-name>ServletTest</servlet-name>
            <servlet-class>bison.romain.servlets.test.ServletTest</servlet-class>
            <init-param>
                <param-name>defaultNom</param-name>
                <param-value>inconnu</param-value>
            </init-param>
            <init-param>
                <param-name>defaultAge</param-name>
                <param-value>XXX</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>ServletTest</servlet-name>
            <url-pattern>/ServletTest</url-pattern>
            </servlet-mapping>
            <resource-ref>
                    <description>
                            reference to SRDemo DB for testing connection
                    </description>
                    <res-ref-name>
                            SRDemoDS
                    </res-ref-name>
                    <res-type>
                            javax.sql.DataSource
                    </res-type>
                    <res-auth>
                            Container
                    </res-auth>
            </resource-ref>
    </web-app>
    Et voici mon code:

    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
    68
    69
     
    public class ServletTest
    extends HttpServlet {
    // paramètres d'instance
    private String defaultNom = null;
    private String defaultAge = null;
    //init
    public void init() {
    // on récupère les paramètres d'initialisation de la servlet
    ServletConfig config = getServletConfig();
    defaultNom = config.getInitParameter("defaultNom");
    }
     
    private DataSource ds;
     
    //GET
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    // on récupère les paramètres du formulaire
    String nom = request.getParameter("txtNom");
    String age = request.getParameter("txtAge");
     
    Connection con=null;
    Statement s=null;
    ResultSet rs=null;
     
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println(
    "<html>"+
    "<body>");
     
    try {
    //	récupération de la Connection depuis le DataSource
    	con = ds.getConnection();
    	s = con.createStatement();
    	rs = s.executeQuery("SELECT * FROM users");
    	while (rs.next()) {
    	out.println(rs.getString(4) + " ");
    	out.println(rs.getString(5) + "<br/>");
    	}
    	} catch (SQLException e) {
    	response.sendError(500, "Exception on DB access " + e);
    	}finally {
    	if (rs != null)
    	{
    	try {
    	rs.close();
    	} catch (SQLException e) {}
    	rs = null;
    	}
    	if (s != null) {
    	try {
    	s.close();
    	} catch (SQLException e) {}
    	s = null;
    	}
    	if (con != null) {
    	try {
    	con.close();
    	} catch (SQLException e) {}
    	con = null;
    	}
    	}
     
    out.println(
    "<center>"+
    ...
    )
    }}
    Voila. sinon, je pense que les parametres de ma datasource sont corrects puisque j'y accede d'une autre facon et ca fontionne. est-ce qu'il manque quelque chose?

    Merci

  2. #2
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Oui bien sur, je ne recupere pas le datasource dans init. je corrige ca et j'essaye.

  3. #3
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Ouin, j'ai une autre erreur a l'execution maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    HTTP Status 500 - Exception on DB access org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
     
    --------------------------------------------------------------------------------
     
    type Status report
     
    message Exception on DB access org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
     
    description The server encountered an internal error (Exception on DB access org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null') that prevented it from fulfilling this request.
    Voici ce que j'ai mis dans mon init:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    try {
    	Context initCtx = new InitialContext();
    	ds = (DataSource) initCtx.lookup("java:comp/env/SRDemoDS");
    	} catch (Exception e) {}
    Avez-vous deja rencontre le meme probleme?

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Le driver est-il dans common/lib de tomcat?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  5. #5
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Je viens de mettre dans common/lib les derniers commons-collections, commons-pool et commons-dbcp que j'ai telecharges sur le site d'apache. j'ai arrete et redemarre tomcat. mais ca ne change rien

  6. #6
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Oui mais le drive Oracle, il y est lui ???
    Tu fais appel à une DataSource configurée dans Tomcat, donc ta webapp n'a pas besoin d'avoir le driver oracle mais c'est Tomcat qui doit l'avoir dans son repertoire common/lib.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  7. #7
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    En effet, j'y avais pas trop pense.
    Dans common/lib j'ai ojdbc14.jar et ojdbc14dms.jar. Ce ne sont pas ca les drivers?

  8. #8
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    ben si, le premier suffit normalement.

    Par contre, ne met pas des exceptions vides, c'est le meilleur moyen de ne pas comprendre ce qui ne va pas (cf. init )
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  9. #9
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    J'ai essaye autrement, en me connectant a la base dans un jsp:

    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
         <sql:setDataSource dataSource="SRDemoDS" />
     
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
            <html>
            <body>
     
            <table border='1'>
     
           <sql:query var="qryPosts" >
                      SELECT USER_ID, USER_ROLE FROM USERS
              </sql:query>
     
           <c:forEach var="row" items="${qryPosts.rows}">
    	        <tr>
                   <td><c:out value="${row.USER_ID}" /></td>
                      <td><c:out value="${row.USER_ROLE}" /></td>
    	        </tr>
              </c:forEach>
            </table>
     
            </body>
            </html>
    et j'ai encore le meme probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.servlet.ServletException: Unable to get connection, DataSource invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
    J'avais aussi rajoute un context.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Context>
       <Resource name="SRDemoDS" auth="Container"
           type="javax.sql.DataSource" 
           username="srdemo" password="oracle"
           driverClassName="oracle.jdbc.driver.OracleDriver"
           url="jdbc:oracle:thin:@ifs_alpha:1521:A1" 
           maxActive="8"    /> 
    </Context>
    et au passage j'ai change de driver: oracle.jdbc.driver.OracleDriver

    auriez-vous d'autres idees...?

    Merci

  10. #10
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Il faut regarder les traces et les exception que tu obtiens...
    La première méthode que tu as employée est plus propre au niveau architecture donc je te conseille de rester là-dessus, d'autant plus que ça ne changera rien à ton problème.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  11. #11
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    Ou puis-je voir des traces en detail? dans catalina.out rien ne s'affiche. j'ai lu qu'on pouvait mettre des debug="x" dans les fichiers de configuration, mais ca n'a rien change

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <Context
                path="/test">
              <Resource
                auth="Container"
                description="reference to SRDemo DB for testing connection"
                name="SRDemoDS"
                type="javax.sql.DataSource"
                debug="9"/>
              debug="9"
            </Context>

  12. #12
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Tu le lances comment Tomcat ? Par Eclipse ou par l'icone du systray car sinon tu peux le lancer en ligne de commande (en aillant vérifié qu'il n'est pas lancé par ailleurs). Dans son répertoire bin tu trouveras startup.bat normalement.
    Si tu n'as rien dans le fichier catalina.out effectivement c'est plus dur... mais normalement par défaut tu dois voir les traces classiques.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  13. #13
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    La je developpe avec Eclipse 3.2 sous Windows, et Tomcat 5.5 sous Unix sur une autre machine. La base de donnees est sur une troisieme machine. Donc je lance Tomcat en ligne de commande sous Unix.

  14. #14
    Membre du Club Avatar de Romain93
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 50
    Points
    50
    Par défaut
    J'ai utilise un context.xml au lieu de mettre les infos de ma base dans server.xml, et ca marche mieux
    merci a Laurent.B pour ses reponses!

  15. #15
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bien, tant mieux
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/04/2008, 14h34
  2. Réponses: 5
    Dernier message: 19/10/2006, 14h28
  3. connecter a une base de donnee distante
    Par adgabd dans le forum Delphi
    Réponses: 14
    Dernier message: 16/08/2006, 15h19
  4. [C# 2.0] Comment se connecter à une base de données SQL Server ?
    Par prince_antonio dans le forum Accès aux données
    Réponses: 5
    Dernier message: 14/07/2006, 11h44
  5. [VB6]Connection à une base de données Oracle
    Par Zoilus dans le forum VB 6 et antérieur
    Réponses: 25
    Dernier message: 08/04/2004, 10h51

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