views:

28

answers:

1
public boolean checkInd() {
    int dis_ind = 2;
    HashMap parmMap = new HashMap();
    //line below can generate errors
    getSqlMapClientTemplate().queryForList("authentication.checkInd", parmMap);
    List results = (List) parmMap.get("Result0");
    HashMap resultMap;
    if (result.size()>0)
        resultMap = (HashMap)resultMap.get(0); 
    dis_ind = (Integer)resultMap.get("PK_VALUE");
    if (dis_ind == 1)
     return true;
    else
     return false;
}

5th line of the code can generate errors. To name a few, errors might be...Stored Procedure mentioned in mapping does not exist, column name mentioned in mapping does not exist..etc..

If I do not catch the error and something goes wrong then log trace is written on server.log and the webapplication stops at the error page mentioned in my web.xml

If I catch the error then web app does not stop at error page and continues on its merry way (who knows where it will stop now).

So by now I am thinking NOT to catch errors here.

Problem is that I do not want to write the stack trace in server.log (which happens by default right now, as mentioned above). Instead I want to write stack trace to a file called myapp.log (we are using log4j). However, i do not know a way to explicitly write stack trace to myapp.log without actually catching the error. Below is the code I would write (but again the app will not stop since i am catching the error and will keep going, which is not good).

OurLogger log = OurLogger.getLogger("myapp", MyClassName.class);
public boolean checkInd() {
    int dis_ind = 2;
    try {
    HashMap parmMap = new HashMap();
    //line below can generate errors
    getSqlMapClientTemplate().queryForList("authentication.checkInd", parmMap);
    List results = (List) parmMap.get("Result0");
    HashMap resultMap;
    if (result.size()>0)
        resultMap = (HashMap)resultMap.get(0); 
        dis_ind = (Integer)resultMap.get("PK_VALUE");
    }
    catch (BadSqlGrammarException e) {log.error(e, e.getMessage());}
        if (dis_ind == 1)
         return true;
        else
         return false;
}

What are my options in this situation and what are the best practices?

PS: This question is related to my other question but i've tried to add examples in this question and seek best practice advice.

A: 

Catching doesn't need to be "permanent". Simply catch it, log it, and then rethrow the error. Like so:

catch (BadSqlGrammarException e) {
  log.error(e, e.getMessage());
  throw e;
}
Benjamin Cox