Doing my first stored procedure in Spring 3, and hitting a snag I haven't been able to figure out. According to the docs and online examples, it's right, but the DataSource is getting nulled when the service method is called that calls the procedure.
Log output confirms the datasource is being set from the bean on startup, and confirms that the datasource (in myDaoImpl) is null after the service method call.
I must be doing something stupid. Anyone have any thoughts?
In jdbc-context.xml (using a jdbc.properties file which works using a SimpleJdbcTemplate example):In myDaoImpl:Code:<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <bean id="myDaoImpl" class="com.mydomain.myapp.dao.MyDaoImpl"> <property name="dataSource" ref="dataSource"/> </bean>In the service object that calls the procedure:Code:public class myDaoImpl implements myDao { ... private DataSource dataSource; ... @Autowired public void setDataSource(DataSource dataSource) { LOGGER.info("setDataSource() called with " + dataSource.toString()); <- log confirms works this.dataSource = dataSource; } public String callProc(long id) { if (this.dataSource == null) { LOGGER.info("dataSource is NULL!"); <- get this in the log after the setDataSource above } else { LOGGER.info("dataSource is " + this.dataSource.toString()); } StoredProcedureMyDao proc = new StoredProcedureMyDao(this.dataSource); String result = proc.execute(id); LOGGER.info(result); return result; }Log snippets:Code:@Override public void callProc(long id) { MyDaoImpl dao = new MyDaoImpl(); String result = dao.callProc(leadId); if (!result.equals("OK")) { sendFailureMessage(leadId, result); } }Code:INFO : com.mydomain.myapp.dao.myDaoImpl - setDataSource() called with org.apache.commons.dbcp.BasicDataSource@41c7d56b ... INFO : com.mydomain.myapp.dao.myDaoImpl - dataSource is NULL! ... SEVERE: Servlet.service() for servlet [appServlet] in context with path [/MyApp] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException at com.mydomain.myapp.dao.StoredProcedureMyDao.<init>(StoredProcedureMyDao.java:32) at com.mydomain.myapp.dao.MyDaoImpl.callProc(MyDaoImpl.java:69) at com.mydomain.myapp.service.ServiceManagerImpl.callProc(ServiceManagerImpl.java:70) at com.mydomain.myapp.controller.NavigationController.doProc(NavigationController.java:202) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:84) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680)


Reply With Quote
