2009-04-09 5 views
1

У меня есть простой сервлет, запущенный в Tomcat. Поскольку сервлет подключается к базе данных, мне нужно использовать пул соединений. Тем не менее, все примеры в Интернете предполагают, что (разработчик) никогда не изменит, к какой базе данных подключается сервлет.подключение к 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 не будет работать.

У меня есть 2 разных файла свойств для базы данных url, аутентификации и т. Д., Которые я использую, один для тестового сервера, один для производственного сервера, и это отлично работает, но теперь, если я хочу использовать пул соединений, Я интегрирую это в свой сервлет?

Я хочу, чтобы иметь возможность ударить «построить» в Netbeans 6.5, взять войну в каталог dist и отбросить ее в каталоге приложения tomcat любого из серверов, не обойтись без изменения xml-файлов после новой войны был развернут. Сервлет знает, где получить файл свойств в каждой системе, поэтому, если я могу интегрировать файл свойств с свойствами пула соединений, я бы все установил.

Любые идеи ...?

ответ

4

Я поместил все свои определения источника данных в файл conf/server.xml tomcat, поэтому война полностью не зависит от источника данных.

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

-1

У вас может быть 2 разных соединения и обнаружение на лету, какое соединение использовать в приложении.

+0

Это будет работать, но я предпочитаю решение от Мориса. Спасибо ... – user85116