Re: Postvayler

hakan eryargi <[email protected]> Tue, 14 Jun 2016 15:41:59 +0300
Newsgroups gmane.comp.java.prevayler
Message-ID <CAPg-4YW4-ro3Nx_1x0tbhceTHA3jfWSWVd8gc3nQ0viOTEkuhA@mail.gmail.com>
--===============2293654847755309842==
Content-Type: multipart/alternative; boundary=001a114b4642c2b93f05353c5454

--001a114b4642c2b93f05353c5454
Content-Type: text/plain; charset=UTF-8

Hi,

Maybe I should ask is Prevayler list dead? :)

Anyway, meanwhile I created some time and implemented proof of concept java
agent(1) and integration with Spring's load time weaving. Also persistence
root can be @Autowired into Spring context (2)

I guess Postvayler can now participate in databen.ch either with java
agent or Spring's load time weaving.

Also forked Spring's PetClinic sample and adapted for Postvayler (3)
https://github.com/raftAtGit/spring-petclinic

Cheers,
*r a f t*

1. Java agent works but does not cooperate with another agent, will
override other agent's bytecode if invoked later
2. Again with some limitations most possibly because of Spring's bug
http://stackoverflow.com/questions/37439267/spring-does-not-create-loadtimeweaver
Also @EnableAutoConfiguration somehow prevents Postvayler's load time
weaving kick-in on time.
3. This is also just a proof of concept and far less then optimal
implementation with minimal changes to original PetClinic source.

On Thu, Dec 17, 2015 at 11:58 AM, hakan eryargi <[email protected]>
wrote:

