I just want to give credit to Julien Viet as well who pitched that idea
when he was in ATL, 

kudos Bill, you are in orbit, the pings in your head, the code in CVS,
let them fight, let's move 

marcf

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On 
> Behalf Of Bill Burke
> Sent: Wednesday, March 26, 2003 7:09 PM
> To: Jboss-Dev
> Subject: [JBoss-dev] AOP versioned ACID objects 1st iteration
> 
> 
> I have implemented a new AOP service for Serializable POJOs, 
> Versioned Objects.  You can transactionally version an 
> object.  If you modify the object within a transaction, this 
> modification is not seen by other transactions.  If the tx 
> commits, the changes seen, if a rollback happens the changes 
> are rolled back.  On commit, if another tx has modified the 
> object, the tx will rollback (OptimisticLocking).
> 
> The way it works is as follows:
> 
> POJO pojo = new POJO();
> pojo = (POJO)org.jboss.aop.plugins.Versioned.makeVersioned(pojo);
> 
> calling Versioned.makeVersioned creates a proxy that sits in 
> front of the real object.
> 
> transactionManager.begin();
> 
> pojo.callMethod();
> 
> when callMethod is invoked since there is a transaction, an 
> interceptor creates a copy of the REAL pojo and does all 
> further invocations on this copy.
> 
> pojo.someField = 5;
> 
> If you have field interception turned on, public field will 
> also be accessed via the copy/version
> 
> tm.commit();
> 
> On commit, a tx Synchronization checks to see if the version 
> you have created is the latest and greatest.  If not an 
> org.jboss.aop.plugins.OptimisticLockFailure exception is 
> thrown in beforeCompletion.  I'm not sure how this exception 
> is wrapped.
> 
> Some other semantics:
> 
> 1. All method invocations force a version to be created.  You 
> can avoid this by declared class-metadata as follows:
> 
> <class-metadata name="234234" group="VERSIONED" 
> class="org.jboss.test.aop.bean.VersionedPOJO">
> <method name="get.*">
>   <read-only>true</read-only>
> </method>
> </class-metadata>
> 
> A readonly method will not cause the creation of a version 
> and the current object will be used.
> 
> 
> An example and unit test is under 
> testsuite/src/main/org/jboss/test/aop/bean/VersionedObjectTester.java
> 
> The example object VersionedPOJO.java, has 1 interceptor 
> pointcut declared on the class to do Tx stuff.  See 
> testsuite/src/resources/aop/META-INF/jboss-aop.xml for more details.
> 
> What would be nice is to also write a TransactionalLock 
> interceptor for versioned POJO's that have high 
> OptimisticLock failures.
> 
> Bill
> 
> 
> 
> 
> -------------------------------------------------------
> This SF.net email is sponsored by:
> The Definitive IT and Networking Event. Be There!
> NetWorld+Interop Las Vegas 2003 -- Register today!
> http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
> _______________________________________________
> Jboss-development mailing list [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
> 



-------------------------------------------------------
This SF.net email is sponsored by:
The Definitive IT and Networking Event. Be There!
NetWorld+Interop Las Vegas 2003 -- Register today!
http://ads.sourceforge.net/cgi-bin/redirect.pl?keyn0001en
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to