Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/07/2009, 02:15
MiLLeN
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 16 años, 4 meses
Puntos: 5
Pregunta Spring e Hibernate

Estoy comenzando una aplicacion, y he debido configurar algo mal, o nose... porque la cuestion es que el DataSource esta a null, a ver si alguno veis porque...

applicationContext.xml
Código:
<?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:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    

    <!-- HIBERNATE -->
    <bean id="miDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="xxx"/>
        <property name="password" value="xxx"/>
    </bean>


    <bean id="miHibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="properties">
            <props>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.query.substitutions">true 'T', false 'F'</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.c3p0.minPoolSize">5</prop>
                <prop key="hibernate.c3p0.maxPoolSize">20</prop>
                <prop key="hibernate.c3p0.timeout">600</prop>
                <prop key="hibernate.c3p0.max_statement">50</prop>
                <prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
            </props>
        </property>
    </bean>

    <bean id="miSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="miDataSource" />
        <property name="hibernateProperties" ref="miHibernateProperties" />
        <property name="mappingResources">
            <list>
                <value>com/springhibernate/mappings/Usuario.hbm.xml</value>
            </list>
        </property>
    </bean>

    <bean id="mihibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="miSessionFactory" />
    </bean>

    <bean id="UsuarioDAOImpl"
class="com.springhibernate.implementation.UsuarioDAOImpl">
        <property name="hibernateTemplate" ref="mihibernateTemplate" />
        <property name="dataSource" ref="miDataSource" />
    </bean>

    <!-- FIN HIBERNATE -->
</beans>

Código:
package com.springhibernate.dao;

import com.springhibernate.beans.Usuario;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.apache.commons.dbcp.BasicDataSource;

public interface UsuarioDAO {

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate);

    public void setDataSource(BasicDataSource datasource);

    public HibernateTemplate getHibernateTemplate();

    public Usuario devuelveUsuario(String usuario);
}
Código:
package com.springhibernate.implementation;

import com.springhibernate.beans.Usuario;
import com.springhibernate.dao.UsuarioDAO;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.apache.commons.dbcp.BasicDataSource;

public class UsuarioDAOImpl implements UsuarioDAO {

    private HibernateTemplate hibernateTemplate;
    private BasicDataSource dataSource;

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }

    public void setDataSource(BasicDataSource dataSource){
        this.dataSource = dataSource;
    }

    public HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }

    public Usuario devuelveUsuario(String usuario) {
        System.out.println("DS " + dataSource);
        System.out.println("HB " + hibernateTemplate);
        String query = "select * from usuarios where usuario=?";
        return (Usuario) hibernateTemplate.load(query, usuario);
    }
}

La cuestion es que el objeto hibernateTemplate de la clase UsuarioDAOImpl estaba siempre a null, entonces para comprobar si el fallo estaba en el sessionFactory o en el Datasource he hecho esa chapucilla en la clase, y de primeras comprobe que el dataSource esta a null, con lo cual, evidentemente falla todo en cadena.

Código:
package com.springhibernate.controllers;

import com.springhibernate.beans.Usuario;
import com.springhibernate.implementation.UsuarioDAOImpl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class IndexController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        logger.info("Cargando la aplicacion para la ip " + request.getRemoteHost());


        UsuarioDAOImpl udi = new UsuarioDAOImpl();
        
        Usuario usuario = new Usuario();
        usuario = udi.devuelveUsuario("pedro");

        Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("usuario", usuario.getUsuario());
        myModel.put("contrasena", usuario.getContrasena());

        return new ModelAndView("index", "modelo", myModel);
        
    }

}
¿Alguno sabeis porque?
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.