I'm using JBoss 4.0.4CR2, EJB3 RC6. Whenever StaleObjectStateException is thrown, it comes wrapped in an IllegalArgumentException and I'm wondering why this is done. It's not a huge deal but just seems to make things unnecessarily inconvenient.
The StaleObjectStateException is very meaningful while IllegalArgumentException is much less so and instead of just catching the exception I'm looking for, I have to catch a much wider variety and check the getCause() to see what really happened. Below is the actual stack trace: javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [net.lgsystems.org.organization.entity.User#<null>] | at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69) | at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) | at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:192) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at net.lgsystems.jboss.security.LgsRoleBasedAuthorizationInterceptor.invoke(LgsRoleBasedAuthorizationInterceptor.java:134) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:181) | at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79) | at $Proxy175.saveUser(Unknown Source) | at net.lgsystems.util.test.OptimisticLockingTest$TestThread.run(OptimisticLockingTest.java:91) | Caused by: java.lang.IllegalArgumentException: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [net.lgsystems.org.organization.entity.User#<null>] | at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:205) | at org.jboss.ejb3.entity.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:181) | at net.lgsystems.org.organization.mgr.UserMgrImpl.updateUser(UserMgrImpl.java:110) | at net.lgsystems.org.organization.ejb.OrganizationManagementBean.saveUser(OrganizationManagementBean.java:76) | 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.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:109) | at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:168) | at net.lgsystems.access.core.AccessInterceptor.process(AccessInterceptor.java:83) | at sun.reflect.GeneratedMethodAccessor80.invoke(Unknown Source) | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) | at java.lang.reflect.Method.invoke(Method.java:585) | at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:120) | at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:62) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) | at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98) | at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) | ... 18 more | Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [net.lgsystems.org.organization.entity.User#<null>] | at org.hibernate.event.def.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:240) | at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:99) | at org.hibernate.event.def.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:51) | at org.hibernate.impl.SessionImpl.fireMerge(SessionImpl.java:676) | at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:660) | at org.hibernate.impl.SessionImpl.merge(SessionImpl.java:664) | at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:202) | ... 39 more | 20 View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3942959#3942959 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3942959 ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ JBoss-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jboss-user
