Обработка исключений с использованием шаблона гибернации в среде Spring - PullRequest
0 голосов
/ 31 марта 2012

Я использую Spring с Hibernate в моем проекте. В Java-файле реализации DAO написано много методов, и каждый метод использует одинаковые строки кода try / catch / finally, которые мне кажутся излишними.
Мне сказалиоптимизировать / реорганизовать код, так как размер файла LOC превышает 10 тыс. Я где-то читал, что при использовании HibernateDaoSupport нам не нужно беспокоиться об исключениях или закрытии сессии.Об этом позаботится сама Spring.
Может ли кто-нибудь помочь мне, как поступить, или сделать необходимый или лучший способ обработки исключений? Я вставляю ниже код одного метода на уровне DAO.

открытый класс CSDDaoImpl расширяет HibernateDaoSupport реализует CSDDao {

public Deal getDealStructure(long dealId) throws CSDServiceException {  
        Session session = null;  
        try {  
            session = getSession();  
            Deal deal = (Deal) session.createCriteria(Deal.class).add(  
                    Restrictions.eq("dealId", dealId)).uniqueResult();  
            return deal;  
        } catch (DataAccessResourceFailureException darfex) {  
            String message = "Failed to retrieve the deal object.";  
            CSDServiceException ex = new CSDServiceException(message, darfex);  
            ex.setStackTrace(darfex.getStackTrace());  
            ex.setErrorCode(Constants.DATA_ACCESS_FAILURE_EXP);  
            ex.setMessageToUser(message);  
            throw ex;  
        } catch (IllegalStateException isex) {  
            String message = "Failed to retrieve the deal object.";  
            CSDServiceException ex = new CSDServiceException(message, isex);  
            ex.setStackTrace(isex.getStackTrace());  
            ex.setErrorCode(Constants.ILLEGAL_STATE_EP);  
            ex.setMessageToUser(message);  
            throw ex;  
        } catch (HibernateException hbex) {  
            String message = "Failed to retrieve the deal object.";  
            CSDServiceException ex = new CSDServiceException(message, hbex);  
            ex.setStackTrace(hbex.getStackTrace());  
            ex.setErrorCode(Constants.HIBERNATE_EXP);  
            ex.setMessageToUser(message);  
            throw ex;  
        } finally {  
            if (session != null && session.isOpen()) {  
                try {  
                    session.close();  
                } catch (HibernateException hbex) {  
                    log.error("Failed to close the Hibernate Session.", hbex);  
                    hbex.printStackTrace();  
                    CSDServiceException ex = new CSDServiceException(  
                            "Failed to close the Hibernate Session.", hbex);  
                    ex.initCause(hbex.getCause());  
                    ex.setStackTrace(hbex.getStackTrace());  
                    throw ex;  

                }  
            }  
        }  
    }  


}  

1 Ответ

0 голосов
/ 31 марта 2012

Наилучший подход к обработке исключений заключается в том, что я считаю, что, если написать перехватчик исключений для перехвата всех ваших вызовов DAO, вы сможете поймать те, которые вам нужны только в вашем приложении, и обернуть его своими собственными исключениями, специфичными для своего приложения.1002 * Вам определенно не нужно работать напрямую с сеансом, как только выдается исключение.Это противоречило бы цели использования HibernateDaoSupport и Spring.

Посмотрите по этой ссылке: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/classic-spring.html

Надеюсь, что поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...