Проблема иерархии классов с использованием @Transactional - PullRequest
4 голосов
/ 17 мая 2011

Настройка проекта: Spring 3.0.5 / JPA 2 / Hibernate / @ Transactional

Мы работаем с несколькими различными источниками данных (и, следовательно, с разными менеджерами транзакций), но у нас есть общие базовые классы службы, так как многие функции используются повторно.

Итак, мы подумали, что решим это, используя Пользовательские аннотации . Мы определяем все методы в абстрактном базовом классе и создаем один пустой класс реализации для менеджера транзакций.

Теперь проблема:

В AbstractFallbackTransactionAttributeSource этот поиск выполняется:

TransactionAttribute txAtt = findTransactionAttribute(specificMethod);
// ...
// Second try is the transaction attribute on the target class.
txAtt = findTransactionAttribute(specificMethod.getDeclaringClass());

Сначала проверяется метод, затем класс, который объявляет метод (и его предков). Но в нашем контексте пользовательская аннотация находится в подклассе, который не может быть найден при переходе вверх.

Так, как мы можем решить эту проблему?

[Я также задавал этот вопрос на весеннем форуме сообщества ]

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

Отличный улов.Я не знаю хорошего решения, но в качестве обходного пути вы можете переопределить рассматриваемые методы в реализации следующим образом:

@Override
void method(...)
    // Just to work around a bug in AbstractFallbackTransactionAttributeSource
    super.method(...);
}

, что сделает @Transactional видимым, но это уродливо: - /

0 голосов
/ 17 мая 2011

В настоящее время мы решили эту проблему, предоставив

  1. наш собственный подкласс AnnotationTransactionAttributeSource который делает поиск по цели сначала класс, а затем делегаты супер класс
  2. A BeanFactoryPostProcessor, который заменяет нашу реализацию исходным определением AnnotationTransactionAttributeSource bean-компонента, созданным внутри <tx:annotation-driven>

.

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