Results 1 to 3 of 3

Thread: getting a nullpointer with hibernateTemplate

  1. #1

    Default getting a nullpointer with hibernateTemplate

    I am not sure what is going on. I am getting a null pointer on a hibernateTemplate.

    I am using Hibernate 3, ACEGI and Spring WebMVC. I am also tring to get declaritive transactions working.

    I will paste my config files below. I have a controller that adds an object to the database, that works. Then I call an appPemission() which uses a ultilty class called AbstractHibernateSpringDAO which extends the HibernateDaoSupport. The AbstractHibernateSpringDAO tried to save its permission object to the database its hibernateTemplate is null.

    Code:
    public class AppDAOHibernate extends AbstractHibernateSpringDAO implements AppDAO {
    
      private BasicAclExtendedDao basicAclExtendedDao;
    .....
    edu.bju.shared.model.security.dao.AppDAO#save(edu.bju.shared.model.security.App)
       */
      public void save(App app) {
        super.saveOrUpdate(app);
    
      }
    public void addPermission(long parentObject, SimpleAclEntry acl, int permissionMask, String recipient) {
      super.addPermission(App.class.getName(), parentObject, acl, permissionMask, recipient);
    }
    ....
    }
    Code:
    public abstract class AbstractHibernateSpringDAO extends HibernateDaoSupport implements GenericDAO{
    
    public AbstractHibernateSpringDAO(){}
    
    public void saveOrUpdate(Object obj){
      getHibernateTemplate().saveOrUpdate(obj);
    }
    public void delete(Object obj){
      getHibernateTemplate().delete(obj);
    }
    public Object find(Class clazz, Long id){
      return getHibernateTemplate().load(clazz, id);
    }
    public List findAll(Class clazz){
      return getHibernateTemplate().find("from " + clazz.getName());
    }
    public void addPermission(String className, long parentObject, SimpleAclEntry acl, int permissionMask, String recipient){
      AclObjectIdentity aclObject = new AclObjectIdentity();
      aclObject.setAclClass(acl.getClass().getName());
      aclObject.setParentObject(parentObject);
      aclObject.setObjectIdentity(className);
      AclObjectIdentityDAOHibernate aclObjectDao = new AclObjectIdentityDAOHibernate();
      aclObjectDao.save(aclObject);
      
      AclPermission aclPer = new AclPermission();
      aclPer.setAclObjectIdentity(aclObject);
      aclPer.setMask(new Integer(permissionMask));
      aclPer.setRecipient(recipient);
      AclPermissionDAOHibernate aclPerDAO = new AclPermissionDAOHibernate();
      aclPerDAO.save(aclPer);
    
    }
    public void deletePermission(){
      
    }
    /* (non-Javadoc)
     * @see edu.bju.aem.util.GenericDAO#startOperation()
     */
    public void startOperation() {
      // TODO Auto-generated method stub
    
    }
    }
    Code:
    	   
    	<bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="mappingResources">
    			<list>
    				<value>edu/bju/aem/model/Service.hbm.xml</value>
    				<value>edu/bju/aem/model/OS.hbm.xml</value>
    				<value>edu/bju/aem/model/mapping/Server.hbm.xml</value>
    				<value>edu/bju/aem/model/Database.hbm.xml</value>
    				<value>edu/bju/shared/model/people/mapping/PersonWareHouse.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/App.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AppRole.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AppRights.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AclObjectIdentity.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AclPermission.hbm.xml</value>
    			</list>
    		</property>
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
    				<prop key="hibernate.show_sql">true</prop>
    				<prop key="format_sql">true</prop>
    			</props>
    		</property>
    		<property name="dataSource">
    			<ref bean="dataSource" />
    		</property>
    
    	</bean>
     
      <bean id="txProxyTemplate" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
            <property name="transactionAttributes">
                <props>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="load*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="delete*">PROPAGATION_REQUIRED</prop>
                    <prop key="add*">PROPAGATION_REQUIRED</prop>
                    <prop key="find*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
        
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory"><ref bean="factory"/></property>
        </bean>
    
    <bean id="appDAOHibernateManaged" parent="txProxyTemplate">
            <property name="target">
                <bean class="edu.bju.shared.model.security.dao.AppDAOHibernate">
                    <property name="sessionFactory"><ref bean="factory"/></property>
                </bean>
            </property>
            <property name="preInterceptors">
                <list>
                    <ref bean="securityInterceptor"/>
                </list>
            </property>
        </bean>
    stacktrace
    Code:
    10:53:49,265 INFO  [STDOUT] Hibernate: insert into AEM.APPS (APPNAME, DESCRIPTION, ENTITYPACKAGE, ID) values (?, ?, ?, ?)
    10:54:24,953 ERROR [DispatcherServlet] Could not complete request
    java.lang.NullPointerException
    	at edu.bju.shared.util.spring.AbstractHibernateSpringDAO.saveOrUpdate(AbstractHibernateSpringDAO.java:32)
    	at edu.bju.shared.model.security.dao.AclObjectIdentityDAOHibernate.save(AclObjectIdentityDAOHibernate.java:40)
    	at edu.bju.shared.util.spring.AbstractHibernateSpringDAO.addPermission(AbstractHibernateSpringDAO.java:49)
    	at edu.bju.shared.model.security.dao.AppDAOHibernate.addPermission(AppDAOHibernate.java:56)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:335)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
    	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
    	at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
    	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
    	at $Proxy54.addPermission(Unknown Source)
    	at 
    ....
    10:54:24,953 ERROR [[aemApp]] Servlet.service() for servlet aemApp threw exception

  2. #2

    Default

    OK I fixed the null pointer problem. In the AbstractHibernateSpringDAO I was constructing 2 other DAOs. I changed the code get them from beans in Spring and now no null pointer.

    But my transaction is not actually commiting. What am I doing wrong

    Code:
    	   
    	<bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="mappingResources">
    			<list>
    				<value>edu/bju/aem/model/Service.hbm.xml</value>
    				<value>edu/bju/aem/model/OS.hbm.xml</value>
    				<value>edu/bju/aem/model/mapping/Server.hbm.xml</value>
    				<value>edu/bju/aem/model/Database.hbm.xml</value>
    				<value>edu/bju/shared/model/people/mapping/PersonWareHouse.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/App.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AppRole.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AppRights.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AclObjectIdentity.hbm.xml</value>
    				<value>edu/bju/shared/model/security/mapping/AclPermission.hbm.xml</value>
    			</list>
    		</property>
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop>
    				<prop key="hibernate.show_sql">true</prop>
    				<prop key="format_sql">true</prop>
    			</props>
    		</property>
    		<property name="dataSource">
    			<ref bean="dataSource" />
    		</property>
    
    	</bean>
     
      <bean id="txProxyTemplate" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
            <property name="transactionAttributes">
                <props>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="load*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="delete*">PROPAGATION_REQUIRED</prop>
                    <prop key="add*">PROPAGATION_REQUIRED</prop>
                    <prop key="find*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
        
            <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory"><ref bean="factory"/></property>
        </bean>
    
    <bean id="appDAOHibernateManaged" parent="txProxyTemplate">
            <property name="target">
                <bean class="edu.bju.shared.model.security.dao.AppDAOHibernate">
                    <property name="sessionFactory"><ref bean="factory"/></property>
                </bean>
            </property>
            <property name="preInterceptors">
                <list>
                    <ref bean="securityInterceptor"/>
                </list>
            </property>
        </bean>
    updated AbstractHibernateSpringDAO code

    Code:
    public abstract class AbstractHibernateSpringDAO extends HibernateDaoSupport implements GenericDAO{
    
    public AbstractHibernateSpringDAO(){}
    
    public void saveOrUpdate(Object obj){
      getHibernateTemplate().saveOrUpdate(obj);
    }
    public void delete(Object obj){
      getHibernateTemplate().delete(obj);
    }
    public Object find(Class clazz, Long id){
      return getHibernateTemplate().load(clazz, id);
    }
    public List findAll(Class clazz){
      return getHibernateTemplate().find("from " + clazz.getName());
    }
    public void addPermission(String className, long parentObject, SimpleAclEntry acl, int permissionMask, String recipient){
      AclObjectIdentity aclObject = new AclObjectIdentity();
      aclObject.setAclClass(acl.getClass().getName());
      aclObject.setParentObject(parentObject);
      aclObject.setObjectIdentity(className);
      ApplicationContext ctx = new ClassPathXmlApplicationContext("WEB-INF/*-context.xml");
      AclObjectIdentityDAOHibernate aclObjectDao = (AclObjectIdentityDAOHibernate)ctx.getBean("AclObjectIdentityDAOHibernate");
     // AclObjectIdentityDAOHibernate aclObjectDao = new AclObjectIdentityDAOHibernate();
      aclObjectDao.save(aclObject);
      
      AclPermission aclPer = new AclPermission();
      aclPer.setAclObjectIdentity(aclObject);
      aclPer.setMask(new Integer(permissionMask));
      aclPer.setRecipient(recipient);
      AclPermissionDAOHibernate aclPerDAO = (AclPermissionDAOHibernate)ctx.getBean("AclPermissionDAOHibernate");
      //AclPermissionDAOHibernate aclPerDAO = new AclPermissionDAOHibernate();
      aclPerDAO.save(aclPer);
    
    }
    public void deletePermission(){
      
    }
    /* (non-Javadoc)
     * @see edu.bju.aem.util.GenericDAO#startOperation()
     */
    public void startOperation() {
      // TODO Auto-generated method stub
    
    }
    
    }

  3. #3

    Default

    ok well sadly I didn't get any help :-( but I did figure out what was happening. It was trying to update and not insert. I had to use the save and not saveOrUpdate method of the hibernateTemplate. Also I had a problem in a hibernate mapping file which had the id generator set to assigned and I had to make it native.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •