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

Spring JDBCTemplate

Estas en el tema de Spring JDBCTemplate en el foro de Java en Foros del Web. Buenas tardes!!! Estoy intentando utilizar JDBCTemplates para conectar con una base de datos, evidentemente me salen errores porque me faltan librerias: SEVERE: Excepción enviando evento ...
  #1 (permalink)  
Antiguo 03/05/2013, 09:55
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Spring JDBCTemplate

Buenas tardes!!!

Estoy intentando utilizar JDBCTemplates para conectar con una base de datos, evidentemente me salen errores porque me faltan librerias:


SEVERE: Excepción enviando evento inicializado de contexto a instancia de escuchador de clase org.springframework.web.context.ContextLoaderListe ner
org.springframework.beans.factory.CannotLoadBeanCl assException:
Cannot find class [org.apache.commons.dbcp.BasicDataSource]
for bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource


No se muy bien que librerias necesito ni donde conseguirlas, he intentando agregar algunas pero me siguen surgiendo errores!!

Alguien puede echarme una mano? he leido que necesito librerias common logging, commons-pool, dbcp... pero no se si es asi o no

Última edición por rgf1987; 03/05/2013 a las 10:17
  #2 (permalink)  
Antiguo 04/05/2013, 04:47
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Spring JDBCTemplate

Me auto respondo, incluyendo las librerias:

commons-dbcp-1.4.jar y commons-pool-1.6.jar

he conseguido que me funcione correctamente JDBCTemplate, el problema ahora esta a la hora de instanciar el objeto JDBCTemplate yo lo tengo hecho de la siguiente forma:

En el aplicationContext.xml:

Código XML:
Ver original
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  2.         <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  3.         <property name="url" value="jdbc:mysql://localhost:3306/todomotor"/>
  4.         <property name="username" value="root"/>
  5.         <property name="password" value="root"/>
  6.     </bean>
  7.        
  8.     <bean id="NoticiaDAO" class="dao.NoticiaDAO">
  9.         <property name="dataSource" ref="dataSource" />
  10.     </bean>

y en la clase NoticiaDAO:

Código JAVA:
Ver original
  1. private JdbcTemplate jdbcTemplate;
  2.    
  3.    
  4.     public void setDataSource(DataSource dataSource) {
  5.         System.out.println("INSTANCIAMOS JDBCTEMPLATE");
  6.         this.jdbcTemplate = new JdbcTemplate(dataSource);
  7.         System.out.println("INSTANCIAMOS JDBCTEMPLATE VALOR "+jdbcTemplate);
  8.     }

Sin embargo al intentar ejecutar el proyecto jdbcTemplate se me pone a null porque yo llamo a los DAO de la siguiente forma:

Código JAVA:
Ver original
  1. INoticiaDAO inoticiaDAO;
  2.    
  3.     public ManagerNoticias(){  
  4.        
  5.         inoticiaDAO = new NoticiaDAO();        
  6.     }

Es decir trabajo con una interfaz y creo una instancia del objeto DAO pero al hacer estoy estoy creando de nuevo el ojeto JDBCTemplate perdiendo el valor que ya poseia, y la verdad soy nuevo en Spring y no entiendo bien que se supone que debo hacer!!!

Alguna ayuda? o alguien que me explique mas o menos como debo implementarlo?
  #3 (permalink)  
Antiguo 04/05/2013, 13:43
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años
Puntos: 12
Respuesta: Spring JDBCTemplate

quizas definiendo un Service y a este le agregas la propiedad NoticiaDAO y al sercicio lo deberias anotar para que spring te lo inicialice solo o quizas un getBean("unBean")

con eso deberia andar

Saludos.
  #4 (permalink)  
Antiguo 07/05/2013, 14:54
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Spring JDBCTemplate

Nada no hay manera, tengo la siguiente configuracion:

/WEB-INF/applicationContext.xml

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.       xmlns:p="http://www.springframework.org/schema/p"
  5.       xmlns:aop="http://www.springframework.org/schema/aop"
  6.       xmlns:tx="http://www.springframework.org/schema/tx"
  7.       xmlns:context="http://www.springframework.org/schema/context"
  8.       xmlns:mvc="http://www.springframework.org/schema/mvc"
  9.       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  10.       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  11.       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
  12.       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  13.       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  14.       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  15.    
  16.    
  17.     <bean id="dataSource"
  18.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  19.  
  20.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  21.         <property name="url" value="jdbc:mysql://localhost:3306/todomotor" />
  22.         <property name="username" value="root" />
  23.         <property name="password" value="root" />
  24.     </bean>
  25.    
  26.     <bean id="IUsuarioDAO" class="dao.UsuarioDAO">
  27.         <property name="dataSource" ref="dataSource"/>
  28.     </bean>    
  29.    
  30.                    
  31. </beans>