> Hi,
>
> Is databen.ch dead?
>
> On Fri, Dec 6, 2013 at 8:07 PM, Flavio W. Brasil <[email protected]>
> wrote:
>
>> Hi Hakan,
>>
>> This effort looks promising, congratulations! :)
>>
>> You could also use the databen.ch project to test the Postvayler
>> consistency/scalability. I'm really interested on the results.
>>
>> Cheers,
>>
>> --
>> Flavio W. Brasil
>>
>> On Friday, December 6, 2013 at 7:02 PM, hakan eryargi wrote:
>>
>> I believe the project has reached the proof of concept state:)
>>
>> I've extended the bank sample with accounts and money transfers and made
>> another bank sample which emulates instrumentation (ie, manually added
>> injected code) that helped a lot to visualize what is going on.
>>
>> adding objects to pool with a reliable id was a bit tricky but I guess
>> I've managed it with a special transaction which behaves different at
>> regular run and recovery time. see ConstructorTransaction for some details.
>>
>> allowing garbage collection with a WeakValueMap is also done. there is
>> also a trick here to trick GC not to garbage collect target objects before
>> we're done. see GCPreventingPrevayler for some details.**
>>
>> I've made two tests:
>> 1. run the same sequence of thousands of operations on both persisted and
>> non-persisted instances and checked the results for equality. this also
>> includes closing prevayler, recovering and going on. all seems good.
>> 2. run thousands of operations with many threads. no objects missed. I
>> wish to have a multi-threaded check final result test similar to first one
>> but I couldnt figure how.
>>
>> next things:
>> * scan all reachable @Persistent classes. at the moment generic
>> parameters (like collection types) is not parsed. I'm planning to scan all
>> packages of all reached @Persistent classes. this still does not guarantee
>> all required classes is instrumented (some one can extend a @Persistent
>> class in a totally different package), but there is a run time check to
>> catch that condition
>> * proper encapsulation. at the moment lots of things is public and anyone
>> can crash the system with a simple cast and java call
>> * more tests
>> * maybe a better trick to prevent GC
>> * cleanup and optimize compiler code
>> * ant build.xml (or maven?)
>> * an ant task for compiler
>> * support for spring dependency injection (at least injecting root as a
>> bean to other spring beans)
>> * some documentation
>> * adapt prevayler samples to postvayler
>> * what else?
>>
>> any feedback is welcome. please have a look at the samples (especially
>> the emulated sample) and speak up:)
>>
>> cheers,
>> r a f t
>>
>> ** after very very long multi-threaded runs sometimes an object is missed
>> (garbage collected). this happens very seldom and I suspect this is related
>> to JVM's runtime optimization. It may be detecting that our trick to
>> prevent GC is a noop and removing the call.
>>
>>
>> On Mon, Dec 2, 2013 at 11:57 PM, hakan eryargi <[email protected]>
>> wrote:
>>
>> runtime bytecode injection isnt a current objective. it may be possible
>> later or not, doesnt really matter in this stage. pre-instrumented classes
>> is good enough for now, like jibx.
>>
>> come on, you should have some faith in flying spagetti monster man:)
>>
>> seriously, if someone sees a flaw, which cant be done, please speak up,
>> so i wont spend unnecessary hours. to me all seems good for now.
>>
>> btw, details are constantly changing and evolving. i've shared the
>> project in a very early stage for discussion
>>
>> r a f t
>> On Dec 2, 2013 10:52 PM, "Naveen Chawla" <[email protected]> wrote:
>>
>> Hakan, Congratulations for carving out the time to attempt this.
>>
>> How easy do you think it would be to instrument the object, when it is
>> passed in, to simply journal all changes to non-transient fields, and batch
>> them into single journal entries when they occur during a synchronized lock
>> over the prevalent object?
>>
>> Can it all be done with run-time instrumentation from start to finish,
>> such that no annotations are necessary?
>>
>>
>> On 1 December 2013 23:12, hakan eryargi <[email protected]> wrote:
>>
>> i'm experimenting with the idea. so far not bad. just put what I've done
>> to GitHub. any suggestions, critics and contributions are welcome:)
>> https://github.com/raftAtGit/Postvayler
>>
>> apologies for the name, it sounded like a nice word play:)
>>
>> to run the sample, run the Compiler class
>> with raft.postvayler.samples.bank.Bank argument and then run
>> raft.postvayler.samples.bank.Main
>>
>> how it works:
>> compiler injects bytecode to root class and all @Persistent classes that
>> can be accesible* from root.
>>
>> root class contains an injected object pool, where each @Persistent class
>> is assigned a Long id and put into this object pool when created. this pool
>> will be* a WeakValueMap so objects which are not attached to root will be
>> garbage collected at some time.
>>
>> each @Persist method in a @Persistent class is instrumented like this:
>> @Persist
>> ReturnType doSomething(someParams) {..}
>>
>> doSomehing is copied to __postvayler__doSomething(..). the original doSomehing
>> becomes:
>>
>> ReturnType doSomething(someParams) {
>>     if (!there is postvayler context)
>>         return __postvayler__doSomething(..);
>>     if (we are in a prevayler transaction)
>>         return __postvayler__doSomething(..);
>>     return prevayler.execute(new MethodTransaction(..));
>> }
>>
>> the arguments to doSomehing(..) is transformed in MethodTransaction such
>> that references to @Persistent objects are replaced with Reference's,
>> which will later be restored from object pool. seems as this also solves
>> the Baptism problem.
>>
>> looks good to me for now:)
>>
>> cheers,
>> *r a f t*
>>
>> * not implemented yet
>>
>> On Wed, Nov 27, 2013 at 11:07 AM, Naveen Chawla <[email protected]>
>> wrote:
>>
>> Sure, here:
>> http://docs.oracle.com/javase/tutorial/java/generics/methods.html
>>
>> As for consistency, any multi-changes explicitly synchronized over
>> prevalentObject can be auto-batched.
>>
>>
>> On 27 November 2013 00:25, Klaus Wuestefeld <[email protected]> wrote:
>>
>> > It is ordinary generic method syntax.
>>
>> Could you point me to some doc on this syntax? I couldnt find it here:
>> http://docs.oracle.com/javase/tutorial/extra/generics/methods.html
>>
>> > The beginning and end of a transaction would simply be any change to any
>> > non-transient field.
>>
>> Suppose a transaction needs to update two fields to be correct but the
>> system crashes after the first. Will the system not be inconsistent on
>> recovery?
>>
>> Klaus
>>
>>
>> ------------------------------------------------------------------------------
>> Rapidly troubleshoot problems before they affect your business. Most IT
>> organizations don't have a clear picture of how application performance
>> affects their revenue. With AppDynamics, you get 100% visibility into your
>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
>> Pro!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Rapidly troubleshoot problems before they affect your business. Most IT
>> organizations don't have a clear picture of how application performance
>> affects their revenue. With AppDynamics, you get 100% visibility into your
>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
>> Pro!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Rapidly troubleshoot problems before they affect your business. Most IT
>> organizations don't have a clear picture of how application performance
>> affects their revenue. With AppDynamics, you get 100% visibility into your
>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
>> Pro!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Rapidly troubleshoot problems before they affect your business. Most IT
>> organizations don't have a clear picture of how application performance
>> affects their revenue. With AppDynamics, you get 100% visibility into your
>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
>> Pro!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Sponsored by Intel(R) XDK
>> Develop, test and display web and hybrid apps with a single code base.
>> Download it for free now!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Sponsored by Intel(R) XDK
>> Develop, test and display web and hybrid apps with a single code base.
>> Download it for free now!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
>>
>

--001a114b4642c2b93f05353c5454
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>Maybe I should ask is Prevayler lis=
t dead? :)</div><div><br></div><div>Anyway, meanwhile I created some time a=
nd implemented proof of concept java agent(1) and integration with Spring&#=
39;s load time weaving. Also persistence root can be @Autowired into Spring=
 context (2)</div><div><br></div><div>I guess Postvayler can now participat=
e in=C2=A0<a href=3D"http://databen.ch/" target=3D"_blank" style=3D"font-si=
ze:12.8px">databen.ch</a><span style=3D"font-size:12.8px">=C2=A0either w</s=
pan>ith java agent=C2=A0or Spring&#39;s load time weaving.</div><div><br></=
div><div>Also forked Spring&#39;s PetClinic sample and adapted for Postvayl=
er (3)</div><div><a href=3D"https://github.com/raftAtGit/spring-petclinic">=
https://github.com/raftAtGit/spring-petclinic</a><br></div><div><br></div><=
div>Cheers,</div><div><i>r a f t</i></div><div><br></div><div>1. Java agent=
 works but does not cooperate with another agent, will override other agent=
&#39;s bytecode if invoked later</div><div>2. Again with some limitations m=
ost possibly because of Spring&#39;s bug</div><div><a href=3D"http://stacko=
verflow.com/questions/37439267/spring-does-not-create-loadtimeweaver">http:=
//stackoverflow.com/questions/37439267/spring-does-not-create-loadtimeweave=
r</a><br></div><div>Also=C2=A0@EnableAutoConfiguration somehow prevents Pos=
tvayler&#39;s load time weaving kick-in on time.</div>3. This is also just =
a proof of concept and far less then optimal implementation with minimal ch=
anges to original PetClinic source.<div class=3D"gmail_extra"><br><div clas=
s=3D"gmail_quote">On Thu, Dec 17, 2015 at 11:58 AM, hakan eryargi <span dir=
=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">h=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_=
quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-=
style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">Hi,<div><br></div><div>Is=C2=A0<a href=3D"http://databen.ch/" styl=
e=3D"font-size:12.8px" target=3D"_blank">databen.ch</a><span style=3D"font-=
size:12.8px">=C2=A0dead?</span></div></div><div class=3D"gmail_extra"><br><=
div class=3D"gmail_quote"><span class=3D"">On Fri, Dec 6, 2013 at 8:07 PM, =
Flavio W. Brasil <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]=
" target=3D"_blank">[email protected]</a>&gt;</span> wrote:<br></span><div=
><div class=3D"h5"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p=
x 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color=
:rgb(204,204,204);padding-left:1ex">
                <div>
                    Hi Hakan,
                </div><div><br></div><div>This effort looks promising, cong=
ratulations! :)</div><div><br></div><div>You could also use the <a href=3D"=
http://databen.ch" target=3D"_blank">databen.ch</a> project to test the Pos=
tvayler consistency/scalability. I&#39;m really interested on the results.<=
/div><div><br></div><div>Cheers,</div>
                <div><div><br></div><div>--=C2=A0</div><div>Flavio W. Brasi=
l</div><div><br></div></div><div><div>
                =20
                <p style=3D"color:rgb(160,160,168)">On Friday, December 6, =
2013 at 7:02 PM, hakan eryargi wrote:</p>
                </div></div><blockquote type=3D"cite" style=3D"border-left-=
style:solid;border-width:1px;margin-left:0px;padding-left:10px">
                    <span><div><div><div><div><div dir=3D"ltr">I believe th=
e project has reached the proof of concept state:)<div><br></div><div>I&#39=
;ve extended the bank sample with accounts and money transfers and made ano=
ther bank sample which emulates instrumentation (ie, manually added injecte=
d code) that helped a lot to visualize what is going on.</div>
<div><br></div><div>adding objects to pool with a reliable id was a bit tri=
cky but I guess I&#39;ve managed it with a special transaction which behave=
s different at regular run and recovery time. see=C2=A0ConstructorTransacti=
on for some details.</div>
<div><br></div><div>allowing garbage collection with a WeakValueMap is also=
 done. there is also a trick here to trick GC not to garbage collect target=
 objects before we&#39;re done. see=C2=A0GCPreventingPrevayler for some det=
ails.**</div>
<div><br></div><div>I&#39;ve made two tests:=C2=A0</div><div>1. run the sam=
e sequence of thousands of operations on both persisted and non-persisted i=
nstances and checked the results for equality. this also includes closing p=
revayler, recovering and going on. all seems good.</div>
<div>2. run thousands of operations with many threads. no objects missed. I=
 wish to have a multi-threaded check final result test similar to first one=
 but I couldnt figure how.</div><div><br></div><div>next things:</div><div>
* scan all reachable @Persistent classes. at the moment generic parameters =
(like collection types) is not parsed. I&#39;m planning to scan all package=
s of all reached @Persistent classes. this still does not guarantee all req=
uired classes is instrumented (some one can extend a @Persistent class in a=
 totally different package), but there is a run time check to catch that co=
ndition</div>
<div>* proper encapsulation. at the moment lots of things is public and any=
one can crash the system with a simple cast and java call</div><div>* more =
tests</div><div>* maybe a better trick to prevent GC</div><div>* cleanup an=
d optimize compiler code</div>
<div>* ant build.xml (or maven?)</div><div>* an ant task for compiler</div>=
<div>* support for spring dependency injection (at least injecting root as =
a bean to other spring beans)</div><div>* some documentation</div><div>
* adapt prevayler samples to postvayler</div><div>* what else?</div><div><b=
r></div><div>any feedback is welcome. please have a look at the samples (es=
pecially the emulated sample) and speak up:)</div><div><br></div><div>cheer=
s,</div>
<div>r a f t</div><div><br></div><div>** after very very long multi-threade=
d runs sometimes an object is missed (garbage collected). this happens very=
 seldom and I suspect this is related to JVM&#39;s runtime optimization. It=
 may be detecting that our trick to prevent GC is a noop and removing the c=
all.=C2=A0<br>
</div></div><div><br><br><div>On Mon, Dec 2, 2013 at 11:57 PM, hakan eryarg=
i <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=
=3D"_blank">[email protected]</a>&gt;</span> wrote:<br><blockquote ty=
pe=3D"cite"><div><p dir=3D"ltr">runtime bytecode injection isnt a current o=
bjective. it may be possible later or not, doesnt really matter in this sta=
ge. pre-instrumented classes is good enough for now, like jibx.</p>

<p dir=3D"ltr">come on, you should have some faith in flying spagetti monst=
er man:)</p>
<p dir=3D"ltr">seriously, if someone sees a flaw, which cant be done, pleas=
e speak up, so i wont spend unnecessary hours. to me all seems good for now=
.</p>
<p dir=3D"ltr">btw, details are constantly changing and evolving. i&#39;ve =
shared the project in a very early stage for discussion</p>
<p dir=3D"ltr">r a f t</p><div><div>
<div>On Dec 2, 2013 10:52 PM, &quot;Naveen Chawla&quot; &lt;<a href=3D"mail=
to:[email protected]" target=3D"_blank">[email protected]</a>&gt; w=
rote:<br type=3D"attribution"><blockquote type=3D"cite"><div>

