Re: Chainvayler

hakan eryargi <[email protected]> Wed, 29 Apr 2020 14:57:43 +0200
Newsgroups gmane.comp.java.prevayler
Message-ID <CAPg-4YVvq29fAjepq4XvTeQTFThKhRfgKRNUjHr+80-eGcLoCg@mail.gmail.com>
--===============7528334946655699829==
Content-Type: multipart/alternative; boundary="0000000000001da07d05a46d7f2c"

--0000000000001da07d05a46d7f2c
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thanks Marcel :)

Good question indeed, I was also thinking myself in what real life cases
replication only mode can be used.

Besides demo and testing purposes, I guess general answer is, to share data
among nodes which doesnt need to be persisted. Some cases comes to my mind:

* Shared state machine or configuration, assuming eventually consistent
nature of Chainvayler is acceptable.
* Some in memory event bus. Following the observer pattern, attach
listeners to Chained objects, so changes to one object in a node will be
notified to other nodes. This can be a quite handy way of sharing events,
without an external dependency like AWS SNS.

Best,
Hakan



On Wed, Apr 29, 2020 at 1:53 PM Marcel Oerlemans <[email protected]=
>
wrote:

> Hi Hakan,
>
> Love the work and the write-up.
> Was wondering: why would one want to disable the persistence part? (not
> criticizing, just wondering when that would be wanted, when using chain- =
or
> prevayler)
>
> Met vriendelijke groet,
> Marcel Oerlemans
>
>
> On Sat, Apr 25, 2020 at 1:43 PM hakan eryargi <[email protected]>
> wrote:
>
>> Thanks Rick :)
>>
>> Those are two very different projects and might be better delivered as
>>> separate things, even though you can turn them off independently
>>
>>
>> I'm targeting enterprise domain and they need both. Postvayler,
>> predecessor of Chainvayler, was doing transparent persistence. But
>> enterprise need scalability or at least redundancy. So it was on the bac=
k
>> of my mind for long time for how to replicate this. Either one
>> (replication/persistence) has their own specific use cases, possibly
>> persistence a lot more, like all desktop applications can benefit from i=
t,
>> but for the overall goal, eliminating databases, we need  replication an=
d
>> persistence at the same time.
>>
>> Adoption and interest are so hard to generate.
>>
>>
>> So true indeed.
>>
>> It feels like many people don=E2=80=99t have the vision or look deeper, =
or maybe
>> I=E2=80=99m very biased and exaggerating the possible value.
>>
>> What could you build, dirt simple, that would get people excited about
>>> the possibility.
>>
>>
>> I was thinking similar, so a few years ago spent some time and adapted
>> Spring's famous "pet clinic" sample to Postvayler. It integrates with
>> Spring's load time weaving mechanism and persistence root can be
>> @Autowired.
>> https://github.com/raftAtGit/spring-petclinic
>>
>> Many additional things are possible here. For example, autowiring Chaine=
d
>> non root objects based on JsonPath (or XPath) like syntax. For example:
>>
>> @RequestMapping("/deposit/{accountId}")
>> void depositMoney(
>>     @PathVariable int accountId,
>>     @Path("$.bank.account[{accountId}]") Account account) {
>>
>>        // account with accountId will be injected. as long as Bank class=
 has a Map, getAccount(int) method or similar.
>>        account.deposit(amount);
>> }
>>
>> But these are just additional benefits. Not directly related to
>> Postvayler/Chainvayler. That's why I didnt even mention them in the blog=
.
>>
>> I believe, if it ever happens, the breaking point will happen when some
>> large and/or famous company uses Chainvayler in a real life project, and
>> proves it can actually be used to eliminate databases, provides much bet=
ter
>> performance and reduce development costs.
>>
>> Best,
>> Hakan
>>
>>
>> On Fri, Apr 24, 2020 at 7:44 PM Rick Ross <[email protected]> wrote:
>>
>>> I like the concept a lot.   Isn't the dream to just annotate objects fo=
r
>>> persistence and whatever rules you need to apply?     To marry that to =
a
>>> shared model across JVMs is very interesting.
>>>
>>>
>>> My first thoughts are :
>>>
>>> Those are two very different projects and might be better delivered as
>>> separate things, even though you can turn them off independently
>>>
>>> Adoption and interest are so hard to generate.  Without them, it's just
>>> a personal project.   I mean no offense by that, but success breeds
>>> success.  We've all been there.  What could you build, dirt simple, tha=
t
>>> would get people excited about the possibility.
>>>
>>>     My first thought there is the classic LAMP stack needs one less
>>> letter, right?
>>>
>>>     It strikes me that with persistence managed entirely as objects, it
>>> wouldn't be to hard to autogenerate basic crud REST calls.   Once you h=
ave
>>> annotated your object, it is automatically REST available, with full cr=
ud.
>>>
>>>
>>>     Or perhaps a connector that could work with Angular and provide saf=
e
>>> persistent storage, right off the bat.
>>>
>>>
>>> Just spitballing here.   I'll keep tabs on this though.  It's
>>> interesting.
>>>
>>>
>>> Rick
>>>
>>>
>>>
>>> On 4/22/20 11:35 PM, hakan eryargi wrote:
>>>
>>> Hey guys,
>>>
>>> Remember my PoC project *Postvayler* many years ago? It was making
>>> POJOs persistent transparently based on @annotations and of course
>>> Prevayler.
>>>
>>> Recently I took the idea one step forward and extended the mechanism to
>>> also replicate POJOs among JVMs.
>>>
>>> Here is my blog post about it:
>>>
>>> https://medium.com/@hakan.eryargi/transparent-replication-and-persisten=
ce-for-pojo-graphs-805d9ae0f776
>>>
>>>
>>> Here is the project *Chainvayler* itself:
>>> https://github.com/raftAtGit/Chainvayler
>>>
>>> Personally I find the idea really promising :)
>>>
>>> Cheers,
>>> Hakan (r a f t)
>>>
>>> PS: I'm somehow got out from the email list, re-registered myself.
>>>
>>> On Mon, Dec 2, 2013 at 12:12 AM hakan eryargi <[email protected]>
>>> wrote:
>>>
>>>> i'm experimenting with the idea. so far not bad. just put what I've
>>>> done to GitHub. any suggestions, critics and contributions are welcome=
:)
>>>> https://github.com/raftAtGit/Postvayler
>>>>
>>>> apologies for the name, it sounded like a nice word play:)
>>>>
>>>> to run the sample, run the Compiler class
>>>> with raft.postvayler.samples.bank.Bank argument and then run
>>>> raft.postvayler.samples.bank.Main
>>>>
>>>> how it works:
>>>> compiler injects bytecode to root class and all @Persistent classes
>>>> that can be accesible* from root.
>>>>
>>>> root class contains an injected object pool, where each @Persistent
>>>> class is assigned a Long id and put into this object pool when created=
.
>>>> this pool will be* a WeakValueMap so objects which are not attached to=
 root
