Hi All,

I've started a new simple project using stripes and stripersist/hibernate.
As the basic development is finished I wanted to add some testing.
Folowing the example given in 
http://www.stripesframework.org/display/stripes/Unit+Testing I've used 
MockServletContext.
I want to test my UserActionBean. This class has simple handler method such as 
list(), view(), cancel(), create(), edit(), save(), delete() and update();
I also have a getter and setter for the User entity.
The update() method handler is as simple as:

public Resolution update() {
    getDao().save(getUser());
    getDao().commit();
    return new RedirectResolution(this.getClass(), "view").addParameter("user", 
getUser());
}

The delete() method handler:

  public Resolution delete() {
    getDao().delete(getUser ());
    getDao().commit();
    return new RedirectResolution(this.getClass());
  }

I've writen a test class UserActionBeanTest and all test run correctly (list, 
view, create, save ...) but the update and delete one.

@Test
public void testDelete() throws Exception {
  User user = createUser();
  MockRoundtrip mockRoundtrip = new MockRoundtrip(getServletContext(), 
UserActionBean.class);
  mockRoundtrip.addParameter("user", String.valueOf(user.getId()));
  mockRoundtrip.execute("delete");
  String redirectUrl = (new 
RedirectResolution(UserActionBean.class)).getUrl(Locale.getDefault());
  verifyDestination(mockRoundtrip, redirectUrl);
}

@Test
public void testUpdate() throws Exception {
  User user = createUser();
  MockRoundtrip mockRoundtrip = new MockRoundtrip(getServletContext(), 
UserActionBean.class);
  mockRoundtrip.addParameter("user", String.valueOf(user.getId()));
  mockRoundtrip.addParameter("user.name", "newName");
  mockRoundtrip.execute("update");
  RedirectResolution redirectResolution = new 
RedirectResolution(UserActionBean.class, "view").addParameter("user", user);
  String redirectUrl = redirectResolution.getUrl(Locale.getDefault());
  verifyDestination(mockRoundtrip, redirectUrl);
  assertUserUpdated(user);
}

When I run them I received some error message saying that the object user is 
detached.

For Update:

javax.persistence.PersistenceException: 
org.hibernate.PersistentObjectException: detached entity passed to persist: 
com.package.model.User
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:678)
                at com.package.dao.jpa.JpaBaseDao.save(JpaBaseDao.java:121)
                at 
com.package.action.admin.EntityAdminBean.update(EntityAdminBean.java:82)
                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 
net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:467)
                at 
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
                at 
net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
                at 
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
                at 
net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
                at 
net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:465)
                at 
net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:278)
                at 
net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:160)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
                at 
net.sourceforge.stripes.mock.MockFilterChain.doFilter(MockFilterChain.java:66)
                at 
net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)
                ... 31 more
Caused by: org.hibernate.PersistentObjectException: detached entity passed to 
persist: com.package.model.User
                at 
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)
                at 
org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
                at 
org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
                at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)
                at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:672)

For Delete:

java.lang.IllegalArgumentException: Removing a detached instance 
com.package.model.User#95
                at 
org.hibernate.ejb.event.EJB3DeleteEventListener.performDetachedEntityDeletionCheck(EJB3DeleteEventListener.java:65)
                at 
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:107)
                at 
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:73)
                at 
org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:956)
                at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:934)
                at 
org.hibernate.ejb.AbstractEntityManagerImpl.remove(AbstractEntityManagerImpl.java:702)
                at com.package.dao.jpa.JpaBaseDao.delete(JpaBaseDao.java:70)
                at 
com.package.action.admin.EntityAdminBean.delete(EntityAdminBean.java:68)
                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 
net.sourceforge.stripes.controller.DispatcherHelper$6.intercept(DispatcherHelper.java:467)
                at 
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158)
                at 
net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113)
                at 
net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155)
                at 
net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74)
                at 
net.sourceforge.stripes.controller.DispatcherHelper.invokeEventHandler(DispatcherHelper.java:465)
                at 
net.sourceforge.stripes.controller.DispatcherServlet.invokeEventHandler(DispatcherServlet.java:278)
                at 
net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:160)
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
                at 
net.sourceforge.stripes.mock.MockFilterChain.doFilter(MockFilterChain.java:66)
                at 
net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247)

I really can't work out what's wrong and why the object is detached when using 
MockServletContext.
If any one could help it would be much appreciated.
Don't hesitate to ask if you need more info.

Thanks.

Seb
------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to