2013-11-27 3 views
0

트랜잭션, 보안 및 DI 컨테이너에 Spring을 사용하는 JSF2 앱이 있습니다.
응용 프로그램은 3 개 개의 층이 있습니다 Bean을 관리
1. JSF 뷰 + JSF를
2. 서비스 클래스
3. DAO 클래스
그래서, 요청이 같은 :
JSF 페이지 -> JSF MB -> 서비스 클래스 -> DAO 클래스 -> DB, 그리고 다른 방법.
제 문제는 수행 한 후에 해당 이벤트를 DB에 기록해야하는 서비스 메소드가 있다는 것입니다.
예를 들어, 누군가가 사용자를 활성화/비활성화 할 때. 이 작업을 사용자 ID와 함께 기록하고 싶습니다.
그래서 여기에는 두 가지 접근법 만 있습니다. (더 많은 정보가있을 것입니다.)
1. 로그인 한 사용자를 확인하고 실제 로깅을 수행하십시오.
- 단점이 있으므로 사실을 확인합니다. 이 방법은 SpringSecurity에서 가져온 userId 때문에 쉽게 테스트 할 수 없습니다.
2. SpringAOP 사용하기. 이 방법은 비 침습적 일 것이고, 그것은 멋지지만 다음에는 한 가지 방법에 대한 측면이있을 것입니다. 이는 그렇게 효율적이지 않습니다.jsf 2 스프링 어플리케이션 로깅 특정 이벤트

여러분에게 이런 종류의 문제가 있는지 알고 싶습니다. 그런 경우 어떻게 해결 했습니까?

+0

나는 나의 내장 시스템에서 비슷한 상황이있다. 세션 스코핑 된 빈에 로그인 한 사용자 만 유지합니다. 사용자가 DB 상태를 변경하는 작업을 수행하면 로거 테이블에 대한 업데이트 작업이 수행됩니다. 실제로 우리는 각 작업을 수행 할 때마다 수동으로 호출합니다. Spring AOP를 사용하여 좀 더 우아한 방법으로 할 수 있을까요? 아마도 컨테이너가 우리가 관심있는 각 메서드 호출을 관리하게하고 DB가 업데이트 될 때마다 로거 메서드를 호출하게 할 수 있습니다. –

답변

0

마커 주석을 도입하는 것이 좋습니다. 그것을 @LogEvent라고 부르 자. 그런 다음 요격하려는 모든 방법에 주석을 답니다. 이 방법을 사용하면 명명 규칙이 아닌 @LogEvent와 일치하는 조언으로 단일 요소를 구현할 수 있습니다. 같은

뭔가 :

@After("execution(@LogEvent * *.*(..))")