Bonjour,
je suis en train d'apprendre à me connecter à une base de données à l'aide d'un bouquin. On y présente plusieurs méthodes dont certaines marchent mais on préconise l'usage de JNDI.
J'ai recopié le code et adapté un peu à mon environnement. En gros c'est pareil sauf la chaine de connexion (il y a un cj en plus dans le nom de la classe à charger et le nom de la DB est différent) et la requête SQL effectuée.
Ce qui se passe c'est que je n'ai aucun retour d'erreur et aucune réaction. J'ai beau mettre des sorties sur la page ou la console, rien ne se passe ce qui suggère que l'on ne rentre pas dans le try with ressources qui initie l'objet Connection.
Je ne comprends pas pourquoi.
Je ne sais pas si mon code de traitement est plus ou moins correct mais ce qui me préoccupe dans un premier temps c'est bien cette connexion. Pourquoi rien ne se passe ? Le même Context.xml à été utilisé un peu plus tôt en fournissant un message à l'écran qui affiche connexion ouverte et qui renvoi le nom de la classe comme demandé. Donc pas d'erreur au niveau du Context.xml à priori. C'est configuré comme il faut.
J'ai aussi essayé de déboguer en lançant en mode débugger mais ça ne s'arrête pas à mes points d'arrêt. Comment on débogue une application Java EE ?
Je copie mon code du doGet() ici:
Code Java : 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 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); String str = "Served at: "+request.getContextPath()+"\n"; out.append(str); System.out.println(str); response.setContentType("text/plain"); try { Context context = new InitialContext(); String jndiName = "jdbc/pool_bookcollection" ; DataSource dataSource = (DataSource)context.lookup("java:com/env/"+jndiName); try (Connection cnx = dataSource.getConnection()){ System.out.println("DB USED: "+cnx.getCatalog()); System.out.println("Connexion "+(cnx.isClosed()?"fermée":"ouverte")); out.println("Data Source: "+dataSource.getClass().getName()); // Traitement de requête pour plus tard } } catch (SQLException|NamingException e) { e.getMessage(); }
Voilà une copie d'écran de la console après avoir rafraîchi la page. Je n'y comprend plus rien. La "truc" d'affiche mais la ligne avec "DATASOURCE: " ne s'affiche pas... alors qu'ils sont dans le même bloc de code...
Si je déplace la dite ligne juste au dessus dealors elle s'affiche.
Code Java : Sélectionner tout - Visualiser dans une fenêtre à part DataSource dataSource = (DataSource)context.lookup("java:com/env/"+jndiName);
Voilà le contenu du Context.xml:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/pool_bookcollection" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="user" password="************" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost/bookcollection"/> </Context>
Le serveur est TomCat v9.0
Merci.
Partager