Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Exception handling framework

Has anyone ever thought about designing an AOP framework for Exception Handling. Some investigations have been done in [1], but I was wondering if it could be possible to build a complete Exception handling framework in AspectJ, and how one would do that.

I could define an abstract pointcut for methods that "could throw an error", and than put different "after throwing..." advice on that pointcut. For example one piece of after advice for every possible error in Java (that's a lot of work, I know). Those pieces of advice could call default handle methods for all the adviced Exceptions. A user of this framework would that have to write a sub-aspect, defining the abstract pointcut (for example every method not in the cflow of the aspect) and may also override some methods to change the default behaviour.

A little example from the abstract aspect:

after () throwing (RuntimeException): possibleExceptionThrowingMethod () {
	handleRuntimeException (e, thisJoinPoint);
}

protected void handleIOException (IOException e, JoinPoint jp) {
	//do something default
}

//analoge advice and methods for al other exceptions in java

I pass the thisJoinPoint as argument, for the methods to be able to do something usefull.

If users have there own exceptions, they can ofcourse be added to the sub-aspect the user has to write.

This approach solves the crosscutting nature of normal Exception handling if the same Exceptions (with the same Exception handling) appear in different places in the application. It is also reusable, and it easily supports the possibility to change the behaviour in exception handling afterwards. You just have to edit code in one place.

I do have one remaining problem: every method in the application that could throw an exception should have a "throws ...Exception" in its declaration, or there should be a try-catch block. The catch should than be left empty, as the handling is done by the aspect. I do not see any sollution to this problem.

I'm planning to test my approach in some more realistic examples. Any comments are very welcome ofcourse. It's al just a first idea.

Jan Van Besien

[1]
"A Study on Exception Detection and Handling Using Aspect-Oriented Programming" Martin Lippert and Cristina Lopes. In Proc. of the 22nd International Conference of Software Engineering (ICSE'2000), Limmerick, Ireland. IEEE Computer Society. June 2000.



Back to the top