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:
¿Alguno sabeis porque? 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); } }