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's load time weaving.</div><div><br></= div><div>Also forked Spring'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= 's bytecode if invoked later</div><div>2. Again with some limitations m= ost possibly because of Spring'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'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"><<a href=3D"mailto:[email protected]" target=3D"_blank">h= [email protected]</a>></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"><<a href=3D"mailto:[email protected]= " target=3D"_blank">[email protected]</a>></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'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'= ;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'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><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>"Databases in Memoriam" -- <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&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></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==--