Results 1 to 6 of 6

Thread: Ignore certain Exceptions when using Spring JdbcTemplate

  1. #1
    Join Date
    Feb 2012
    Posts
    6

    Default Ignore certain Exceptions when using Spring JdbcTemplate

    Hi,

    I am using Spring JdbcTemplate to run my queries.

    I ran into some trouble when trying to control the exception thrown by the jdbcTemplate.
    With regards to DAO, spring using its own hierarchy of exceptions.
    The exceptions thrown are of type DataAccessException.

    I want to be able to ignore certain exceptions, for example I run a query which give SQLException, with error code 11111. , I could check the error code and act accordingly.

    The DataAccessException doesn't expose such method.

    So what I did is to use the getCause method of the exception to investigate the exception (I don't like this solution), Until I get to the SQLException, and take the error code from it.

    I tried to extends from SQLErrorCodeSQLExceptionTranslator, and when get a specific error, return null, but it didn't help. the Spring have several mechanisms to handle exceptions after trying to use the custom translators.

    Code:
    public class AdgSQLErrorCodesTranslator extends SQLErrorCodeSQLExceptionTranslator {
    	
    	protected DataAccessException customTranslate(String task, String sql, SQLException sqlex) {
            if (sqlex.getErrorCode() == 12920) {
            	//Do nothing, ignoring error: database is already in force logging mode
            }
            return null;
        }
    }
    Have any idea??

    Thanks!!

  2. #2
    Join Date
    Jun 2006
    Location
    The Netherlands
    Posts
    13,632

    Default

    Spring already does conversion based on the error code/type of exception. It is an exception and as such spring will rollback the transaction, if there would be no exception that would break springs tx support.

    The easiests would be to extend the support, create your own subclass of DataAccessException and convert to that exception. In your code you could then configure spring tx support to ignore that exception.
    Marten Deinum
    Java Consultant / Pragmatist / Open Source Enthousiast / Author


    Pro Spring MVC: With Web Flow
    Conspect

    Have you read the reference guide.
    Use the [ code ] tags, young padawan

  3. #3
    Join Date
    Feb 2012
    Posts
    6

    Default

    Thanks Marten for the answer.

    So to sum it up, I will need to extend from DataAccessException and create something like : DataAccessIgnoredException

    How do I configure spring tx support to ignore this exception?
    Is this a good way to solve this issue?
    Creating an exception just to ignore it, doesn't sound good.

    Thanks,
    Tomer.

  4. #4
    Join Date
    Jun 2006
    Location
    The Netherlands
    Posts
    13,632

    Default

    Catching it, extracting the root, check the error code if not 11111 then rethrow else swallow isn't either nor reusable (well you could put it in an around aspect and make sure it runs after the tx advice), when you extend the framework in this way it is reusable. .

    I suggest the reference guide you can specify which exceptions to ignore/not rollback for. It depends on if you use annotations, xml or the old TransactionalProxyFactoryBean.
    Marten Deinum
    Java Consultant / Pragmatist / Open Source Enthousiast / Author


    Pro Spring MVC: With Web Flow
    Conspect

    Have you read the reference guide.
    Use the [ code ] tags, young padawan

  5. #5
    Join Date
    Feb 2012
    Posts
    6

    Default

    Amm, I think we are not talking on the same thing.
    I am neither using transactionalManager , nor AOP.

    I have a class, that warps the jdbcTemplate, and more or less doing the same.
    This class job is to execute queries, it doesn't have any thing involved business logic.

    The thing is, when using it for example:
    Code:
    Sting command = "alter database ...";
    try {
    	conn.execute(command);
    } catch (HADataAccessException e) {
    	logger.error("Failed to run: "+command,e);
    	return false;
    }
    I wish to be able to ignore certain exceptions.
    For example I expect to get an exception of error code 11111, while running "command" .

    So inside the catch clause I will have to investigate the HADataAccessException , and check its error code.
    Instead I can extend SQLErrorCodeSQLExceptionTranslator, to translate the 11111 excpetion into a certain DataAccessException , for example DataAccessIgnoredExcpetion. and then (This part I don't know ) I need to tell the spring to ignore DataAccessIgnoredExcpetion exceptions.


    Maybe I am all wrong, but please correct me..

    Thanks!

  6. #6
    Join Date
    Jun 2006
    Location
    The Netherlands
    Posts
    13,632

    Default

    That isn't going to work... You can only tell spring to ignore it if you use springs transactionmanagement without it that isn't possible and you will have to write your own.

    Also I really hope you are using transactions (as you aren't using a transactionmanager) and if you are programming your own transactions I strongly suggest you change to declarative transactions.
    Marten Deinum
    Java Consultant / Pragmatist / Open Source Enthousiast / Author


    Pro Spring MVC: With Web Flow
    Conspect

    Have you read the reference guide.
    Use the [ code ] tags, young padawan

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •