Re: Prevayler - update data
Karl Wettin <[email protected]> Fri, 26 Oct 2012 02:14:00 +0200
| Newsgroups | gmane.comp.java.prevayler |
|---|---|
| Message-ID | <[email protected]> |
26 okt 2012 kl. 01:05 skrev Bruno:
> I read the Baptism Problem. I got this part here:
>
> "To avoid the baptism problem, you just need to remove the code that references business objects directly inside Transactions. This can be done by, instead of receiving the business objects directly, looking them up through some sort of identification."
>
> If I understood I should not pass to a transaction class the real object. I mean this "code":
>
> Object o = prevayler.readObject("1");
> o.setName(o.getName() + "name");
> prevayler.persist(o);
>
> this is wrong, right?
>
> What should I do is this?
>
> Object o = prevayler.readObject("1");
> o.setName(o.getName() + "name");
> prevayler.persist(o.getId(), o.getName());
I take it this is a bit of pseudo code where persist() really represents prevayler.execute(new UpdateObjectNameTransaction(o.getId(), o.getName()));
If so, then you've got the concept! However, it should rather be:
> Object o = prevayler.readObject("1");
> prevayler.persist(o.getId(), o.getName() + "name");
I.e. you should probably not be changing your business objects outside of a transaction.
That is, unless you really know what you are doing. In some cases it might be possible to execute a transaction where you update the object outside of the transaction and pass down the complete object that you updated. In some of those cases I might also say that it's correct to do so (others here might not agree with this), it will however cause a whole bunch of caveats you'll need to be aware of. So simply avoid that for now.
I'm in the process of writing a bunch of example applications using Prevayler with escalating complexity, but so far I've only committed a single one. You are welcome to take a look at it, perhaps it can be of help. I've commented all classes as much as I can in order to show common problems.
<https://github.com/karlwettin/prevayler-examples/tree/master/e101/src/test/java/org/prevayler/examples/e101>
Be aware, it use Prevayler 2.6-SNAPSHOT so you'll need to clone Prevayler from github and then run "mvn install -Dtest=false -DfailIfNoTests=false " to install it to your local Maven repository before running the examples.
karl
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
_______________________________________________
"Databases in Memoriam" -- http://www.prevayler.org