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?