Tomcat + jdbc : Le Nom [mydb2] n'est pas lié à ce Contexte
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) :
Code:
1 2
| Class.forName("org.postgresql.Driver");
Connection cn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres?user=postgres&password=admin"); |
Ici pas de problème, le contenu de ma table est bien affiché.
Mon 2nd test utilise cette fois la notion de contexte :
Code:
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(); |
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 :
server.xml
Code:
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"/> |
context.xml
Code:
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"/> |
La encore pas de problème, le contenu de ma table est bien affiché.
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 :
Code:
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> |
web.xml dans le sous-dossier WEB-INF de mon appli web :
Code:
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> |
Et enfin la partie connexion dans ma page :
Code:
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(); |
Cette fois quand j'affiche ma page, j'ai la belle erreur suivante :
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 !