Bonjour,
Meilleurs vœux tout d'abord !
Voici ce qui m'amène : je souhaiterais créer une page jsp rudimentaire permettant de visualiser les données présentes dans une table d'une base postgresql via jdbc, le tout déployé sous Tomcat 8.
Mon 1er test utilise les instructions suivantes pour la connexion (extrait) :
Ici pas de problème, le contenu de ma table est bien affiché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Class.forName("org.postgresql.Driver"); Connection cn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres?user=postgres&password=admin");
Mon 2nd test utilise cette fois la notion de contexte :
J'ai au préalable mis à jour les fichiers server.xml et context.xml (présents dans C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf) comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/mydb1"); Connection cn = ds.getConnection();
server.xml
context.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 <Resource name="jdbc/mydb1" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/postgres" username="postgres" password="admin" maxActive="20" initialSize="0" minIdle="0" maxIdle="8" maxWait="10000" timeBetweenEvictionRunsMillis="30000" minEvictableIdleTimeMillis="60000" testWhileIdle="true" validationQuery="SELECT 1" maxAge="600000" rollbackOnReturn="true"/>
La encore pas de problème, le contenu de ma table est bien affiché.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <Resource name="jdbc/mydb1" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="postgres" password="admin" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/postgres"/>
A présent, 3ème et dernier test : je souhaiterais ne pas avoir à modifier les fichiers server.xml et context.xml comme précédemment, mais plutôt utiliser des fichiers context.xml et web.xml propres à mon appli web.
Voici les fichiers impliqués :
context.xml dans le sous-dossier META-INF de mon appli web :
web.xml dans le sous-dossier WEB-INF de mon appli web :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <?xml version="1.0" encoding="UTF-8"?> <Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/mydb2" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="postgres" password="admin" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://localhost:5432/postgres"/> </Context>
Et enfin la partie connexion dans ma page :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <description>postgres</description> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/mydb2</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
Cette fois quand j'affiche ma page, j'ai la belle erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/mydb2"); Connection cn = ds.getConnection();
javax.servlet.ServletException: javax.naming.NameNotFoundException: Le Nom [mydb2] n'est pas lié à ce Contexte
J'ai du louper un épisode ou bien mon implémentation n'est tout simplement pas possible ...
Merci d'avance pour votre aide !
Partager