Hi all,
I wish to report an issue I can't completely understand.
In my application I created a BusinessManager to hold all business-
logic methods that need to be ran in the same transaction, and
declared it in applicationContext-service.xml to rollback on a
BusinessMethodException
<tx:advice id="businessManagerTxAdvice">
<tx:attributes>
<tx:method name="process*" read-only="false" rollback-
for="BusinessMethodException" no-rollback-
for="ObjectRetrievalFailureException"/>
<tx:method name="save*" read-only="false" rollback-
for="BusinessMethodException"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
Nothing special here, I think. Inside the process* methods, I check
the data I have to process and I throw a new BusinessMethodException
with a string that I can use to lookup a description in i18 properties:
throw new BusinessMethodException( "errors.invalid-argument");
In the action I'd like to catch the exception like this:
catch(BusinessMethodException e) {
addActionError( getText( e.getMessage() ) );
return ERROR;
}
The problem is that Spring intercept the exception and overrides it,
so in the action i don't get a BusinessMethosException but a
UnexpectedRollbackException
08:09:03,203 ERROR (TransactionAspectSupport.java:350) - Application
exception overridden by commit exception
service.BusinessMethodException: batch.error.attivi
at
cinetica.tism.service.impl.BusinessManagerImpl.processChangePinStatus
(BusinessManagerImpl.java:149)
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:324)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(
AopUtils.java:318)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinp
oint(ReflectiveMethodInvocation.
java:203)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
(ReflectiveMethodInvocation.java:162
)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invok
e(TransactionInterceptor.java:10
7)
Is this the intended behaviour? Is there a way to retrieve the
original exception?
TIA
--
"That's thirty minutes away. I'll be there in ten." -- Mr. Wolfe
Marco Papini
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]