Thanks Matt,

That pointed me in the right direction. Should have seen the
"Versioning.increment" in the Stack Trace myself. The problem turned out to
be that I was not initializing the version field with an integer value in
the  SQL table insert I used to create the test data.

Thanks again for the great work with the Appfuse project. I have gotten a
lot of great ideas from your work, and pattern my projects very closely to
what you have done with Appfuse.

Kent


wskent wrote:
> 
> Anyone have any ideas why I would be getting the following
> NullPointerException on the flush() in BaseDaoTestCase?
> 
> DEBUG [main] RoleDaoTest.testUpdateRole(11) | testUpdateRole()...
> DEBUG [main] RoleDaoHibernate.getRoleByName(44) | getRoleByName: from Role
> where name='ROLE_USER'
> DEBUG [main] SQL.log(401) | select role0_.ID as ID1_, role0_.version as
> version1_, role0_.NAME as NAME1_, role0_.DESCRIPTION as DESCRIPT4_1_ from
> GDEV.TGADATA.ROLE role0_ where role0_.NAME=?
> Hibernate: select role0_.ID as ID1_, role0_.version as version1_,
> role0_.NAME as NAME1_, role0_.DESCRIPTION as DESCRIPT4_1_ from
> GDEV.TGADATA.ROLE role0_ where role0_.NAME=?
> DEBUG [main] RoleDaoHibernate.save(97) | role's id: 2
> DEBUG [main] RoleDaoHibernate.save(106) | Ignoring NullPointerException
> for flush()
> ERROR [main] RoleDaoTest.flush(70) | Error: null
> java.lang.NullPointerException
>       at org.hibernate.type.IntegerType.next(IntegerType.java:59)
>       at org.hibernate.engine.Versioning.increment(Versioning.java:108)
>       at
> org.hibernate.event.def.DefaultFlushEntityEventListener.getNextVersion(DefaultFlushEntityEventListener.java:365)
>       at
> org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:257)
>       at
> org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:128)
>       at
> org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
>       at
> org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
>       at
> org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
>       at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
>       at
> org.springframework.orm.hibernate3.HibernateTemplate$27.doInHibernate(HibernateTemplate.java:818)
>       at
> org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
>       at
> org.springframework.orm.hibernate3.HibernateTemplate.flush(HibernateTemplate.java:816)
>       at
> com.centricgroup.core.dao.BaseDaoTestCase.flush(BaseDaoTestCase.java:67)
>       at
> com.centricgroup.core.dao.RoleDaoTest.testUpdateRole(RoleDaoTest.java:15)
>       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:585)
>       at junit.framework.TestCase.runTest(TestCase.java:168)
>       at junit.framework.TestCase.runBare(TestCase.java:134)
>       at
> org.springframework.test.ConditionalTestCase.runBare(ConditionalTestCase.java:76)
>       at junit.framework.TestResult$1.protect(TestResult.java:110)
>       at junit.framework.TestResult.runProtected(TestResult.java:128)
>       at junit.framework.TestResult.run(TestResult.java:113)
>       at junit.framework.TestCase.run(TestCase.java:124)
>       at junit.framework.TestSuite.runTest(TestSuite.java:232)
>       at junit.framework.TestSuite.run(TestSuite.java:227)
>       at
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
>       at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
>       at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
>       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
>       at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
> DEBUG [main] RoleDaoHibernate.getRoleByName(44) | getRoleByName: from Role
> where name='ROLE_USER'
> ERROR [main] RoleDaoHibernate.getRoleByName(63) | NPE Error: null
> 
> 
> Here is the pertinent part of the Test class - 
> public class RoleDaoTest extends BaseDaoTestCase {
>     
>       private RoleDao roleDao;
>     
>     public void testUpdateRole() throws Exception {
>       log.debug("testUpdateRole()...");
>         Role role = roleDao.getRoleByName("ROLE_USER");
>         role.setDescription("test descr");
>         roleDao.save(role);
>         flush();
>         
>         role = roleDao.getRoleByName("ROLE_USER");
>         assertEquals("test descr", role.getDescription());
>     }
> 
> Here is the BaseDaoTestCase
> public class BaseDaoTestCase 
>       extends AbstractTransactionalDataSourceSpringContextTests {
> ...
>     protected void flush() {
>         try {
>               HibernateTemplate hibernateTemplate =
>                       new HibernateTemplate((SessionFactory) 
>                                       
> applicationContext.getBean("sessionFactory1"));
>               hibernateTemplate.flush();
>               hibernateTemplate.clear();
>         } catch(NullPointerException npe) {
>               log.error("Error: " + npe.getMessage());
>               npe.printStackTrace();
>         }
>     }
> 
> Here is the Hibernate DAO implementation - 
> public class RoleDaoHibernate extends HibernateDaoSupport
>               implements RoleDao {
> ...
>     public Role getRoleByName(String rolename) {
>       
>       try {
> 
>               List roles = getHibernateTemplate().find("from Role where 
> name=?",
>                               rolename);
> 
>               if (roles.isEmpty()) {
>                   return null;
>               } else {
>                   return (Role) roles.get(0);
>               }
>       } catch(SQLGrammarException sge) {
>               log.error("SQL Grammar Error: " + sge.getMessage());
>               sge.printStackTrace();
>               return null;
>       } catch(NullPointerException npe) {
>               log.error("NPE Error: " + npe.getMessage());
>               npe.printStackTrace();
>               return null;
>       }
>         
>     }
> 
> *Note - The hibernate dialect is DB2400
> 
> THX,
> 
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/NullPointerException-in-flush%28%29-tp18080211s2369p18098955.html
Sent from the AppFuse - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to