Adam Hardy
Fri, 02 May 2008 04:01:43 -0700
What threw me off the scent is the update method I have on my business managers, on which the transactional boundary is set in Spring.
The update() method doesn't sit well with JPA. As you rightly said, all that is needed to trigger an update is a transaction.
In effect, the update() method on my business manager doesn't have to contain any code at all - just the fact that it invokes the transaction will be enough to ensure that all the entities in the entity manager are flushed.
And that's not good for intuitiveness - if someone new read the code and saw that I had edited 2 entities but only called update() on one, they would obviously ask why on earth the second entity magically updated. I guess I'll have to work out a refactoring.
Alexander Snaps on 02/05/08 10:18, wrote:
It'll probably be around the tx...I've been doing this within Swing apps, trying to fix the wizard in Netbeans around JSR 295, 296 and JPA. Come see mypresentation at JavaOne on the subject ;) But I need to see if this can be applied to this situation. I still don't get how changes done while applying the values actually are within a tx demarcation... Doesn't translate in some weird tx management issue? Why would you have the tx begin during these phases?On Fri, May 2, 2008 at 11:11 AM, Adam Hardy < [EMAIL PROTECTED]> wrote:Alexander Snaps on 02/05/08 10:04, wrote:On Thu, May 1, 2008 at 5:49 PM, Eric D. Nielsen <[EMAIL PROTECTED]> wrote:Alexander Snaps <alex.snaps <at> gmail.com> writes:no, w/o tx nothing ever gets flushed to the db... I explained the behavior you'd get in a previous message. I'll check out the code on myI know I am repeating myself, but what is getting in the way of NOTstartinga transaction at all in the case of a validation error... Shoudn't the transaction be started much later anyways, and only if validationpassed?Because that doesn't solve the problem. No transaction has been started explicitly. The underlying problem is that there are twosources of implicit transactions that can be triggered.1) Explict session/entityManager.flush() in the cleanup code of OSIV/OEMIV filters2) Implicit flush before queries. FlushMode settings appear to help insome cases, but I've seen reports where it appears that the setting isn't always respected.If a transaction hasn't been started, either of these cases (ie fallingout the bottom of OSIV/OEMIV, or a lazy load query) can trigger writing data to the DB.flight to SF (should I remember to check it out of scm ;) ) I'll try to get back to you with something more concrete...I for one will be interested to see what you come up with!
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]