Re: Chainvayler
hakan eryargi <[email protected]> Wed, 29 Apr 2020 14:57:43 +0200
| Newsgroups | gmane.comp.java.prevayler |
|---|---|
| Message-ID | <CAPg-4YVvq29fAjepq4XvTeQTFThKhRfgKRNUjHr+80-eGcLoCg@mail.gmail.com> |
--===============7528334946655699829== Content-Type: multipart/alternative; boundary="0000000000001da07d05a46d7f2c" --0000000000001da07d05a46d7f2c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks Marcel :) Good question indeed, I was also thinking myself in what real life cases replication only mode can be used. Besides demo and testing purposes, I guess general answer is, to share data among nodes which doesnt need to be persisted. Some cases comes to my mind: * Shared state machine or configuration, assuming eventually consistent nature of Chainvayler is acceptable. * Some in memory event bus. Following the observer pattern, attach listeners to Chained objects, so changes to one object in a node will be notified to other nodes. This can be a quite handy way of sharing events, without an external dependency like AWS SNS. Best, Hakan On Wed, Apr 29, 2020 at 1:53 PM Marcel Oerlemans <[email protected]= > wrote: > 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 bac= k >> 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 i= t, >> but for the overall goal, eliminating databases, we need replication an= d >> 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, = or maybe >> I=E2=80=99m very biased and exaggerating the possible value. >> >> What could you build, dirt simple, that would get people excited about >>> the 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 Chaine= d >> 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 bet= ter >> 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 fo= r >>> 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 >>> success. We've all been there. What could you build, dirt simple, tha= t >>> 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 h= ave >>> annotated your object, it is automatically REST available, with full cr= ud. >>> >>> >>> Or perhaps a connector that could work with Angular and provide saf= e >>> persistent storage, right off the bat. >>> >>> >>> Just spitballing here. I'll keep tabs on this though. It's >>> interesting. >>> >>> >>> 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-persisten= ce-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 >>>> 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 do= Somehing >>>> 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 su= ch >>>> that references to @Persistent objects are replaced with Reference's, >>>> which will later be restored from object pool. seems as this also solv= es >>>> 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 her= e: >>>>>> 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 t= he >>>>>> 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 int= o >>>>>> 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/= 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 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 >>>>> >>>>> >>>> >>> >>> _______________________________________________ >>> 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 > --0000000000001da07d05a46d7f2c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>Thanks Marcel :)</div><div><br></div><div>Good questi= on indeed, I was also thinking myself in what real life cases replication o= nly mode can be used.</div><div><br></div><div>Besides demo and testing pur= poses, I guess general answer is, to share data among nodes which doesnt=C2= =A0need to be persisted. Some cases comes to my mind:</div><div><br></div><= div>* Shared state machine or configuration, assuming eventually consistent= nature of Chainvayler is acceptable.=C2=A0</div><div>* Some in memory even= t bus. Following the observer pattern, attach listeners=C2=A0to Chained obj= ects, so changes to one object in a node will be notified to other nodes. T= his can be a quite handy way of sharing events, without an external depende= ncy like AWS SNS.</div><div><br></div><div>Best,</div><div>Hakan</div><div>= <br></div><div><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"l= tr" class=3D"gmail_attr">On Wed, Apr 29, 2020 at 1:53 PM Marcel Oerlemans &= lt;<a href=3D"mailto:[email protected]">[email protected]</= a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0p= x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><d= iv dir=3D"ltr">Hi Hakan,<div><br></div><div>Love the work and the write-up.= </div><div>Was wondering: why would one want to disable the persistence par= t? (not criticizing, just wondering when that would be wanted, when using c= hain- or prevayler)</div><div>=C2=A0<br></div><div><div><div dir=3D"ltr"><d= iv dir=3D"ltr"><div dir=3D"ltr">Met vriendelijke groet,<div>Marcel Oerleman= s</div></div></div></div></div><br></div></div><br><div class=3D"gmail_quot= e"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, Apr 25, 2020 at 1:43 PM ha= kan eryargi <<a href=3D"mailto:[email protected]" target=3D"_blank= ">[email protected]</a>> wrote:<br></div><blockquote class=3D"gmai= l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20= 4,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr">Thanks Rick :)<d= iv><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">Those are tw= o very different projects and might be better delivered as separate things,= even though you can turn them off independently</blockquote><div>=C2=A0</d= iv><div>I'm targeting enterprise domain and they need both. Postvayler,= predecessor of Chainvayler, was doing transparent persistence. But enterpr= ise need scalability or at least redundancy. So it was on the back of my mi= nd for long time for how to replicate this. Either one (replication/persist= ence) has their own specific use cases, possibly persistence a lot more, li= ke all desktop applications can benefit=C2=A0from it, but for the overall g= oal, eliminating databases, we 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> _______________________________________________<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> --0000000000001da07d05a46d7f2c-- --===============7528334946655699829== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --===============7528334946655699829== 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 --===============7528334946655699829==--