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=
 &lt;<a href=3D"mailto:[email protected]">[email protected]</a>=
&gt; 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&#39;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&#39;s famous =
&quot;pet clinic&quot; sample to Postvayler. It integrates with Spring&#39;=
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(&quot;/deposit/{accountId}&quot;)
void depositMoney(
    @PathVariable int accountId,=20
    @Path(&quot;$.bank.account[{accountId}]&quot;) 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&#39;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 &lt;<a href=3D"mailto:[email protected]" target=3D"_blank">ric=
[email protected]</a>&gt; 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&#39;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&#39;s just a personal project.=C2=A0=C2=A0 I mean no offense by th=
at, but
      success breeds success.=C2=A0 We&#39;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&#39;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&#39;ll keep tabs on this though=
.=C2=A0 It&#39;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&#39;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 &lt;<a href=3D"mailto:[email protected]"=
 target=3D"_blank">[email protected]</a>&gt;
            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&#39;m experimenting with the idea. so far no=
t
              bad. just put what I&#39;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&#3=
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">&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: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">&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:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-lef=
t:1ex">
                                  <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.html" 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 any<br>
                                    &gt; 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&#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
                                      AppDynamics Pro!<br>
                                      <a href=3D"http://pubads.g.doubleclic=
k.net/gampad/clk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk" target=3D"_blank=
">http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&amp;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>
                                      &quot;Databases in Memoriam&quot; -- =
<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&#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 AppDynamics Pro!<br>
                        <a href=3D"http://pubads.g.doubleclick.net/gampad/c=
lk?id=3D84349351&amp;iu=3D/4140/ostg.clktrk" target=3D"_blank">http://pubad=
s.g.doubleclick.net/gampad/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.sourceforge.net/lists/listinfo/prevayler-discussion" targe=
t=3D"_blank">http://lists.sourceforge.net/lists/listinfo/prevayler-discussi=
on</a><br>
                        _______________________________________________<br>
                        &quot;Databases in Memoriam&quot; -- <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>
_______________________________________________
&quot;Databases in Memoriam&quot; -- <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>
&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>
</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==--