[jboss-user] [JBoss Seam] - Re: StaleStateException from entity activation

matt.drees do-not-reply at jboss.com
Thu Jul 12 15:25:09 EDT 2007


Ok, I've reproduced this situation in a simple test:


  | public class PassivatedEntityInParentConversationTest extends SeamTest {
  | 
  | 	@Test
  | 	public void test() throws Exception {
  | 		String cid = new FacesRequest("/page.xhtml") {
  | 			@Override
  | 			protected void invokeApplication() throws Exception {
  | 				Bar bar = new Bar();
  | 				bar.setName("bar1");
  | 				EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
  | 				entityManager.persist(bar);
  | 				Contexts.getConversationContext().set("bar", bar );
  | 				Manager.instance().beginConversation();
  | 			}
  | 		}.run();
  | 		
  | 		//bar is not passivated, because it was just added
  | 
  | 		cid = new FacesRequest("/page.xhtml", cid) {
  | 		}.run();
  | 
  | 		//bar is now passivated
  | 		
  | 		cid = new FacesRequest("/page2.xhtml", cid) {
  | 			@Override
  | 			protected void invokeApplication() throws Exception {
  | 				Manager.instance().beginNestedConversation();
  | 			}
  | 		}.run();
  | 		
  | 		cid = new FacesRequest("/page.xhtml", cid) {
  | 			@Override
  | 			protected void invokeApplication() throws Exception {
  | 				Bar bar = (Bar) Contexts.getConversationContext().get("bar");
  | 				bar.setName("bar2");
  | 				EntityManager entityManager = (EntityManager) getValue("#{entityManager}");
  | 				entityManager.flush();
  | 			}
  | 		}.run();
  | 
  | 		//bar is not passivated, because it is not in the current conversation, so its wrapper still holds the old version
  | 		
  | 		cid = new FacesRequest("/page.xhtml", cid) {
  | 			@Override
  | 			protected void invokeApplication() throws Exception {
  | 				Manager.instance().endConversation(false);
  | 			}
  | 		}.run();
  | 		
  | 		cid = new FacesRequest("/page.xhtml", cid) {
  | 		}.run();  //exception occurs here at ConversationContext.unflush
  | 	}
  | }
  | 

Exception: 

  | org.hibernate.StaleStateException: current database version number does not match passivated version number
  | 	at org.jboss.seam.persistence.HibernatePersistenceProvider.checkVersion(HibernatePersistenceProvider.java:174)
  | 	at org.jboss.seam.persistence.HibernatePersistenceProvider.checkVersion(HibernatePersistenceProvider.java:134)
  | 	at org.jboss.seam.contexts.PassivatedEntity.checkVersion(PassivatedEntity.java:133)
  | 	at org.jboss.seam.contexts.PassivatedEntity.getEntityFromEntityManager(PassivatedEntity.java:118)
  | 	at org.jboss.seam.contexts.PassivatedEntity.toEntityReference(PassivatedEntity.java:73)
  | 	at org.jboss.seam.contexts.EntityBean.activate(EntityBean.java:67)
  | 	at org.jboss.seam.contexts.ServerConversationContext.unflush(ServerConversationContext.java:234)
  | 	at org.jboss.seam.contexts.FacesLifecycle.resumeConversation(FacesLifecycle.java:129)
  | 	at org.jboss.seam.jsf.SeamPhaseListener.afterRestoreView(SeamPhaseListener.java:373)
  | 	at org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:211)
  | 	at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:184)
  | 	at org.jboss.seam.mock.BaseSeamTest$Request.restoreViewPhase(BaseSeamTest.java:706)
  | 	at org.jboss.seam.mock.BaseSeamTest$Request.emulateJsfLifecycle(BaseSeamTest.java:544)
  | 	at org.jboss.seam.mock.BaseSeamTest$Request.run(BaseSeamTest.java:487)
  | 	at org.uscm.crs.PassivatedEntityInParentConversationTest.test(PassivatedEntityInParentConversationTest.java:59)
  | 	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 org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:645)
  | 	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:479)
  | 	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:715)
  | 	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
  | 	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
  | 	at org.testng.TestRunner.runWorkers(TestRunner.java:673)
  | 	at org.testng.TestRunner.privateRun(TestRunner.java:620)
  | 	at org.testng.TestRunner.run(TestRunner.java:480)
  | 	at org.testng.SuiteRunner.runTest(SuiteRunner.java:278)
  | 	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:273)
  | 	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:253)
  | 	at org.testng.SuiteRunner.run(SuiteRunner.java:168)
  | 	at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:987)
  | 	at org.testng.TestNG.runSuitesLocally(TestNG.java:951)
  | 	at org.testng.TestNG.run(TestNG.java:719)
  | 	at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:73)
  | 	at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:122)
  | 

I created a jira issue.
http://jira.jboss.com/jira/browse/JBSEAM-1656

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4063690#4063690

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4063690



More information about the jboss-user mailing list