Quando criamos uma aplicação, é comum termos ambientes diferentes e/ou clientes diferentes, e isso nos traz a necessidade de fazer a nossa aplicação se conectar com bases de dados diferentes para cada ambiente/cliente. Para resolver isso de forma elegante, tiramos a responsabilidade de conhecer a URL, Usuário e Senha do Banco da aplicação e passamos para o servidor. Nesse post mostro como montar o DataSource no Tomcat. (Foi feito no Tomcat 7 que é o que uso no trabalho).
1
- Copiar as libs referentes ao Driver JDBC e c3p0 para o TomCat
Ex:
-
Driver JDBC
postgresql-8.4-702.jdbc3.jar
-Lib
c3p0
c3p0-0.9.1.jar
-
Dependências da lib c3p0
antlr-2.7.6.jar
commons-collections-3.2.jar
dom4j-1.6.1.jar
jta-1.0.1B.jar
2
- Adicione o seguinte trecho ao arquivo web.xml (Note que o
<res-ref-name> contém o mesmo nome que vamos dar a
configuração do DataSource no Tomcat)
<resource-ref>
<description>DB
Connection</description>
<res-ref-name>jdbc/nome_datasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Para
quem usa hibernate.cfg.xml
3
- No hibernate.cfg.xml remova as informações de conexão (url,
usuário e senha) e de pool, e acrescente apenas a seguinte linha:
<property
name="hibernate.connection.datasource">java:/comp/env/jdbc/nome_datasource</property>
Para
quem usa JPA
4
- No persistence.xml remova as informações de conexão (url,
usuário e senha) e de pool, e acrescente apenas a seguinte linha:
<non-jta-data-source>java:comp/env/jdbc/nome_datasource</non-jta-data-source>
5
- Configurar o context.xml (apache-tomcat-7.0.96/conf/context.xml) do
Tomcat adicionando o trecho de código abaixo
(Alterando
endereço, senha e usuário do banco de acordo com o ambiente/cliente que o Tomcat está alocado)
<Resource
name="jdbc/nome_datasource" auth="Container"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClass="org.postgresql.Driver"
jdbcUrl="jdbc:postgresql://x.x.x.x:5432/nome_banco"
user="usuario_bd"
password="senha_bd"
minPoolSize="10"
maxPoolSize="160"
/>
Fonte: