Alex Rivera | Logout

In a finally block, can I tell if an exception has been thrown

Asked 2012-05-24T11:03:35.263
54

Possible Duplicate:
Is it possible to detect if an exception occurred before I entered a finally block?

I have a workflow method that does things, and throws an exception if an error occurred. I want to add reporting metrics to my workflow. In the finally block below, is there any way to tell if one of the methods in the try/catch block threw an exception ?

I could add my own catch/throw code, but would prefer a cleaner solution as this is a pattern I'm reusing across my project.

@Override
public void workflowExecutor() throws Exception {
  try {
      reportStartWorkflow();
      doThis();
      doThat();
      workHarder();
  } finally {
      /**
       * Am I here because my workflow finished normally, or because a workflow method
       * threw an exception?
       */
      reportEndWorkflow(); 
  }
}
Edit
Report

1 Answer

9

Two solutions: call reportEndWorkflow twice, once in a catch block and once in the end of try:

try {
    // ...
    reportEndWorkflow("success");
} catch (MyException ex) {
    reportEndWorkflow("failure");
}

Or you can introduce a boolean variable:

boolean finished = false;
try {
    // ...
    finished = true;
} finally {
    // ...
}
answered 2012-05-24T11:06:34.953

Your Answer