/WEB-INF/dispatcher-servlet.xml
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3.       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.       xmlns:p="http://www.springframework.org/schema/p"
  5.       xmlns:aop="http://www.springframework.org/schema/aop"
  6.       xmlns:tx="http://www.springframework.org/schema/tx"
  7.       xmlns:context="http://www.springframework.org/schema/context"
  8.       xmlns:mvc="http://www.springframework.org/schema/mvc"
  9.       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  10.       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  11.       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
  12.       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
  13.       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
  14.       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  15.    
  16.     <context:component-scan base-package="controladores"/>
  17.      
  18. </beans>

/WEB-INF/web.xml

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  3.   <display-name>Prueba</display-name>
  4.   <welcome-file-list>    
  5.     <welcome-file>index.htm</welcome-file>
  6.     <welcome-file>index.jsp</welcome-file>
  7.     <welcome-file>default.html</welcome-file>
  8.     <welcome-file>default.htm</welcome-file>
  9.     <welcome-file>default.jsp</welcome-file>
  10.   </welcome-file-list>
  11.   <context-param>
  12.     <param-name>contextConfigLocation</param-name>
  13.     <param-value>/WEB-INF/applicationContext*.xml</param-value>
  14.   </context-param>
  15.   <listener>
  16.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  17.   </listener>
  18.   <servlet>
  19.         <servlet-name>dispatcher</servlet-name>
  20.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  21.         <load-on-startup>2</load-on-startup>
  22.     </servlet>    
  23.     <servlet-mapping>
  24.         <servlet-name>dispatcher</servlet-name>
  25.         <url-pattern>*.htm</url-pattern>
  26.     </servlet-mapping>
  27. </web-app>


Y luego tengo un controlador de la siguiente manera:
Código JAVA:
Ver original
  1. @Controller
  2. @SessionAttributes({"usuario"})
  3. public class Controlador {
  4.         ManagerGeneral mg = new ManagerGeneral();
  5.         UsuarioVO usuario;      
  6.                
  7.         @RequestMapping("index.htm")
  8.     public String index(ModelMap modelo) {
  9.             List<UsuarioVO> listaUsuarios=null;
  10.             try {
  11.                 listaUsuarios = mg.getUsuariosRevisores();
  12.             } catch (SQLException e) {
  13.                 // TODO Auto-generated catch block
  14.                 e.printStackTrace();
  15.             }          
  16.             modelo.addAttribute("listaUsuarios", listaUsuarios);  
  17.            
  18.             return Constantes.raiz +"prueba.jsp";
  19.     }        
  20.        
  21. }

Interfaz DAO

Código JAVA:
Ver original
  1. public interface IUsuarioDAO {
  2.     public List<UsuarioVO> getUsuariosRevisores() throws SQLException;
  3.     public void setDataSource(DataSource dataSource);
  4. }

y su implementacion

Código JAVA:
Ver original
  1. public class UsuarioDAO implements IUsuarioDAO{
  2.    
  3.    
  4.     private DataSource dataSource;
  5.     private JdbcTemplate jdbcTemplate;
  6.    
  7.     public void setDataSource(DataSource dataSource) {
  8.  
  9.         // se instancia plantilla con la inyeccion del datasource
  10.         this.dataSource = dataSource;
  11.         this.jdbcTemplate = new JdbcTemplate(this.dataSource);
  12.        
  13.  
  14.     }
  15.    
  16.     /**
  17.      * Devuelve un listado de los usuarios que pueden realizar funciones de revisor.
  18.      * @return
  19.      * @throws SQLException
  20.      */
  21.     public List<UsuarioVO> getUsuariosRevisores() throws SQLException {
  22.        
  23.         if(this.jdbcTemplate==null){
  24.             System.out.print("JDBC TEMPLATE IS NULL");
  25.         }else{
  26.             System.out.print("JDBC TEMPLATE IS NOT NULL "+jdbcTemplate);
  27.         }
  28.        
  29.         StringBuffer sql = new StringBuffer("SELECT * FROM USUARIOS WHERE nivelUsuario<'4'");            
  30.            
  31.         List<UsuarioVO> listaUsuarios = this.jdbcTemplate.query(sql.toString(),
  32.                 new RowMapper<UsuarioVO>() {
  33.             @Override
  34.             public UsuarioVO mapRow(ResultSet rs, int arg1) throws SQLException {
  35.                // Se rellena un bean Articulo a partir de la fila actual
  36.                // del ResultSet
  37.                    UsuarioVO usuario = new UsuarioVO();
  38.                    usuario.setIdUsuario(rs.getInt("idUsuario"));
  39.                    usuario.setNombreUsuario(rs.getString("nombreUsuario"));
  40.                    usuario.setApellidosUsuario(rs.getString("apellidosUsuario"));
  41.                    usuario.setNickUsuario(rs.getString("nickUsuario"));
  42.                    usuario.setContrasUsuario(rs.getString("contrasUsuario"));
  43.                    usuario.setEmailUsuario(rs.getString("emailUsuario"));
  44.                    usuario.setNivelUsuario(rs.getInt("nivelUsuario"));
  45.                    return usuario;
  46.             }});
  47.         return listaUsuarios;      
  48.        
  49.     }  
  50.    
  51.  
  52. }