<div dir=3D"ltr">Hakan, Congratulations for carving out the time to attempt=
 this.<div><br></div><div>How easy do you think it would be to instrument t=
he object, when it is passed in, to simply journal all changes to non-trans=
ient fields, and batch them into single journal entries when they occur dur=
ing a synchronized lock over the prevalent object?</div>


<div><br></div><div>Can it all be done with run-time instrumentation from s=
tart to finish, such that no annotations are necessary?</div></div><div><br=
><br><div>On 1 December 2013 23:12, hakan eryargi <span dir=3D"ltr">&lt;<a =
href=3D"mailto:[email protected]" target=3D"_blank">hakan.eryargi@gma=
il.com</a>&gt;</span> wrote:<br><blockquote type=3D"cite"><div><div dir=3D"=
ltr">i&#39;m experimenting with the idea. so far not bad. just put what I&#=
39;ve done to GitHub. any suggestions, critics and contributions are welcom=
e:)<div>


<a href=3D"https://github.com/raftAtGit/Postvayler" target=3D"_blank">https=
://github.com/raftAtGit/Postvayler</a></div>
<div><br></div><div>apologies for the name, it=C2=A0sounded like a nice wor=
d play:)<br></div><div><br></div><div><div>to run the sample, run the Compi=
ler class with=C2=A0raft.postvayler.samples.bank.Bank argument and then run=
 raft.postvayler.samples.bank.Main</div>



<div><br></div><div>how it works:</div><div>compiler injects bytecode to ro=
ot class and all @Persistent=C2=A0classes that can be accesible* from root.=
=C2=A0</div><div><div><br></div><div>root class contains an injected object=
 pool, where each @Persistent class is assigned a Long id and put into this=
 object pool when created. this pool will be* a WeakValueMap so objects whi=
ch are not attached to root will be garbage collected at some time.</div>



<div><br></div><div>each @Persist method in a=C2=A0@Persistent class is ins=
trumented like this:</div><div><font face=3D"courier new, monospace">@Persi=
st</font></div><div>



<font face=3D"courier new, monospace">ReturnType doSomething(someParams) {.=
.}</font></div><div><br></div><div><font face=3D"courier new, monospace">do=
Somehing </font>is copied to <font face=3D"courier new, monospace">__postva=
yler__doSomething(..)</font>. the original <font face=3D"courier new, monos=
pace">doSomehing </font>becomes:<br>



</div><div><br></div><div><font face=3D"courier new, monospace">ReturnType=
=C2=A0doSomething(someParams) {</font></div><div><font face=3D"courier new,=
 monospace">=C2=A0 =C2=A0 if (!there is postvayler context)=C2=A0</font></d=
iv>



<div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 retu=
rn __postvayler__doSomething(..);</font></div><div><font face=3D"courier ne=
w, monospace">=C2=A0 =C2=A0 if (we are in a prevayler transaction)=C2=A0</f=
ont></div>



<div><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 retu=
rn __postvayler__doSomething(..);</font></div><div><font face=3D"courier ne=
w, monospace">=C2=A0 =C2=A0 return prevayler.execute(new MethodTransaction(=
..));</font></div>



<div><font face=3D"courier new, monospace">}<br></font></div><div><br></div=
><div>the arguments to doSomehing(..) is transformed in <font face=3D"couri=
er new, monospace">MethodTransaction </font>such that references to @Persis=
tent objects are replaced with <font face=3D"courier new, monospace">Refere=
nce&#39;</font><font face=3D"arial, helvetica, sans-serif">s</font>, which =
will later be restored from object pool. seems as this also solves the Bapt=
ism problem.=C2=A0</div>



<div><br></div><div>looks good to me for now:)</div><div><br></div><div>che=
ers,</div><div><i>r a f t</i></div><div>



