2009-04-09 32 views
1

J'ai une simple servlet fonctionnant sous Tomcat. Parce que le servlet se connecte à une base de données, j'ai besoin d'utiliser le pool de connexion. Cependant, tous les exemples sur Internet supposent que (le développeur) ne changera jamais la base de données à laquelle la servlet se connecte.Mise en pool de connexion tomcat

Par exemple, voici un exemple de fichier context.xml.

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" path="/feeds"> 
    <Resource name="jdbc/TestDB" 
     auth="Container" 
     type="javax.sql.DataSource" 
     factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" 
     username="username" 
     password="password" 
     driverClassName="org.postgresql.Driver" 
     url="jdbc:postgresql://example.com:1234/myDB" 
     maxWait="1000" 
     removeAbandoned="true" 
     maxActive="30" 
     maxIdle="10" 
     removeAbandonedTimeout="60" 
     logAbandoned="true"/> 
</Context> 

Dans mon cas, j'ai un serveur de test (postgresql) et un serveur de production (ms sql), de sorte que tous les tutoriels en supposant que je peux hardcode paramètres du context.xml ne fonctionnera pas. J'ai 2 fichiers de propriétés différents pour l'url de base de données, l'authentification, etc., que j'utilise, un pour le serveur de test, un pour le serveur de production, et ça fonctionne bien, mais maintenant si je veux utiliser le pool de connexion, Je l'intègre dans ma servlet? Je veux être en mesure de cliquer sur "build" dans Netbeans 6.5, prendre la guerre dans le répertoire dist, et le déposer dans le répertoire d'application tomcat de l'un ou l'autre serveur, sans avoir à changer les fichiers xml après la nouvelle guerre a été déployé. La servlet sait où trouver le fichier de propriétés sur chaque système, donc si je peux intégrer le fichier de propriétés avec les propriétés de pool de connexion, je serais tout ensemble.

Des idées ...?

Répondre

4

J'ai mis toutes mes définitions de sources de données dans le fichier conf/server.xml de tomcat, donc la guerre est complètement indépendante de la source de données.

server.xml:

<GlobalNamingResources> 
    <Resource name="mail/Mail" auth="Container" type="javax.mail.Session" 
       mail.smtp.host="localhost"/> 
    <Resource auth="Container" type="javax.sql.DataSource" name="jdbc/lagalerie" 
       driverClassName="org.postgresql.Driver" 
       url="jdbc:postgresql://localhost/lagalerie?charSet=LATIN1" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="casashop" password="casashop"/> 
</GlobalNamingResources> 

context.xml:

<ResourceLink global="jdbc/lagalerie" name="jdbc/lagalerie" type="javax.sql.DataSource"/> 
    <ResourceLink global="mail/Mail" name="mail/Mail" type="javax.mail.Session"/> 

web.xml:

<resource-ref> 
    <description>The datasource</description> 
    <res-ref-name>jdbc/DataSource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
<resource-ref> 
    <description>The mail session</description> 
    <res-ref-name>mail/Mail</res-ref-name> 
    <res-type>javax.mail.Session</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 
+0

C'est exactement ce que je cherchais. Merci. – user85116

-1

Vous pouvez avoir 2 connexions différentes et détecter à la volée la connexion à utiliser dans l'application.

+0

Cela fonctionnerait aussi, mais je préfère la solution de Maurice. Merci ... – user85116