Re: Postvayler
hakan eryargi <[email protected]> Thu, 17 Dec 2015 11:58:27 +0200
| Newsgroups | gmane.comp.java.prevayler |
|---|---|
| Message-ID | <CAPg-4YVukwMh8eidSxnHhG2LGFFFrV0_wz6qROvwA_xfEgFC1w@mail.gmail.com> |
--===============2759242219313410927== Content-Type: multipart/alternative; boundary=089e01538da07d35060527151035 --089e01538da07d35060527151035 Content-Type: text/plain; charset=UTF-8 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 > > --089e01538da07d35060527151035 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi,<div><br></div><div>Is=C2=A0<a href=3D"http://databen.c= h/" target=3D"_blank" style=3D"font-size:12.8px">databen.ch</a><span style= =3D"font-size:12.8px">=C2=A0dead?</span></div></div><div class=3D"gmail_ext= ra"><br><div class=3D"gmail_quote">On Fri, Dec 6, 2013 at 8:07 PM, Flavio W= . Brasil <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a>></span> wrote:<br><blockquote class= =3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padd= ing-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'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 class=3D"h5"> =20 <p style=3D"color:#a0a0a8">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 class=3D"h5"><div><div dir=3D"ltr"= >I believe the project has reached the proof of concept state:)<div><br></d= iv><div>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.</div> <div><br></div><div>adding objects to pool with a reliable id was a bit tri= cky but I guess I'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're done. see=C2=A0GCPreventingPrevayler for some det= ails.**</div> <div><br></div><div>I'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'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'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"><<a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a>></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'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, "Naveen Chawla" <<a href=3D"mail= to:[email protected]" target=3D"_blank">[email protected]</a>> 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"><<a = href=3D"mailto:[email protected]" target=3D"_blank">hakan.eryargi@gma= il.com</a>></span> wrote:<br><blockquote type=3D"cite"><div><div dir=3D"= ltr">i'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'</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"><<a href=3D"mailto:naveen= [email protected]" target=3D"_blank">[email protected]</a>></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"><<a href=3D"mailto:[email protected]" target=3D"_blank= ">[email protected]</a>></span> wrote:<br><blockquote type=3D"cite"><div> <div>> 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> > The beginning and end of a transaction would simply be any change to a= ny<br> > 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't have a clear picture of how application performance= <br> affects their revenue. With AppDynamics, you get 100% visibility into your<= br> Java,.NET, & 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&iu= =3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam= pad/clk?id=3D84349351&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> "Databases in Memoriam" -- <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't have a clear picture of how application performance= <br> affects their revenue. With AppDynamics, you get 100% visibility into your<= br> Java,.NET, & 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&iu= =3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam= pad/clk?id=3D84349351&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> "Databases in Memoriam" -- <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't have a clear picture of how application performance= <br> affects their revenue. With AppDynamics, you get 100% visibility into your<= br> Java,.NET, & 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&iu= =3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam= pad/clk?id=3D84349351&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> "Databases in Memoriam" -- <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't have a clear picture of how application performance= <br> affects their revenue. With AppDynamics, you get 100% visibility into your<= br> Java,.NET, & 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&iu= =3D/4140/ostg.clktrk" target=3D"_blank">http://pubads.g.doubleclick.net/gam= pad/clk?id=3D84349351&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> "Databases in Memoriam" -- <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&iu=3D/4140/ostg.clktrk" target= =3D"_blank">http://pubads.g.doubleclick.net/gampad/clk?id=3D111408631&i= u=3D/4140/ostg.clktrk</a></div></div><span class=3D""><div><div>___________= ____________________________________</div><div>To unsubscribe go to the end= of this page: <a href=3D"http://lists.sourceforge.net/lists/listinfo/preva= yler-discussion" target=3D"_blank">http://lists.sourceforge.net/lists/listi= nfo/prevayler-discussion</a></div><div>____________________________________= ___________</div><div>"Databases in Memoriam" -- <a href=3D"http:= //www.prevayler.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&iu= =3D/4140/ostg.clktrk" rel=3D"noreferrer" target=3D"_blank">http://pubads.g.= doubleclick.net/gampad/clk?id=3D111408631&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> "Databases in Memoriam" -- <a href=3D"http://www.prevayler.org" r= el=3D"noreferrer" target=3D"_blank">http://www.prevayler.org</a><br> <br></blockquote></div><br></div> --089e01538da07d35060527151035-- --===============2759242219313410927== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------------ --===============2759242219313410927== 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 --===============2759242219313410927==--