<br></div><div>* not implemented yet</div><div><br><div>On Wed, Nov 27, 201=
3 at 11:07 AM, Naveen Chawla <span dir=3D"ltr">&lt;<a href=3D"mailto:naveen=
[email protected]" target=3D"_blank">[email protected]</a>&gt;</span> wro=
te:<br><blockquote type=3D"cite"><div><div dir=3D"ltr">Sure, here:=C2=A0<a =
href=3D"http://docs.oracle.com/javase/tutorial/java/generics/methods.html" =
target=3D"_blank">http://docs.oracle.com/javase/tutorial/java/generics/meth=
ods.html</a><div>



<br></div><div>As for consistency, any multi-changes explicitly synchronize=
d over prevalentObject can be auto-batched.</div>
</div><div><div><div><br><br><div>On 27 November 2013 00:25, Klaus Wuestefe=
ld <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank=
">[email protected]</a>&gt;</span> wrote:<br><blockquote type=3D"cite"><div>
<div>&gt; It is ordinary generic method syntax.<br>
<br>
</div>Could you point me to some doc on this syntax? I couldnt find it here=
:<br>
<a href=3D"http://docs.oracle.com/javase/tutorial/extra/generics/methods.ht=
ml" target=3D"_blank">http://docs.oracle.com/javase/tutorial/extra/generics=
/methods.html</a><br>
<div><br>
&gt; The beginning and end of a transaction would simply be any change to a=
ny<br>
&gt; non-transient field.<br>
<br>
</div>Suppose a transaction needs to update two fields to be correct but th=
e<br>
system crashes after the first. Will the system not be inconsistent on<br>
recovery?<br>
<div><div><br>
Klaus<br>
<br>
---------------------------------------------------------------------------=
---<br>
Rapidly troubleshoot problems before they affect your business. Most IT<br>
organizations don&#39;t have a clear picture of how application performance=
<br>
affects their revenue. With AppDynamics, you get 100% visibility into your<=
br>
Java,.NET, &amp; PHP application. Start your 15-day FREE TRIAL of AppDynami=
cs Pro!<br>
<a href=3D"http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&amp;iu=
=3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam=
pad/clk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk</a><br>
_______________________________________________<br>
To unsubscribe go to the end of this page: <a href=3D"http://lists.sourcefo=
rge.net/lists/listinfo/prevayler-discussion" target=3D"_blank">http://lists=
.sourceforge.net/lists/listinfo/prevayler-discussion</a><br>
_______________________________________________<br>
&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.prevayler.org" t=
arget=3D"_blank">http://www.prevayler.org</a><br>
</div></div></div></blockquote></div><br></div>
</div></div><br>-----------------------------------------------------------=
-------------------<br>
Rapidly troubleshoot problems before they affect your business. Most IT<br>
organizations don&#39;t have a clear picture of how application performance=
<br>
affects their revenue. With AppDynamics, you get 100% visibility into your<=
br>
Java,.NET, &amp; PHP application. Start your 15-day FREE TRIAL of AppDynami=
cs Pro!<br>
<a href=3D"http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&amp;iu=
=3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam=
pad/clk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk</a><br>___________________=
____________________________<br>




To unsubscribe go to the end of this page: <a href=3D"http://lists.sourcefo=
rge.net/lists/listinfo/prevayler-discussion" target=3D"_blank">http://lists=
.sourceforge.net/lists/listinfo/prevayler-discussion</a><br>
_______________________________________________<br>
&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.prevayler.org" t=
arget=3D"_blank">http://www.prevayler.org</a><br>
<br></div></blockquote></div><br></div></div></div></div>
<br>-----------------------------------------------------------------------=
-------<br>
Rapidly troubleshoot problems before they affect your business. Most IT<br>
organizations don&#39;t have a clear picture of how application performance=
<br>
affects their revenue. With AppDynamics, you get 100% visibility into your<=
br>
Java,.NET, &amp; PHP application. Start your 15-day FREE TRIAL of AppDynami=
cs Pro!<br>
<a href=3D"http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&amp;iu=
=3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam=
pad/clk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk</a><br>___________________=
____________________________<br>



