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">&lt;<a href=3D"mailto:[email protected]" target=
=3D"_blank">[email protected]</a>&gt;</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&#39;m really interested on the results.<=
/div><div><br></div><div>Cheers,</div>
                <div><div><br></div><div>--=C2=A0</div><div>Flavio W. Brasi=
l</div><div><br></div></div><div><div 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&#39;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&#39;ve managed it with a special transaction which behave=
s different at regular run and recovery time. see=C2=A0ConstructorTransacti=
on for some details.</div>
<div><br></div><div>allowing garbage collection with a WeakValueMap is also=
 done. there is also a trick here to trick GC not to garbage collect target=
 objects before we&#39;re done. see=C2=A0GCPreventingPrevayler for some det=
ails.**</div>
<div><br></div><div>I&#39;ve made two tests:=C2=A0</div><div>1. run the sam=
e sequence of thousands of operations on both persisted and non-persisted i=
nstances and checked the results for equality. this also includes closing p=
revayler, recovering and going on. all seems good.</div>
<div>2. run thousands of operations with many threads. no objects missed. I=
 wish to have a multi-threaded check final result test similar to first one=
 but I couldnt figure how.</div><div><br></div><div>next things:</div><div>
* scan all reachable @Persistent classes. at the moment generic parameters =
(like collection types) is not parsed. I&#39;m planning to scan all package=
s of all reached @Persistent classes. this still does not guarantee all req=
uired classes is instrumented (some one can extend a @Persistent class in a=
 totally different package), but there is a run time check to catch that co=
ndition</div>
<div>* proper encapsulation. at the moment lots of things is public and any=
one can crash the system with a simple cast and java call</div><div>* more =
tests</div><div>* maybe a better trick to prevent GC</div><div>* cleanup an=
d optimize compiler code</div>
<div>* ant build.xml (or maven?)</div><div>* an ant task for compiler</div>=
<div>* support for spring dependency injection (at least injecting root as =
a bean to other spring beans)</div><div>* some documentation</div><div>
* adapt prevayler samples to postvayler</div><div>* what else?</div><div><b=
r></div><div>any feedback is welcome. please have a look at the samples (es=
pecially the emulated sample) and speak up:)</div><div><br></div><div>cheer=
s,</div>
<div>r a f t</div><div><br></div><div>** after very very long multi-threade=
d runs sometimes an object is missed (garbage collected). this happens very=
 seldom and I suspect this is related to JVM&#39;s runtime optimization. It=
 may be detecting that our trick to prevent GC is a noop and removing the c=
all.=C2=A0<br>
</div></div><div><br><br><div>On Mon, Dec 2, 2013 at 11:57 PM, hakan eryarg=
i <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=
=3D"_blank">[email protected]</a>&gt;</span> wrote:<br><blockquote ty=
pe=3D"cite"><div><p dir=3D"ltr">runtime bytecode injection isnt a current o=
bjective. it may be possible later or not, doesnt really matter in this sta=
ge. pre-instrumented classes is good enough for now, like jibx.</p>

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

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


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


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



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



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



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



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



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



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



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



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



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



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




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



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


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