Spring datasource JdbcDaoSupport

4 respostas
diogoprosoft

Galera o que estou fazendo de errado na minha configuração???
Quero configurar o spring datasource mais esta dando o seguinte erro: java.lang.IllegalArgumentException: No DataSource specified

Vejam como estou fazendo:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>importacao</display-name>
  
  	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/context.xml</param-value>
	</context-param>
  
  	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  
  	<servlet>
		<servlet-name>webapp</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
  	</servlet>
  
</web-app>

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName" default-lazy-init="false">
	<!--
		@IMM -> Transaction Manager do spring utiliza o contexto do dataSource.
		Transaction manager for a single JDBC DataSource
	-->
	
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"/>
	</bean>

	<!--
		@IMM -> Interceptador do SPRING para propagar transa&#35119; (DataSource) a todos os metodos.
		Transaction Interceptor set up to do PROPAGATION_REQUIRED on all methods
	-->
	<bean id="matchAllWithPropReq" class="org.springframework.transaction.interceptor.MatchAlwaysTransactionAttributeSource">
		<property name="transactionAttribute">
			<value>PROPAGATION_REQUIRED</value>
		</property>
	</bean>

	<bean id="matchAllTxInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
		<property name="transactionAttributeSource">
			<ref bean="matchAllWithPropReq"/>
		</property>
	</bean>
	
	<bean name="tabelasFretesDAO" class="br.com.persistencia.dao.TabelasFretesDAO" />

</beans>

applicationDB.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName" default-lazy-init="false">

	<bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.postgresql.Driver"/>
		<property name="url" value="jdbc:postgresql://192.168.10.227:5432/rodoval_tst"/>
		<property name="username" value="postgres"/>
		<property name="password" value="panazzolo"/>
	</bean>

</beans>

applicationDB-prod.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

   	<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="jdbc/Importacao" />
	</bean>

</beans>

Meu DAO que estou testando

package br.com.persistencia.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class TabelasFretesDAO extends JdbcDaoSupport{

	CallableStatement cstmt;

	public void teste() throws Exception{
		try{

			StringBuffer sql = new StringBuffer();
			sql.append("SELECT * FROM TABELAS_FRETES");

			cstmt = super.getConnection().prepareCall(sql.toString());

			ResultSet rs = cstmt.executeQuery();

			while(rs.next()){
				System.out.println(rs.getInt("oid_tabela_frete"));
			}
		}catch(Exception e){
			throw new Exception(e);
		}finally{
			cstmt.close();
		}
	}
}

O que será que está dando de errado para não estar achando o meu DataSource?

4 Respostas

L

Acredito que se adicionar o arquivo applicationDB.xml funcionará.

Adicione essa linha no seu context.xml:

Não sei se está correto desta forma, pq coloco meus arquivos de configuração para serem encontrados via classpath para facilitar os testes unitários.

Eu uso assim:

E no web.xml assim:

<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> </context-param>

diogoprosoft

Não rolou continua dando o mesmo erro!!! onde sera o problema???

L

Se colar o conteúdo do applicationDB.xml e colocar no context.xml ainda ocorre o problema?. Tenta fazer isso só para testar mesmo.

Talvez o problema esteja na configuração do Spring, ai vc poderia configurá-lo manualmente a procura do erro, que é bem mais rápido achar usando junit, por exemplo, do que colocando a aplicação web no ar.

diogoprosoft

Ja tinha tentado tbm mais não rolou!!! To na caça ao erro, heheh

Criado 5 de novembro de 2010
Ultima resposta 5 de nov. de 2010
Respostas 4
Participantes 2