To unsubscribe go to the end of this page: <a href=3D"http://lists.sourcefo=
rge.net/lists/listinfo/prevayler-discussion" target=3D"_blank">http://lists=
.sourceforge.net/lists/listinfo/prevayler-discussion</a><br>
_______________________________________________<br>
&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.prevayler.org" t=
arget=3D"_blank">http://www.prevayler.org</a><br>
<br></div></blockquote></div><br></div>
<br>-----------------------------------------------------------------------=
-------<br>
Rapidly troubleshoot problems before they affect your business. Most IT<br>
organizations don&#39;t have a clear picture of how application performance=
<br>
affects their revenue. With AppDynamics, you get 100% visibility into your<=
br>
Java,.NET, &amp; PHP application. Start your 15-day FREE TRIAL of AppDynami=
cs Pro!<br>
<a href=3D"http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&amp;iu=
=3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam=
pad/clk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk</a><br>___________________=
____________________________<br>


To unsubscribe go to the end of this page: <a href=3D"http://lists.sourcefo=
rge.net/lists/listinfo/prevayler-discussion" target=3D"_blank">http://lists=
.sourceforge.net/lists/listinfo/prevayler-discussion</a><br>
_______________________________________________<br>
&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.prevayler.org" t=
arget=3D"_blank">http://www.prevayler.org</a><br>
<br></div></blockquote></div>
</div></div></div></blockquote></div><br></div>
</div></div></div><div><div>-----------------------------------------------=
-------------------------------</div><div>Sponsored by Intel(R) XDK </div><=
div>Develop, test and display web and hybrid apps with a single code base.<=
/div><div>Download it for free now!</div><div><a href=3D"http://pubads.g.do=
ubleclick.net/gampad/clk?id=3D111408631&amp;iu=3D/4140/ostg.clktrk" target=
=3D"_blank">http://pubads.g.doubleclick.net/gampad/clk?id=3D111408631&amp;i=
u=3D/4140/ostg.clktrk</a></div></div><span><div><div>______________________=
_________________________</div><div>To unsubscribe go to the end of this pa=
ge: <a href=3D"http://lists.sourceforge.net/lists/listinfo/prevayler-discus=
sion" target=3D"_blank">http://lists.sourceforge.net/lists/listinfo/prevayl=
er-discussion</a></div><div>_______________________________________________=
</div><div>&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.preva=
yler.org" target=3D"_blank">http://www.prevayler.org</a></div></div></span>=
</div></span>
                =20
                =20
                =20
                =20
                </blockquote>
                =20
                <div>
                    <br>
                </div>
            <br>-----------------------------------------------------------=
-------------------<br>
Sponsored by Intel(R) XDK<br>
Develop, test and display web and hybrid apps with a single code base.<br>
Download it for free now!<br>
<a href=3D"http://pubads.g.doubleclick.net/gampad/clk?id=3D111408631&amp;iu=
=3D/4140/ostg.clktrk" rel=3D"noreferrer" target=3D"_blank">http://pubads.g.=
doubleclick.net/gampad/clk?id=3D111408631&amp;iu=3D/4140/ostg.clktrk</a><br=
>_______________________________________________<br>
To unsubscribe go to the end of this page: <a href=3D"http://lists.sourcefo=
rge.net/lists/listinfo/prevayler-discussion" rel=3D"noreferrer" target=3D"_=
blank">http://lists.sourceforge.net/lists/listinfo/prevayler-discussion</a>=
<br>
_______________________________________________<br>
&quot;Databases in Memoriam&quot; -- <a href=3D"http://www.prevayler.org" r=
el=3D"noreferrer" target=3D"_blank">http://www.prevayler.org</a><br>
<br></blockquote></div></div></div><br></div>
</blockquote></div><br></div></div>

--001a114b4642c2b93f05353c5454--


--===============2293654847755309842==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
--===============2293654847755309842==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
_______________________________________________
"Databases in Memoriam" -- http://www.prevayler.org

--===============2293654847755309842==--