## Read/Write Lock Aspect

available within our CVS

### Goal

This Aspect is an example of an implementation of the Read/Write Lock pattern. It allows u to define at the method level a read/write lock using either annotation or an XML file The implementation is based on the concurrent package from Doug Lea.

### Problem

#### Let's see a simple example defining the problem to solve.

    public class Account
    {
    private float balance;

    public Account(float balance)
    {
     this.balance=balance;
    }

    public void debit(float amount)
    {
    // Implementation to debit the account balance
     ...
    }

    public void credit(float amount)
    {
    // Implementation to credit the account balance
    ...
    }

    public String toString()
    {
    // Implementation to format the account description
    ...
    }
    }

The above class required to support concurrency invocation of the method debit,credit and toString method.

### Traditional Implementation.

The traditional solution without AOP would be to implement the same code within the debit and credit account to acquire/release a write lock.A read lock would be required for the toString method.

### Solution with Read/Write Lock Aspect

The concurrency code is refactored within the Read/Write Lock Aspect.So the new Aspect can be applied against any method using annotation or an XML file.

#### Here the new code of the Account class with annotation

    public class Account
    {
    private float balance;

    public Account(float balance)
    this.balance=balance;
    }

    /**
    * @@org.jboss.aop.patterns.readwritelock.writeLockOperation
    */
    public void debit(float amount)
    {
    // Implementation to debit the account balance
    ...
    }

    /**
    * @@org.jboss.aop.patterns.readwritelock.writeLockOperation
    */
    public void credit(float amount)
    {
     // Implementation to credit the account balance
    ...
    }

    /**
    * @@org.jboss.aop.patterns.readwritelock.readLockOperation
    */
    public String toString()
    {
    // Implementation to format the account description
    ...
    }
    }

### Configuration

The deployment description of the Read/Write Lock Aspect

- JBOSS-AOP.xml

### Author

- Claude Hussenet (mailto:chussenet@yahoo.com)