2009-04-09 5 views
1

Ich habe ein einfaches Servlet in Tomcat ausgeführt. Da das Servlet eine Verbindung zu einer Datenbank herstellt, muss ich das Verbindungspooling verwenden. Alle Beispiele im Internet gehen jedoch davon aus, dass (der Entwickler) nie ändern wird, mit welcher Datenbank das Servlet eine Verbindung herstellt.Tomcat Verbindung Pooling

Zum Beispiel ist hier eine Beispiel context.xml-Datei.

<?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> 

In meinem Fall habe ich einen Test-Server (postgresql) und einen Produktionsserver (MS SQL), so dass alle, die unter der Annahme, Tutorials, dass ich gerade in den context.xml Einstellungen codieren kann nicht funktionieren.

Ich habe 2 verschiedene Eigenschaften-Dateien für die Datenbank-URLs, Authentifizierung usw., die ich verwende, eine für Testserver, eine für Produktionsserver, und das funktioniert gut, aber jetzt, wenn ich Verbindungspooling verwenden möchte, wie würde Ich integriere das in mein Servlet?

Ich möchte "Build" in Netbeans 6.5 treffen, nehmen Sie den Krieg im Verzeichnis dist, und legen Sie es im Tomcat-Anwendungsverzeichnis von jedem Server ab, ohne Xml-Dateien nach dem neuen Krieg ändern zu gehen wurde bereitgestellt. Das Servlet weiß, wo die Eigenschaftendatei auf jedem System zu finden ist. Wenn ich also die Eigenschaftendatei mit den Verbindungs-Pooling-Eigenschaften integrieren kann, wäre alles bereit.

Irgendwelche Ideen ...?

Antwort

4

Ich habe alle meine Datenquellen Definitionen in der Datei conf/server.xml von Tomcat, so dass der Krieg völlig unabhängig von der Datenquelle ist.

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

Genau das habe ich gesucht. Vielen Dank. – user85116

-1

Sie könnten zwei verschiedene Verbindungen haben und während der Übertragung erkennen, welche Verbindung in der Anwendung verwendet werden soll.

+0

Dies würde auch funktionieren, aber ich ziehe die Lösung von Maurice. Danke ... – user85116