Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110

    SPRING FRAMEWORK: Errore nella connessione ad un database

    Ciao, sono nuovo in Spring. Sto sviluppando un'applicazione in stile MVC che gestisce un repository di servizi. Per ora devo solo listare dei servizi presenti in un database, ma non riesco a connettermi al database utilizzando getSimpleJdbcTemplate. Mi viene data quest'eccezione:

    codice:
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    
    root cause
    
    java.lang.NullPointerException
    	spring.repository.JdbcServiceDao.getServiceList(JdbcServiceDao.java:25)
    	spring.service.SimpleServiceManager.getServices(SimpleServiceManager.java:20)
    	spring.TestController.handleRequest(TestController.java:30)
    	org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    L'eccezione viene in pratica lanciata in JdbcServiceDao.java alla riga in cui chiamo getSimpleJdbcTemplate.

    Riporto web.xml:

    codice:
    		
    	<display-name>Repository Services</display-name>
    	
    	<context-param>
    		<param-name>
    			contextConfigLocation
    		</param-name>
    		<param-value>
    			WEB-INF/applicationContext.xml
    		</param-value>
    	</context-param>
    	
    	<listener>
    		<listener-class>
    			org.springframework.web.context.ContextLoaderListener
    		</listener-class>
    	</listener>
    	
    	<servlet>
    		<servlet-name>spring</servlet-name>
    		<servlet-class>
    			org.springframework.web.servlet.DispatcherServlet
    		</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	
    	<servlet-mapping>
    		<servlet-name>spring</servlet-name>
    		<url-pattern>*.htm</url-pattern>
    	</servlet-mapping>
    	
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    	
    </web-app>
    Ecco applicationContext.xml

    codice:
    <beans ...
    		
    	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    		<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    		<property name="url" value="jdbc:hsqldb:hsql://localhost"/>
    		<property name="username" value="sa"/>
    		<property name="password" value=""/>
    	</bean>	
    		
    	<bean id="serviceManager" class="spring.service.SimpleServiceManager">
    		<property name="serviceDao" ref="serviceDao"/>
    	</bean>
    	
    	<bean id="serviceDao" class="spring.repository.JdbcServiceDao">
    		<property name="dataSource" ref="dataSource"/>
    	</bean>
    		
    </beans>
    TestController.java

    codice:
    package spring;
    
    import org.springframework.web.servlet.mvc.Controller;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import java.io.IOException;
    import java.util.Map;
    import java.util.HashMap;
    
    import spring.service.*;
    
    public class TestController implements Controller {
    
    	protected final Log logger = LogFactory.getLog(getClass());
    	
    	private ServiceManager serviceManager = new SimpleServiceManager();
    
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		Map<String, Object> myModel = new HashMap<String, Object>();
    		logger.info("Pre getthisservices");
    		myModel.put("services", this.serviceManager.getServices());
    
    		return new ModelAndView("service", "model", myModel);
    	}
    	
    	public void setServiceManager(ServiceManager serviceManager) {
    		this.serviceManager = serviceManager;
    	}
    	
    }
    SimpleServiceManager.java

    codice:
    package spring.service;
    
    import java.util.List;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import spring.domain.Service;
    import spring.repository.*;
    
    public class SimpleServiceManager implements ServiceManager{
    
    	// private List<Product> products;
    	private ServiceDao serviceDao = new JdbcServiceDao();
    	protected final Log logger = LogFactory.getLog(getClass());
    
    	public List<Service> getServices() {
    		// return services;
    		logger.info("Getting services!");
    		return serviceDao.getServiceList();
    	}
    
    	public void setServiceDao(ServiceDao serviceDao) {
    		this.serviceDao = serviceDao;
    	}
    }
    JdbcServiceDao.java

    codice:
    package spring.repository;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    import java.util.*;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
    import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
    
    import spring.domain.Service;
    
    public class JdbcServiceDao extends SimpleJdbcDaoSupport implements ServiceDao {
    
    	/** Logger for this class and subclasses */
    	protected final Log logger = LogFactory.getLog(getClass());
    	
    	public List<Service> getServiceList() {
    
    		logger.info("Getting services!");
    		
    		return getSimpleJdbcTemplate().query("select id, archivio, nome from ServicePar", new ParameterizedRowMapper<Service>(){
    			public Service mapRow(ResultSet rs, int rowNum) throws SQLException {
    				Service serv = new Service();
    				serv.setId(rs.getInt("id"));
    				serv.setArchivio(rs.getString("archivio"));
    				serv.setNome(rs.getString("nome"));
    				return serv;
    			}
    		});
    	}
    	
    }
    Io credo che l'eccezione venga lanciata perchè il dataSource non viene creato correttamente e getSimpleJdbcTemplate va ad operare su un oggetto nullo. Mi sbaglio? Penso ciò perchè se creo manualmente la connessione con la vecchia logica Jdbc, il tutto funziona e la view mi mostra correttamente i campi del database richiesti:

    codice:
    public List<Service> getServiceList() {
    
    		logger.info("Getting services!");
    		
    		List<Service> services = new ArrayList<Service>();
    		Service serv = new Service();
    
    		try
    		{
    			// Load Sun's jdbc-odbc driver
    			Class.forName("org.hsqldb.jdbcDriver").newInstance();
    		}
    		catch (ClassNotFoundException cnfe) // driver not found
    		{
    			logger.info("Unable to load database driver");
    			logger.info(cnfe);
    		}
    		catch (IllegalAccessException cnfe) // driver not found
    		{
    			logger.info(cnfe);
    		}
    		catch (InstantiationException cnfe) // driver not found
    		{
    			logger.info(cnfe);
    		}
    		try{
    			Connection db_connection = 
    			DriverManager.getConnection ("jdbc:hsqldb:hsql://localhost", "sa", "");
    			Statement db_statement = db_connection.createStatement();
    			ResultSet result = db_statement.executeQuery
    			("select id, archivio, nome from ServicePar");
    			while (result.next() )
    			{
    				// Use the getInt method to obtain emp. id
    				serv.setId(result.getInt("id"));
    				serv.setArchivio(result.getString("archivio"));
    				serv.setNome(result.getString("nome"));
    				services.add(serv);
    			}
    		}
    		catch(SQLException e)
    		{
    			logger.info(e);
    		}
    		
    		return services;
    		
    	}
    A questo punto credo solo ci sia un errore nella configurazione del dataSource, dato che sicuramente i parametri per l'accesso al database sono corretti.
    Grazie a tutti in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110
    Nessuno sa consigliarmi qualche altro forum dove postare questo problema? Ho provato su quello ufficiale di spring ma finchè il moderatore non mi attiva il post, il thread non sarà visibile a nessuno.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.