Hello again folks I'm trying to get a simple Spring+Hibernate webapp running on a local JBoss server and an Oracle DB. The problem is I keep getting a NullPointerException for my hibernateTemplate object which should come from my injected SessionFactory (which is not null). Anyone seen this before and know why it might be happening?
Here are my important files:
qstestapp-servlet.xml
QueryManagerBean.javaCode:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <!-- - Application context definition for "qstestapp" DispatcherServlet. --> <beans> <bean id="qstestController" class="com..."/> <!-- Form Controller for the "Controls" page --> <bean id="controlFormController" class="com..."> <property name="sessionForm"><value>true</value></property> <property name="formView"><value>priceincrease</value></property> <property name="successView"><value>test.htm</value></property> </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/controls.htm">qstestController</prop> <prop key="/results.htm">qstestController</prop> <prop key="/test.htm">qstestController</prop> </props> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property> <property name="prefix"><value>/WEB-INF/jsp/</value></property> <property name="suffix"><value>.jsp</value></property> </bean> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@someplace:1521:DMS1_DEV"/> <property name="username" value="user"/> <property name="password" value="pass"/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="myDataSource"/></property> <property name="mappingResources"> <list> <value>/WEB-INF/qstestapp.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.Oracle9Dialect</value> </property> </bean> <bean id="myQueryManager" class="com..."> <property name="sessionFactory" ref="mySessionFactory"/> </bean> </beans>
Code:package com...; import java.util.List; import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.orm.hibernate3.HibernateCallback; import org.hibernate.Session; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessResourceFailureException; public class QueryManagerBean implements QueryManager { private HibernateTemplate hibernateTemplate; public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public List getData() throws DataAccessException { return (List) this.hibernateTemplate.execute(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException { Query query = session.createQuery("from SomeObject"); return query.list(); } }); } }
Thanks
Chris


Reply With Quote
, ok another problem solved. Glad you're starting to understand more about it. There was another thread talking about DaoSupport recently. It personally think the various DaoSupport classes are useful, but not essential. You are effectively tied either way either extending HibernateDaoSupport or using HibernateTemplate. The reference manual actually shows two examples using HibernateTemplate, one extending HibernateDaoSupport one not. There isn't really that much in it. I personally think that the most useful bit of it all is HibernateTemplate. I would spend some time having a look at the various methods. Your QueryManagerBean code for example could be simplified by using HibernateTemplate.loadAll(..) or HibernateTemplate.find(..).