Re: Chainvayler
Marcel Oerlemans <[email protected]> Wed, 29 Apr 2020 13:52:19 +0200
| Newsgroups | gmane.comp.java.prevayler |
|---|---|
| Message-ID | <CAKE0622bUOCQX+LUexd0WWRdMxGk_y+ZrcszPnk4OcG57RJitw@mail.gmail.com> |
--===============2848151675245017394== Content-Type: multipart/alternative; boundary="0000000000008d21b105a46c968a" --0000000000008d21b105a46c968a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hakan, Love the work and the write-up. Was wondering: why would one want to disable the persistence part? (not criticizing, just wondering when that would be wanted, when using chain- or prevayler) Met vriendelijke groet, Marcel Oerlemans On Sat, Apr 25, 2020 at 1:43 PM hakan eryargi <[email protected]> wrote: > Thanks Rick :) > > Those are two very different projects and might be better delivered as >> separate things, even though you can turn them off independently > > > I'm targeting enterprise domain and they need both. Postvayler, > predecessor of Chainvayler, was doing transparent persistence. But > enterprise need scalability or at least redundancy. So it was on the back > of my mind for long time for how to replicate this. Either one > (replication/persistence) has their own specific use cases, possibly > persistence a lot more, like all desktop applications can benefit from it= , > but for the overall goal, eliminating databases, we need replication and > persistence at the same time. > > Adoption and interest are so hard to generate. > > > So true indeed. > > It feels like many people don=E2=80=99t have the vision or look deeper, o= r maybe > I=E2=80=99m very biased and exaggerating the possible value. > > What could you build, dirt simple, that would get people excited about th= e >> possibility. > > > I was thinking similar, so a few years ago spent some time and adapted > Spring's famous "pet clinic" sample to Postvayler. It integrates with > Spring's load time weaving mechanism and persistence root can be > @Autowired. > https://github.com/raftAtGit/spring-petclinic > > Many additional things are possible here. For example, autowiring Chained > non root objects based on JsonPath (or XPath) like syntax. For example: > > @RequestMapping("/deposit/{accountId}") > void depositMoney( > @PathVariable int accountId, > @Path("$.bank.account[{accountId}]") Account account) { > > // account with accountId will be injected. as long as Bank class = has a Map, getAccount(int) method or similar. > account.deposit(amount); > } > > But these are just additional benefits. Not directly related to > Postvayler/Chainvayler. That's why I didnt even mention them in the blog. > > I believe, if it ever happens, the breaking point will happen when some > large and/or famous company uses Chainvayler in a real life project, and > proves it can actually be used to eliminate databases, provides much bett= er > performance and reduce development costs. > > Best, > Hakan > > > On Fri, Apr 24, 2020 at 7:44 PM Rick Ross <[email protected]> wrote: > >> I like the concept a lot. Isn't the dream to just annotate objects for >> persistence and whatever rules you need to apply? To marry that to a >> shared model across JVMs is very interesting. >> >> >> My first thoughts are : >> >> Those are two very different projects and might be better delivered as >> separate things, even though you can turn them off independently >> >> Adoption and interest are so hard to generate. Without them, it's just = a >> personal project. I mean no offense by that, but success breeds succes= s. >> We've all been there. What could you build, dirt simple, that would get >> people excited about the possibility. >> >> My first thought there is the classic LAMP stack needs one less >> letter, right? >> >> It strikes me that with persistence managed entirely as objects, it >> wouldn't be to hard to autogenerate basic crud REST calls. Once you ha= ve >> annotated your object, it is automatically REST available, with full cru= d. >> >> >> Or perhaps a connector that could work with Angular and provide safe >> persistent storage, right off the bat. >> >> >> Just spitballing here. I'll keep tabs on this though. It's interestin= g. >> >> >> Rick >> >> >> >> On 4/22/20 11:35 PM, hakan eryargi wrote: >> >> Hey guys, >> >> Remember my PoC project *Postvayler* many years ago? It was making POJOs >> persistent transparently based on @annotations and of course Prevayler. >> >> Recently I took the idea one step forward and extended the mechanism to >> also replicate POJOs among JVMs. >> >> Here is my blog post about it: >> >> https://medium.com/@hakan.eryargi/transparent-replication-and-persistenc= e-for-pojo-graphs-805d9ae0f776 >> >> >> Here is the project *Chainvayler* itself: >> https://github.com/raftAtGit/Chainvayler >> >> Personally I find the idea really promising :) >> >> Cheers, >> Hakan (r a f t) >> >> PS: I'm somehow got out from the email list, re-registered myself. >> >> On Mon, Dec 2, 2013 at 12:12 AM hakan eryargi <[email protected]> >> wrote: >> >>> i'm experimenting with the idea. so far not bad. just put what I've don= e >>> 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 tha= t >>> 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 doS= omehing >>> 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 suc= h >>> that references to @Persistent objects are replaced with Reference's, >>> which will later be restored from object pool. seems as this also solve= s >>> 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 t= o >>>>> any >>>>> > non-transient field. >>>>> >>>>> Suppose a transaction needs to update two fields to be correct but th= e >>>>> system crashes after the first. Will the system not be inconsistent o= n >>>>> recovery? >>>>> >>>>> Klaus >>>>> >>>>> >>>>> ---------------------------------------------------------------------= --------- >>>>> Rapidly troubleshoot problems before they affect your business. Most = IT >>>>> organizations don't have a clear picture of how application performan= ce >>>>> 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=3D84349351&iu=3D/4140/o= stg.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 I= T >>>> organizations don't have a clear picture of how application performanc= e >>>> 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=3D84349351&iu=3D/4140/os= tg.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 >>>> >>>> >>> >> >> _______________________________________________ >> To unsubscribe go to the end of this page: http://lists.sourceforge.net/= lists/listinfo/prevayler-discussion >> _______________________________________________ >> "Databases in Memoriam" -- http://www.prevayler.org >> >> _______________________________________________ > To unsubscribe go to the end of this page: > http://lists.sourceforge.net/lists/listinfo/prevayler-discussion > _______________________________________________ > "Databases in Memoriam" -- http://www.prevayler.org > --0000000000008d21b105a46c968a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi Hakan,<div><br></div><div>Love the work and the write-u= p.</div><div>Was wondering: why would one want to disable the persistence p= art? (not criticizing, just wondering when that would be wanted, when using= chain- or prevayler)</div><div>=C2=A0<br></div><div><div><div dir=3D"ltr" = class=3D"gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"lt= r"><div dir=3D"ltr">Met vriendelijke groet,<div>Marcel Oerlemans</div></div= ></div></div></div><br></div></div><br><div class=3D"gmail_quote"><div dir= =3D"ltr" class=3D"gmail_attr">On Sat, Apr 25, 2020 at 1:43 PM hakan eryargi= <<a href=3D"mailto:[email protected]">[email protected]</a>= > wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px = 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div= dir=3D"ltr"><div dir=3D"ltr">Thanks Rick :)<div><br></div><blockquote clas= s=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid r= gb(204,204,204);padding-left:1ex">Those are two very different projects and= might be better delivered as separate things, even though you can turn the= m off independently</blockquote><div>=C2=A0</div><div>I'm targeting ent= erprise domain and they need both. Postvayler, predecessor of Chainvayler, = was doing transparent persistence. But enterprise need scalability or at le= ast redundancy. So it was on the back of my mind for long time for how to r= eplicate this. Either one (replication/persistence) has their own specific = use cases, possibly persistence a lot more, like all desktop applications c= an benefit=C2=A0from it, but for the overall goal, eliminating databases, w= e need=C2=A0 replication and persistence at the same time.</div><div><br></div><blockquo= te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px = solid rgb(204,204,204);padding-left:1ex">Adoption and interest are so hard = to generate.=C2=A0=C2=A0</blockquote><div>=C2=A0</div><div>So true indeed. = <br><br>It feels like many people don=E2=80=99t have the vision or look dee= per, or maybe I=E2=80=99m very biased and exaggerating the possible value.<= br></div><div><br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px= 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">What co= uld you build, dirt simple, that would get people excited about the possibi= lity. =C2=A0=C2=A0</blockquote><div>=C2=A0</div></div><div>I was thinking s= imilar, so a few years ago spent some time and adapted Spring's famous = "pet clinic" sample to Postvayler. It integrates with Spring'= s load time weaving mechanism and persistence root can be @Autowired. <br><= a href=3D"https://github.com/raftAtGit/spring-petclinic" target=3D"_blank">= https://github.com/raftAtGit/spring-petclinic</a>=C2=A0=C2=A0<br></div><div= ><br></div>Many additional things are possible here. For example, autowirin= g Chained non root objects based on JsonPath (or XPath) like syntax. For ex= ample:<div><pre style=3D"color:rgb(85,85,85);font-size:13px">@RequestMappin= g("/deposit/{accountId}") void depositMoney( @PathVariable int accountId,=20 @Path("$.bank.account[{accountId}]") Account account) { // account with accountId will be injected. as long as Bank class ha= s a Map, getAccount(int) method or similar. account.deposit(amount); }</pre>But these are just additional benefits. Not directly related to Post= vayler/Chainvayler. That's why I didnt=C2=A0even mention them in the bl= og.</div><div><br></div><div>I believe, if it ever happens, the breaking po= int will happen when some large and/or famous company uses Chainvayler in a= real life project, and proves it can actually be used to eliminate databas= es, provides much better performance and reduce development costs.=C2=A0</d= iv><div><br></div>Best,<br>Hakan<div>=C2=A0</div></div><br><div class=3D"gm= ail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Apr 24, 2020 at 7:= 44 PM Rick Ross <<a href=3D"mailto:[email protected]" target=3D"_blank">ric= [email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style= =3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding= -left:1ex"> =20 =20 =20 <div> <p>I like the concept a lot.=C2=A0=C2=A0 Isn't the dream to just an= notate objects for persistence and whatever rules you need to apply?=C2=A0= =C2=A0=C2=A0=C2=A0 To marry that to a shared model across JVMs is very interesting.<br> </p> <p><br> </p> <p>My first thoughts are :=C2=A0=C2=A0 <br> </p> <p>Those are two very different projects and might be better delivered as separate things, even though you can turn them off independently<br> </p> <p>Adoption and interest are so hard to generate.=C2=A0 Without them, it's just a personal project.=C2=A0=C2=A0 I mean no offense by th= at, but success breeds success.=C2=A0 We've all been there.=C2=A0 What co= uld you build, dirt simple, that would get people excited about the possibility.=C2=A0 <br> </p> <p>=C2=A0=C2=A0=C2=A0 My first thought there is the classic LAMP stack = needs one less letter, right?=C2=A0=C2=A0 <br> </p> <p>=C2=A0=C2=A0=C2=A0 It strikes me that with persistence managed entir= ely as objects, it wouldn't be to hard to autogenerate basic crud REST calls. =C2=A0 Once you have annotated your object, it is automaticall= y REST available, with full crud. =C2=A0=C2=A0 <br> </p> <p>=C2=A0=C2=A0=C2=A0 Or perhaps a connector that could work with Angul= ar and provide safe persistent storage, right off the bat.=C2=A0=C2=A0=C2=A0= <br> </p> <p><br> </p> <p>Just spitballing here.=C2=A0=C2=A0 I'll keep tabs on this though= .=C2=A0 It's interesting.</p> <p><br> </p> <p>Rick</p> <p><br> </p> <p><br> </p> <div>On 4/22/20 11:35 PM, hakan eryargi wrote:<br> </div> <blockquote type=3D"cite"> =20 <div dir=3D"ltr"> <div dir=3D"ltr"> <div>Hey guys,</div> <div><br> </div> <div>Remember my PoC project <b>Postvayler</b> many years=C2=A0ago? It was making POJOs persistent transparently based on=C2=A0@annotations and of course Prevayler.</div> <div><br> </div> <div>Recently I took the idea one step forward and extended the mechanism to also replicate POJOs among JVMs.</div> <div><br> </div> <div>Here is my blog post about it:</div> <div><a href=3D"https://medium.com/@hakan.eryargi/transparent-rep= lication-and-persistence-for-pojo-graphs-805d9ae0f776" target=3D"_blank">ht= tps://medium.com/@hakan.eryargi/transparent-replication-and-persistence-for= -pojo-graphs-805d9ae0f776</a>=C2=A0</div> <div><br> </div> <div>Here is the project <b>Chainvayler</b> itself:=C2=A0<br> </div> <div><a href=3D"https://github.com/raftAtGit/Chainvayler" target= =3D"_blank">https://github.com/raftAtGit/Chainvayler</a>=C2=A0</div> <div><br> </div> <div>Personally I find the idea really promising :)</div> <div><br> </div> <div>Cheers,</div> <div>Hakan (r a f t)=C2=A0</div> <div><br> </div> <div>PS: I'm somehow got out from the email list, re-registered myself.</div> </div> <br> <div class=3D"gmail_quote"> <div dir=3D"ltr" class=3D"gmail_attr">On Mon, Dec 2, 2013 at 12:1= 2 AM hakan eryargi <<a href=3D"mailto:[email protected]"= target=3D"_blank">[email protected]</a>> wrote:<br> </div> <blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8= ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div dir=3D"ltr">i'm experimenting with the idea. so far no= t bad. just put what I've done to GitHub. any suggestions, critics and contributions are welcome:) <div><a href=3D"https://github.com/raftAtGit/Postvayler" targ= et=3D"_blank">https://github.com/raftAtGit/Postvayler</a></div> <div><br> </div> <div>apologies for the name, it=C2=A0sounded like a nice word play:)<br> </div> <div><br> </div> <div> <div>to run the sample, run the Compiler 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 root class and all @Persistent=C2=A0classes that can be accesible* from root= .=C2=A0</div> <div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra">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.</div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra">each @Persist method in a=C2=A0@Persistent class is instrumented like this:</di= v> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">@Persist</font></div> <div class=3D"gmail_extra"> <font face=3D"courier new, monospace">ReturnType doSomething(someParams) {..}</font></div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">doSomehing </font>is copied to <font face= =3D"courier new, monospace">__postvayler__doSomething(..)</font>. the original <font face=3D"courier new, monospace">doSo= mehing </font>becomes:<br> </div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">ReturnType=C2=A0doSomething(someParams) {<= /font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">=C2=A0 =C2=A0 if (!there is postvayler con= text)=C2=A0</font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 return __postvayler__doSomething(..);</font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">=C2=A0 =C2=A0 if (we are in a prevayler transaction)=C2=A0</font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">=C2=A0 =C2=A0 =C2=A0 =C2=A0 return __postvayler__doSomething(..);</font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">=C2=A0 =C2=A0 return prevayler.execute(new MethodTransaction(..));</font></div> <div class=3D"gmail_extra"><font face=3D"courier new, monospace">}<br> </font></div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra">the arguments to doSomehing(..) is transformed in <font face=3D"courier = new, monospace">MethodTransaction </font>such that references to @Persistent objects are replaced with <font face=3D"courier new, monospace">Reference= 9;</font><font face=3D"arial, helvetica, sans-serif">s</font>, which will later be restored from object pool. seems as this also solves the Baptism problem.=C2=A0</div> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra">looks good to me for now:)</di= v> <div class=3D"gmail_extra"><br> </div> <div class=3D"gmail_extra">cheers,</div> <div class=3D"gmail_extra"><i>r a f t</i></div> <div class=3D"gmail_extra"> <br> </div> <div class=3D"gmail_extra">* not implemented yet</div> <div class=3D"gmail_extra"><br> <div class=3D"gmail_quote">On Wed, Nov 27, 2013 at 11:07 AM, Naveen Chawla <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:0px= 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <div dir=3D"ltr">Sure, here:=C2=A0<a href=3D"http:/= /docs.oracle.com/javase/tutorial/java/generics/methods.html" target=3D"_bla= nk">http://docs.oracle.com/javase/tutorial/java/generics/methods.html</a> <div> <br> </div> <div>As for consistency, any multi-changes explicitly synchronized over prevalentObject can be auto-batched.</div> </div> <div> <div> <div class=3D"gmail_extra"><br> <br> <div class=3D"gmail_quote">On 27 November 2013 00:25, Klaus Wuestefeld <span dir=3D"l= tr"><<a href=3D"mailto:[email protected]" target=3D"_blank">[email protected]<= /a>></span> wrote:<br> <blockquote class=3D"gmail_quote" style=3D"= margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef= t:1ex"> <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.html" 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 any<br> > non-transient field.<br> <br> </div> Suppose a transaction needs to update two fields to be correct but the<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 AppDynamics Pro!<br> <a href=3D"http://pubads.g.doubleclic= k.net/gampad/clk?id=3D84349351&iu=3D/4140/ostg.clktrk" target=3D"_blank= ">http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&iu=3D/4140/o= stg.clktrk</a><br> _______________________________________________<br> To unsubscribe go to the end of this page: <a href=3D"http://lists.so= urceforge.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" target=3D"_blank">http://www.prevayler= .org</a><br> </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 AppDynamics Pro!<br> <a href=3D"http://pubads.g.doubleclick.net/gampad/c= lk?id=3D84349351&iu=3D/4140/ostg.clktrk" target=3D"_blank">http://pubad= s.g.doubleclick.net/gampad/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.sourceforge.net/lists/listinfo/prevayler-discussion" targe= t=3D"_blank">http://lists.sourceforge.net/lists/listinfo/prevayler-discussi= on</a><br> _______________________________________________<br> "Databases in Memoriam" -- <a href=3D"htt= p://www.prevayler.org" target=3D"_blank">http://www.prevayler.org</a><br> <br> </blockquote> </div> <br> </div> </div> </div> </div> </blockquote> </div> </div> <br> <fieldset></fieldset> <br> <fieldset></fieldset> <pre>_______________________________________________ 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> _______________________________________________ "Databases in Memoriam" -- <a href=3D"http://www.prevayler.org" t= arget=3D"_blank">http://www.prevayler.org</a> </pre> </blockquote> </div> </blockquote></div> </div> _______________________________________________<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> </blockquote></div> --0000000000008d21b105a46c968a-- --===============2848151675245017394== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============2848151675245017394== 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 --===============2848151675245017394==--