Problema Data Souce Spring

Pessoal estou com um problema aqui com o Spring…

Eu tenho um Data Souce mapeado no servidor que é o Weblogic 9.2

no applicationContext-dataSources.xml esta desta forma:

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

No applicationContext-daos.xml, eu mapeio a minha DAO para o Data Source Acima:

<bean id="ConsultaConsumoPPVDAO" class="br.com.gvt.wisetools.dao.ConsultaConsumoPPVDAO" lazy-init="true">
	 <property name="dataSource" ref="dsPPV" />
</bean>

Abaixo segue a implementação da minha DAO:

package br.com.gvt.wisetools.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Date;

import br.com.gvt.infra.dao.AbstractSqlDao;

public class ConsultaConsumoPPVDAO extends AbstractSqlDao {
	
	public boolean insertLogConsumoPPV(String action, String login, Date date, String mesage, 
					String system, String instance, String designator){
		
		Connection conn = null;
		PreparedStatement stmt = null;
		
		try {	
			StringBuffer sql = new StringBuffer();  
	        	sql.append(" INSERT INTO OSS_LOG_OWNER.gvt_log_smart_tool ");  
	        	sql.append(" ST_USUARIO,");
	        	sql.append(" ST_DATA, ");
	        	sql.append(" ST_ACAO, ");
	        	sql.append(" ST_DESIGNATOR, ");
	        	sql.append(" ST_RETORNO, ");
	        	sql.append(" ST_SIST_ORIGINARIO, ");
	        	sql.append(" ST_INSTANCIA, ");
	        	sql.append(" ST_DESIGNATOR");
	        	sql.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ? )");
	        	
	        String insert = sql.toString();
	        	
        	conn = getConnection();
	        stmt = conn.prepareStatement(insert);
	        	        
	        stmt.setString(1, login);
	        stmt.setDate(2, (java.sql.Date) date);
	        stmt.setString(3, action);
	        stmt.setString(4, designator);
	        stmt.setString(5, mesage);
	        stmt.setString(6, system);
	        stmt.setString(7, instance);
	        stmt.setString(8, designator);
	        stmt.executeUpdate();
	        return true;
			
		}
		catch (Exception e){
				e.printStackTrace();
		}finally{
			super.closeStatement(stmt);
	        super.releaseConnection(conn);
		}
		return false;
	}
}

a fato é que ao dar o getConnection(); da o seguinte erro:

java.lang.IllegalArgumentException: No DataSource specified

eu já revirei o sistema todo e não consegui achar o erro, se alguem puder ajudar e serei muito grato.

Tente criar uma variável privada do tip odatasource e crie o método set para ele

private DataSource datasource;
	
@Override
public DataSource getDataSource() {
     return datasource;
}

Abraços.

Dá uma olhada na sua configuração do bean. O id não tem que começar com letra minúscula ?

    <bean id="ConsultaConsumoPPVDAO" class="br.com.gvt.wisetools.dao.ConsultaConsumoPPVDAO" lazy-init="true">  
         <property name="dataSource" ref="dsPPV" />  
    </bean>  

eu crio essa variavel privada dentro do meu DAO???

e qual import que eu faço??

import sun.jdbc.odbc.ee.DataSource;
import javax.activation.DataSource;
import javax.sql.DataSource;

valeus.

isso.
Tenta colocar dentro do dao.

E importa o javax.sql.DataSource;

eu fiz como voce disse. e nao deu certo :cry:

package br.com.gvt.wisetools.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Date;

import javax.sql.DataSource;

import br.com.gvt.infra.dao.AbstractSqlDao;

public class ConsultaConsumoPPVDAO extends AbstractSqlDao {
	
	private DataSource datasource;  
	
	public boolean insertLogConsumoPPV(String action, String login, Date date, String mesage, 
					String system, String instance, String designator){
		
		Connection conn = null;
		PreparedStatement stmt = null;
		
		try {	
			StringBuffer sql = new StringBuffer();  
	        	sql.append(" INSERT INTO gvt_log_smart_tool ");  
	        	sql.append(" ST_USUARIO,");
	        	sql.append(" ST_DATA, ");
	        	sql.append(" ST_ACAO, ");
	        	sql.append(" ST_DESIGNATOR, ");
	        	sql.append(" ST_RETORNO, ");
	        	sql.append(" ST_SIST_ORIGINARIO, ");
	        	sql.append(" ST_INSTANCIA, ");
	        	sql.append(" ST_DESIGNATOR");
	        	sql.append(" VALUES (?, ?, ?, ?, ?, ?, ?, ? )");
	        	
	        String insert = sql.toString();
	        	
        	conn = getConnection();
	        stmt = conn.prepareStatement(insert);
	        	        
	        stmt.setString(1, login);
	        stmt.setDate(2, (java.sql.Date) date);
	        stmt.setString(3, action);
	        stmt.setString(4, designator);
	        stmt.setString(5, mesage);
	        stmt.setString(6, system);
	        stmt.setString(7, instance);
	        stmt.setString(8, designator);
	        stmt.executeUpdate();
	        return true;
			
		}
		catch (Exception e){
				e.printStackTrace();
		}finally{
			super.closeStatement(stmt);
	        super.releaseConnection(conn);
		}
		return false;
	}
	
	@Override  
	public DataSource getDataSource() {  
	     return datasource;  
	} 
}

erro: java.lang.IllegalArgumentException: No DataSource specified

Tenta uma coisa no seu arquivo applicationContext-daos.xml

Coloca a parte que recebe o datasource desse jeito

O id começando com letra minúscula

nao funcionou desta forma tbm…
:frowning:
sinceramente não sei o que pode estar ocorrendo.

Mostra o método getConnection()

segue o codigo da classe:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Time;
import java.sql.Timestamp;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.jdbc.support.JdbcUtils;

public abstract class AbstractSqlDao
  implements Dao
{
  protected DataSource ds;

  protected Connection getConnection()
  {
    return DataSourceUtils.getConnection(this.ds);
  }

  protected void releaseConnection(Connection con) {
    DataSourceUtils.releaseConnection(con, this.ds);
  }

  protected void closeStatement(Statement ps) {
    JdbcUtils.closeStatement(ps);
  }

  protected void closeResultSet(ResultSet rs) {
    JdbcUtils.closeResultSet(rs);
  }

  protected String sqlBoolean(Boolean b) {
    if (b == null)
      return "N";
    return b.booleanValue() ? "S" : "N";
  }

  protected String sqlBoolean(char c) {
    if (c == 0)
      return "N";
    return Character.toString(c);
  }

  protected Timestamp sqlDateTime(java.util.Date dt) {
    return dt == null ? null : new Timestamp(dt.getTime());
  }

  protected java.sql.Date sqlDate(java.util.Date dt) {
    return dt == null ? null : new java.sql.Date(dt.getTime());
  }

  protected Time sqlTime(java.util.Date dt) {
    return dt == null ? null : new Time(dt.getTime());
  }

  public DataSource getDataSource() {
    return this.ds;
  }
  public void setDataSource(DataSource dataSource) {
    this.ds = dataSource;
  }
}

Como já tens na classe abstrata a datasource e o get, deves retirar o que colocaste na class ConsultaConsumoPPVDAO

Mas não vejo qualquer problema no resto…