>>>> will be garbage collected at some time.
>>>>
>>>> each @Persist method in a @Persistent class is instrumented like this:
>>>> @Persist
>>>> ReturnType doSomething(someParams) {..}
>>>>
>>>> doSomehing is copied to __postvayler__doSomething(..). the original do=
Somehing
>>>> becomes:
>>>>
>>>> ReturnType doSomething(someParams) {
>>>>     if (!there is postvayler context)
>>>>         return __postvayler__doSomething(..);
>>>>     if (we are in a prevayler transaction)
>>>>         return __postvayler__doSomething(..);
>>>>     return prevayler.execute(new MethodTransaction(..));
>>>> }
>>>>
>>>> the arguments to doSomehing(..) is transformed in MethodTransaction su=
ch
>>>> that references to @Persistent objects are replaced with Reference's,
>>>> which will later be restored from object pool. seems as this also solv=
es
>>>> the Baptism problem.
>>>>
>>>> looks good to me for now:)
>>>>
>>>> cheers,
>>>> *r a f t*
>>>>
>>>> * not implemented yet
>>>>
>>>> On Wed, Nov 27, 2013 at 11:07 AM, Naveen Chawla <[email protected]=
>
>>>> wrote:
>>>>
>>>>> Sure, here:
>>>>> http://docs.oracle.com/javase/tutorial/java/generics/methods.html
>>>>>
>>>>> As for consistency, any multi-changes explicitly synchronized over
>>>>> prevalentObject can be auto-batched.
>>>>>
>>>>>
>>>>> On 27 November 2013 00:25, Klaus Wuestefeld <[email protected]> wrote:
>>>>>
>>>>>> > It is ordinary generic method syntax.
>>>>>>
>>>>>> Could you point me to some doc on this syntax? I couldnt find it her=
e:
>>>>>> http://docs.oracle.com/javase/tutorial/extra/generics/methods.html
>>>>>>
>>>>>> > The beginning and end of a transaction would simply be any change
>>>>>> to any
>>>>>> > non-transient field.
>>>>>>
>>>>>> Suppose a transaction needs to update two fields to be correct but t=
he
>>>>>> system crashes after the first. Will the system not be inconsistent =
on
>>>>>> recovery?
>>>>>>
>>>>>> Klaus
>>>>>>
>>>>>>
>>>>>> --------------------------------------------------------------------=
----------
>>>>>> Rapidly troubleshoot problems before they affect your business. Most
>>>>>> IT
>>>>>> organizations don't have a clear picture of how application
>>>>>> performance
>>>>>> affects their revenue. With AppDynamics, you get 100% visibility int=
o
>>>>>> your
>>>>>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of
>>>>>> AppDynamics Pro!
>>>>>>
>>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&iu=3D/4140/=
ostg.clktrk
>>>>>> _______________________________________________
>>>>>> To unsubscribe go to the end of this page:
>>>>>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>>>>>> _______________________________________________
>>>>>> "Databases in Memoriam" -- http://www.prevayler.org
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------=
---------
>>>>> Rapidly troubleshoot problems before they affect your business. Most =
IT
>>>>> organizations don't have a clear picture of how application performan=
ce
>>>>> affects their revenue. With AppDynamics, you get 100% visibility into
>>>>> your
>>>>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of
>>>>> AppDynamics Pro!
>>>>>
>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=3D84349351&iu=3D/4140/o=
stg.clktrk
>>>>> _______________________________________________
>>>>> To unsubscribe go to the end of this page:
>>>>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>>>>> _______________________________________________
>>>>> "Databases in Memoriam" -- http://www.prevayler.org
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> To unsubscribe go to the end of this page: http://lists.sourceforge.net=
/lists/listinfo/prevayler-discussion
>>> _______________________________________________
>>> "Databases in Memoriam" -- http://www.prevayler.org
>>>
>>> _______________________________________________
>> To unsubscribe go to the end of this page:
>> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
>> _______________________________________________
>> "Databases in Memoriam" -- http://www.prevayler.org
>>
> _______________________________________________
> To unsubscribe go to the end of this page:
> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
> _______________________________________________
> "Databases in Memoriam" -- http://www.prevayler.org
>

