Re: Postvayler

hakan eryargi <[email protected]> Mon, 9 Dec 2013 22:30:22 +0200
Newsgroups gmane.comp.java.prevayler
Message-ID <CAPg-4YXWUhQC7bnstmwN65QTaiNSi-BN_FmERfrRuv8yeU31Cw@mail.gmail.com>
i guess it can be done with a custom classloader, runtime instrumentation.
but thats not a priority in my todo list at the moment.

to tell the truth, i was expecting more interest and contribution to this
project. strange. it still seems as a good idea to me.

r a f t
On Dec 7, 2013 7:43 PM, "hakan eryargi" <[email protected]> wrote:

> hi Flavio,
>
> thanks for motivating words:)
>
> yes, it would be fun to see the benchmark results of Postvayler. I would
> expect it perform slightly worse than Prevayler, because of the overhead by
> the pool and reflection based method calling. Postvayler requires an extra
> instrumentation step, how can it be done in those tests?
>
> btw, I've found and fixed a flaw in preventing GC.
>
> cheers,
> hakan
>
>
> 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
>>
>>
>

------------------------------------------------------------------------------
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