Issue
I'm setting up a new, JPA+Spring project. What is the difference (for me as a programmer) between:
<tx:annotation-driven transaction-manager="transactionManager" />
and
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager" />
in my applicationContext.xml?
Solution
There is a huge difference between Proxies and byte code woven aspects. Proxies can only intercept if the invocation comes from “outer space”, but not if the invocation comes from the object itself (this.transactionalMethod())
This means if you have a Class with two methods, T and B. Method T
has a transaction annotation, and method B
invokes T
by “this.T()
”, then the proxy is never invoked (for T
) so there is no transaction handling in this case!
If you use AspectJ the transaction handling code is woven in the byte code of T
, and it will be executed no matter if the invocation comes from the object itself or from an other object.
Answered By - Ralph
Answer Checked By - Clifford M. (JavaFixing Volunteer)