2009-04-09 244 views
1

我有一個運行在Tomcat中的簡單Servlet。由於servlet連接到數據庫,因此我需要使用連接池。但是,互聯網上的所有例子都假設(開發人員)決不會更改servlet連接的數據庫。tomcat連接池

例如,這裏是一個示例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> 

就我而言,我有一個測試服務器(PostgreSQL系統)和生產服務器(MS SQL),因此所有假設我可以硬編碼在context.xml中設置將無法正常工作的教程。

我有兩個不同的屬性文件的數據庫url的身份驗證等,我使用,一個用於測試服務器,一個用於生產服務器,並且工作得很好,但現在如果我想使用連接池,將如何我將它集成到我的servlet中?

我希望能夠在Netbeans 6.5中打「build」,在dist目錄中進行戰爭,並將其放到任一服務器的tomcat應用程序目錄中,而不必在新戰爭之後繞過改變的xml文件已被部署。 servlet知道每個系統上的屬性文件的位置,因此如果我可以將屬性文件與連接池屬性集成,那麼我將全部設置。

任何想法......?

回答

4

我把我所有的數據源定義放在tomcat的conf/server.xml文件中,所以戰爭完全獨立於數據源。

的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

這正是我所尋找的。謝謝。 – user85116 2009-04-09 18:32:47

-1

您可以擁有2個不同的連接,並在運行中檢測應用程序中使用哪個連接。

+0

這將工作太,但我更喜歡從莫里斯的解決方案。謝謝... – user85116 2009-04-09 18:32:02