Aspectj in Action: Practical Aspect-Oriented Programming