2013-11-27 4 views
0

У меня есть приложение JSF2, которое использует Spring для транзакций, обеспечения безопасности и контейнера DI.
Приложение имеет 3 слоя:
1. вид JSF + JSF Managed Bean
2. Классы обслуживания
3. DAO классы
Таким образом, запрос что-то вроде:
JSF страницы -> JSF MB -> Класс обслуживания -> DAO Class -> DB, а наоборот.
Моя проблема заключается в том, что существуют методы обслуживания, которые после выполнения их бизнеса приходилось регистрировать в БД это событие.
Например, когда кто-то активирует/деактивирует пользователя. Я хочу записать это действие вместе с идентификатором пользователя.
Итак, я вижу только два подхода здесь: (Я уверен, есть больше)
1. внутри этого метода я определить, вошедшего в систему пользователя и выполнить фактическую регистрацию
- как я недостатками здесь я хотел бы видеть тот факт, что этот метод будет не так легко проверить, из-за userId, выбранного из SpringSecurity
2. Использование SpringAOP. Этот способ был бы неинвазивным, что было бы круто, но тогда у меня был бы аспект для одного метода, который не настолько эффективен.jsf 2 весенний журнал регистрации событий событий

Я хотел бы знать, были ли у вас парни такие проблемы, и если да, то как вы их решили?

+0

У меня аналогичная ситуация в моей системе, построенной. Мы просто сохраняем зарегистрированного пользователя в компоненте, включенном в сеанс. Когда пользователь выполняет любую операцию, которая изменяет состояние БД, выполняется операция обновления по таблице регистратора. Фактически мы называем это вручную каждый раз, когда мы выполняем каждую операцию. Может быть сделано более элегантно, используя Spring AOP? Вероятно, позволяя контейнеру управлять каждым вызовом метода, который нам интересен, и заставляя его обращаться к методу журнала каждый раз, когда обновляется БД. –

ответ

0

Рассмотрите введение аннотации маркера. Назовем это: @LogEvent. Затем аннотируйте каждый метод, который вы хотите перехватить. Таким образом, вы можете реализовать один аспект с советом, который не совпадает с соглашением об именах, а с присутствием @LogEvent.

что-то вроде:

@After("execution(@LogEvent * *.*(..))") 
Смежные вопросы