Re: Design of Prevalent System and Commands With Regard to Transaction Security
Klaus Wuestefeld <[email protected]> Sun, 13 Jan 2013 21:48:07 -0200
| Newsgroups | gmane.comp.java.prevayler |
|---|---|
| Message-ID | <CAMAooZFjNv0VxTVUgs0Z8PV-0HPjtaKwSDcMvpfYYk2b6gutuQ@mail.gmail.com> |
> first one was apparently part of an older Prevayler version?) Yes. 2.5 or earlier. --- How do you deal with bugs that cause inconsistencies but don't throw exceptions? Klaus On Sun, Jan 13, 2013 at 6:07 PM, Elmar Weber <[email protected]> wrote: > Hi, > > I've been fiddling around with Prevayler and prevalence for some hours > now and worked around most of the kinks. However, how to design the > system and commands to get classical transaction features is still > something I'm not sure about, especially how to get the A in ACID. > > Since there is no easy rollback per se and exceptions are ignored and > even replayed, the commands must do all error checking before modifying > any data in the prevalent system. This gets harder to do the more > complex the commands are, e.g. when modifying entities that depend on > each other. And it still does not solve the problem what happens when an > exception occurs in a live system where despite error checking parts of > the transaction are executed and some are not. > > How do you work with this, especially, how are the system and commands > designed to mitigate these problems? > > I'm currently using a prevalent system class that just holds the state > and only exposes modifying methods to the sub package where the commands > are. The commands then do two things, first perform consistency checks > and then modify the data in the prevalent system when everything is OK. > This works to some degree but does not solve the actual problem > described above (exception after some data has already been modified), > or when executing several simple commands in a compound command. > > For a live system where consistency is a fundamental requirement, there > are only two options I could come up with (first one was apparently part > of an older Prevayler version?): > 1. "classical" rollback, make copy of system before applying transaction > (relational DBs can optimize this very good with regard to required > memory, to implement this efficiently in a prevalent system would > require some effort) > 2. Something along the following lines: when error occurs > - remove/ignore failed transactions from journal > - hold command execution and perform a restore of the system from the > last stored snapshot and journal > - resume command execution > > Thanks & regards, > Elmar > > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnmore_123012 > _______________________________________________ > To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion > _______________________________________________ > "Databases in Memoriam" -- http://www.prevayler.org -- Valeu, Klaus. ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnmore_123012 _______________________________________________ To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion _______________________________________________ "Databases in Memoriam" -- http://www.prevayler.org