Me sale un error 404, y nose porque :(

si modifico el bean IUsuarioDAO del applicationContext y lo dejo asi:

Código XML:
Ver original
  1. <bean id="IUsuarioDAO" class="dao.UsuarioDAO"/>

La pagina me carga, pero me sale un error NULLPOINTEREXCEPTION porque la variable jdbcTemplate esta a null.

Ya no se que hacer, ¿alguien puede echarme una mano??! Estoy desesperado ya, no consigo avanzar!!
  #5 (permalink)  
Antiguo 07/05/2013, 18:29
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años
Puntos: 12
Respuesta: Spring JDBCTemplate

el dao donde lo inicializas y porque aparece de la nada el managerGeneral

esta configuracion del dao esta bien algo parecido debe ser la configuracion de quien instancie el dao

Código XML:
Ver original
  1. <bean id="IUsuarioDAO" class="dao.UsuarioDAO">
  2.         <property name="dataSource" ref="dataSource"/>
  3. </bean>

me explico ?

o sino lo que hubiece hecho es un

Código C++:
Ver original
  1. @Service
  2. public class NoticiaServicio {
  3.  
  4.     @Autowired
  5.     private NoticiaDAO noticiaDao;
  6. }

y le acs un scan del package

No se si me explico ?

Saludos
  #6 (permalink)  
Antiguo 08/05/2013, 01:22
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 7 meses
Puntos: 188
Respuesta: Spring JDBCTemplate

Igual era mejor que aprovechases las posibilidades de inyeccion de dependencias de Spring con esto:

https://www.google.es/#hl=es&gs_rn=1...w=1280&bih=859
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 08/05/2013, 02:20
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Spring JDBCTemplate

Intentare hacerlo con Autowired ya que los dos me lo sugeris, me informare a ver como funciona.

Cita:
Iniciado por darkChild Ver Mensaje
el dao donde lo inicializas y porque aparece de la nada el managerGeneral
El DAO lo inicializo en un Manager.
El controlador llama al ManagerGeneral y este a su vez a diferentes Managers donde se encuentra el ManagerUsuario que gestiona todas las operaciones con Usuarios, entonces inicializo ahi el dao:

Código JAVA:
Ver original
  1. IUsuarioDAO iusuarios = new UsuarioDAO();

Ando bastante perdido, no entiendo muy bien esto de inyeccion de dependencias, tengo la aplicacion hecha y funcionando sin embargo no he utilzado hasta hora inyeccion de dependencias nunca y estoy echando horas como un animal pero no avanzo.

: /
  #8 (permalink)  
Antiguo 08/05/2013, 04:49
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años
Puntos: 12
Respuesta: Spring JDBCTemplate

Ah OK, bueno ahi en los managers debes o bien poner un annotation o bien mapear el bean en un xml como lo hiciste con el dao y le jdbctemplate
  #9 (permalink)  
Antiguo 08/05/2013, 05:21
Avatar de rgf1987  
Fecha de Ingreso: diciembre-2012
Ubicación: Asturias
Mensajes: 269
Antigüedad: 11 años, 3 meses
Puntos: 22
Respuesta: Spring JDBCTemplate

Cita:
Iniciado por darkChild Ver Mensaje
Ah OK, bueno ahi en los managers debes o bien poner un annotation o bien mapear el bean en un xml como lo hiciste con el dao y le jdbctemplate
Y si utilizo autowired?? entonces ya no hace falta mapear los bean en el applicationContext??
  #10 (permalink)  
Antiguo 11/05/2013, 16:49
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años
Puntos: 12
Respuesta: Spring JDBCTemplate

Podrias probar
lo que digo es que spring te aloja todos los beans que le indiques en un contenedor y se espera que vos se los solicites dado que de esa manera te los devolvera en un estado correcto de otra manera si vos haces un new el contenedor ni se entera entonces lo que debes hacer es o bien mapearlos o bien anotarlos pero siempre pedirle los beans a spring

Saludos.

Etiquetas: clase, servlet, spring
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 16:38.