Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring transaction-manager как поймать исключение. Spring 2.5 
:(
    Опции темы
alex_nevolin
Дата 24.9.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 13.8.2007

Репутация: нет
Всего: 4



Описание:
есть конфигурация:
Код

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRES_NEW"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut
            id="operation"
            expression="execution(* x.y.z.ExclusiveWriteLockManagerImpl.*(..))"
    />
    <aop:advisor
            advice-ref="transactionAdvice"
            pointcut-ref="operation" 
    />
</aop:config>

Есть код:
Код

public class ExclusiveWriteLockManagerImpl  implements ExclusiveWriteLockManager {

    public void acquireLock(Object entity, String session) throws ConcurrencyException{
        EntityLock lock = new EntityLock();
        //... инициализация lock
        try {
            getHibernateTemplate().save(lock);
        } catch (DataAccessException e) {
            throw new ConcurrencyException(e); 
        }
    }

    //..
}

Констрейн на таблице не дает создать два лока на одном entity. 
Но при этом ConstraintViolationException возникает в момент попытки фиксации транзакции, а не в методе acquireLock().
Знатоки Spring подскажите, пожалуйста, 
каким образом можно сконфигурировать Spring, что-бы ловить исключение возникшее в HibernateTransactionManager 
и мапить его на своё ConcurrencyException.

Хочется иметь честный контракт ExclusiveWriteLockManager с checked исключенем ConcurrencyException.
Спасибо.
PM MAIL   Вверх
alex_nevolin
Дата 24.9.2008, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 13.8.2007

Репутация: нет
Всего: 4



Нашел решение:
Добавить еще адвизор и порядок вызова:
Код

<aop:advisor
        advice-ref="transactionAdvice"
        pointcut-ref="operation" order="2"
/>
<aop:advisor
         advice-ref="exceptionCatchOnCommitAdvice"
         pointcut-ref="operation" order="1" 
/>

<bean id="exceptionCatchOnCommitAdvice" class="x.y.z.CatchExceptionInterceptor"/>

Реализовать:
Код

public class CatchExceptionInterceptor implements ThrowsAdvice {

   public void afterThrowing(Method method, Object[] args, Object target, Throwable ex) throws Throwable {
       if (ex instanceof DataIntegrityViolationException && ex.getCause() instanceof ConstraintViolationException) {
           throw new ConcurrencyException(ex);
       } else {
           throw ex;
       }
   }
}

Осталься вопрос, есть ли другие способы? или этот правильный?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0383 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.