Hi Eric
thanks for your reply. Humans life would be to boring, if we would always share 
the same opinion. ;-)
Of course I may be wrong too and in some cases we maybe able to improve the code we already have, and I am fully open to change which is good for the project :-)
Item 43: Throw exceptions appropriate to the abstraction
This is very, very important. And at this point I would rather also like to 
add, that one sometimes should also take care to not violate this indirectly 
via chaining the cause which brings along all the details which should be 
abstracted. That's via a favour to create new exceptions at that point a 
properly the details at the abstraction boarder.
For Synapse, I am not sure I fully agree.. since the main dependency with Axis2 sorts of causes this.. see we get messages from transports, into Axis2, then to Synapse for mediation, then again through Axis2 to transports and out etc.. I do not think keeping the original cause should be abstracted, but left as-is for easier problem resolution via logs etc.
Ok, if you decide that you can handle this exception accordingly, I totally agree. But in 
this case why should you rethrow it? If you can't handle it and decide the caller might 
be able to handle it (not arguing about checked or unchecked at this point at all to 
concentrate on one topic), you can't log the error as it might be not a real problem for 
the caller which may be able to compensate. Logging some general context info for later 
correlation is another topic. This way you also avoid logging the same exception a couple 
of times, as the caller can't know whether something has already been logged and from his 
perspective it is the first time he is catching this exception. I don't think you use the 
SynapseException only for wrapping, but also for "self created" exceptions, or?
Another one from Joshua "..To avoid this problem, higher layers should catch lower-level exceptions and, in their place, throw exceptions that are explainable in terms of the higher-level abstraction." - note that no where in the code do we catch a SynapseException and log or re-throw it.. thats bound by developer discipline so that each exception is only uniquely logged once with most of the information about its cause. Within the Synapse code I do not think there is any outside layer that is able to handle something the Synapse layer beneath could have handled.. I think we need to dig into the code and take some concrete examples, and see if we can really improve things with an alternative, and if we can definitely improve it
Anyway it looks like there has already been some discussion about it and I do 
not want to change something about, just make sure I'm not missing a very 
special reason. ;-)
No discussion is always good, and questioning to improve what we have .. I think best is to keep an eye for something related to exception handling we could improve when we next look at some piece of code, and then take it up for discussion/dissection and more analysis with everyone.. :-)

cheers
asankha

--
Asankha C. Perera
AdroitLogic, http://adroitlogic.org

http://esbmagic.blogspot.com




Reply via email to