Foros del Web » Programación para mayores de 30 ;) » Java »

Spring e Hibernate

Estas en el tema de Spring e Hibernate en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 24/07/2009, 02:15
 
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.
  #2 (permalink)  
Antiguo 26/07/2009, 05:48
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 16 años, 4 meses
Puntos: 5
Pregunta Respuesta: Spring e Hibernate

Bueno, he seguido haciendo pruebas, si llamo al metodo, y creo un HibernateTemplate cogiendo el bean "miSessionFactory" desde el objeto BeanFactory.getBean funciona perfectamente.

Asi que el problema esta en que no se me hace la inyeccion correctamente desde el contenedor de spring, y no veo el fallo... lo he repasado mil veces.

¿Se supone que cuando creo un nuevo objeto "UsuarioDAOImpl" desde el "indexController", la inyeccion de dependencia automaticamente setea el hibernateTemplate desde el Spring Container no?
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.
  #3 (permalink)  
Antiguo 26/07/2009, 09:40
 
Fecha de Ingreso: diciembre-2007
Mensajes: 194
Antigüedad: 16 años, 4 meses
Puntos: 5
Respuesta: Spring e Hibernate

Solucionado.

http://www.programacionj2ee.com/2009...g-e-hibernate/
__________________
Aprender J2EE en www.programacionj2ee.com.
Mi framework PHP D Framework.

Última edición por MiLLeN; 09/08/2009 a las 10:38
  #4 (permalink)  
Antiguo 26/08/2010, 09:08
 
Fecha de Ingreso: marzo-2010
Mensajes: 14
Antigüedad: 14 años, 1 mes
Puntos: 0
Spring e Hibernate

Tengo un articulo relacionado Spring y la programacion orientada a aspectos - AOP http://periospino.blogspot.com/2010/06/interceptores-con-spring-aop.html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:35.