--0000000000001da07d05a46d7f2c
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div>Thanks Marcel :)</div><div><br></div><div>Good questi=
on indeed, I was also thinking myself in what real life cases replication o=
nly mode can be used.</div><div><br></div><div>Besides demo and testing pur=
poses, I guess general answer is, to share data among nodes which doesnt=C2=
=A0need to be persisted. Some cases comes to my mind:</div><div><br></div><=
div>* Shared state machine or configuration, assuming eventually consistent=
 nature of Chainvayler is acceptable.=C2=A0</div><div>* Some in memory even=
t bus. Following the observer pattern, attach listeners=C2=A0to Chained obj=
ects, so changes to one object in a node will be notified to other nodes. T=
his can be a quite handy way of sharing events, without an external depende=
ncy like AWS SNS.</div><div><br></div><div>Best,</div><div>Hakan</div><div>=
<br></div><div><br></div></div><br><div class=3D"gmail_quote"><div dir=3D"l=
tr" class=3D"gmail_attr">On Wed, Apr 29, 2020 at 1:53 PM Marcel Oerlemans &=
lt;<a href=3D"mailto:[email protected]">[email protected]</=
a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0p=
x 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><d=
iv dir=3D"ltr">Hi Hakan,<div><br></div><div>Love the work and the write-up.=
</div><div>Was wondering: why would one want to disable the persistence par=
t? (not criticizing, just wondering when that would be wanted, when using c=
hain- or prevayler)</div><div>=C2=A0<br></div><div><div><div dir=3D"ltr"><d=
iv dir=3D"ltr"><div dir=3D"ltr">Met vriendelijke groet,<div>Marcel Oerleman=
s</div></div></div></div></div><br></div></div><br><div class=3D"gmail_quot=
e"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, Apr 25, 2020 at 1:43 PM ha=
kan eryargi &lt;<a href=3D"mailto:[email protected]" target=3D"_blank=
">[email protected]</a>&gt; wrote:<br></div><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr">Thanks Rick :)<d=
iv><br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px =
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Those are tw=
o very different projects and might be better delivered as separate things,=
 even though you can turn them off independently</blockquote><div>=C2=A0</d=
iv><div>I&#39;m targeting enterprise domain and they need both. Postvayler,=
 predecessor of Chainvayler, was doing transparent persistence. But enterpr=
ise need scalability or at least redundancy. So it was on the back of my mi=
nd for long time for how to replicate this. Either one (replication/persist=
ence) has their own specific use cases, possibly persistence a lot more, li=
ke all desktop applications can benefit=C2=A0from it, but for the overall g=
oal, eliminating databases, we need=C2=A0

replication and persistence at the same time.</div><div><br></div><blockquo=
te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px =
solid rgb(204,204,204);padding-left:1ex">Adoption and interest are so hard =
to generate.=C2=A0=C2=A0</blockquote><div>=C2=A0</div><div>So true indeed. =
<br><br>It feels like many people don=E2=80=99t have the vision or look dee=
per, or maybe I=E2=80=99m very biased and exaggerating the possible value.<=
br></div><div><br><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px=
 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">What co=
uld you build, dirt simple, that would get people excited about the possibi=
lity. =C2=A0=C2=A0</blockquote><div>=C2=A0</div></div><div>I was thinking s=
imilar, so a few years ago spent some time and adapted Spring&#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>
_______________________________________________<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>

--0000000000001da07d05a46d7f2c--


--===============7528334946655699829==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============7528334946655699829==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
_______________________________________________
"Databases in Memoriam" -- http://www.prevayler.org

--===============7528334946655699829==--