Boa tarde à todos.
Estou interessado em deixar minha configuração com o banco de dados à cargo do meu servidor de aplicação(Tomcat 5.5.20). Para isto estou utilizando JNDI e arquivos xml.
no tomcat…
tomcat-5.5.20\conf\context.xml
<Context>
....
<Resource
name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassname="org.postgresql.Driver"
url="jdbc:postgresql://201.7.193.141/pdsBackup"
username="postgres"
password="postgres"
maxActive="10"
maxIdle="10"
removeAbandoned="true"
factory="org.apache.naming.factory.BeanFactory"
/>
...
</Context>
contexto da minha aplicação
persistenceContext.xml
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<!-- Faz esta tag apontar para o data source definido -->
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>hibernate/*.hbm.xml</value>
<value>hibernate/*.hbm.xml</value>
<value>hibernate/*.hbm.xml</value>
....
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect"> ... </prop>
<prop key="show_sql">true</prop>
<prop key="use_outer_join">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
</bean>
<!-- Meu DataSource esta referenciando minha definição do Context.xml via JNDI-->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/myDataSource</value>
</property>
</bean>
<!-- Minhas beans por ioc estão referenciando minha tag sessionFactory -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
A exceção que esta vindo para mim referencia o DataSource:
Alguém poderia me ajudar com esse problema??
Já coloquei a configuração no Server.xml direto no contexto da aplicação e agora está no Context.xml… meu jar do postgres parece estar no local correto dentro do tomcat (common/lib).
Abraços à todos.
Cara, dê uma olhada neste POST. Eles discutiram uma coisa semelhante a sua.
Tem também uns links interessantes para você dá uma olhada.
Bom dia jmoreira,
Cara, ja tinha olhado este post que você está me mandando. O problema do cara era que ele não havia startado o contexto (tomcat). O que ele apresenta não tem nada a ver com o que eu estou mostrando: e ele está pegando a conexão diretamente no código… enquanto eu estou tentando iniciar a conexão via um contexto de Spring.
O único link que ele disponibilizou está quebrado… http://tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html … o link que eles estão se referenciando mudou para: http://tomcat.apache.org/tomcat-5.5-doc/jndi-resources-howto.html . Estou olhando o que tem nesse link, mas não vi nada de mirabolante que não tenha feito antes…
.
De qualquer forma, agradeço sua ajuda… se tiver mais alguma dica.
Abraço.
Rafael
Talvez isso que vou colocar seja importante… antes de eu adicionar a linha no contexto que coloquei no tomcat:
...
factory="org.apache.naming.factory.BeanFactory"
...
estava dando o seguinte erro:
[quote] …
Cannot create JDBC driver of class ‘’ for connect URL ‘jdbc:postgresql://201.x.xxx.1x1/blablabla’
Context initialization failed
…
java.lang.IllegalArgumentException: Cannot convert value of type [org.apache.tomcat.dbcp.dbcp.BasicDataSource] to required type [org.apache.commons.dbcp.BasicDataSource] for property ‘dataSource’: no matching editors or conversion strategy found
…[/quote]
Alguém sabe me dizer se eu tomei o procedimento correto??
Obrigado! 
Você já baixou o JDBC Driver http://jdbc.postgresql.org/ e inclui no classpath?
Por favor… quem estiver lendo este tópico leia esta mensagem.
Cometi erros bárbaros acima… abstraiam o que eu fiz na factory do contexto do tomcat factory="org.apache.naming.factory.BeanFactory"
O contexto correto fica da seguinte forma:
<Context ...
<Resource
name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassname="org.postgresql.Driver"
url="jdbc:postgresql://201.x.x9x.1x1/xxxBackup"
username="postgres"
password="postgres"
maxActive="10"
maxIdle="10"
removeAbandoned="true"
/>
...
</Context>
Corrigi uma parte do meu codigo (adaptei) para que ele possa suportar o objeto BasicDataSource que vem do tomcat (org.apache.tomcat.dbcp.dbcp.BasicDataSource).
O problema que me está aparecendo agora é o seguinte (não está aparecendo como uma exceção):
Já coloquei o jar do postgres no tomcat tanto em common/lib quanto no server/lib… mas o erro continua.
Alguma boa alma pode me ajudar…
No meu projeto está assim:
applicationContext-resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/teste"/>
</beans>
context.xml (Creio que seja obrigatório ser escrito em minúsculo)
<Context>
<Resource name="jdbc/teste" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="teste" password="teste" driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://server:5432/teste"/>
</Context>
Grande ANDRÉ!!!
Cara… seguinte, não sei sobre o que você estava falando daquele esquema de minusculas, mas se for sobre o nome da conexão no contexto [name=“jdbc/myDataSource”] tentei alterar isso como tu me falou e não adiantou. Então… como quem não quer nada dei mais uma olhada no meu contexto para ver mais coisas que poderiam estar erradas como maiusculas e minusculas… e percebi que a propriedade driverClassName estava escrita errada, estava “driverClassName”… :oops:
Muito obrigado por me mostrar a luz cara! hehehe 
Abraço!!!