홈>
로드 타임 위빙 (LTW)은 JSF를 사용자 인터페이스로 사용하고 6k + 클래스를 포함하는 엔터프라이즈 레벨 애플리케이션에 적합한 선택입니까? 전체 애플리케이션에 대해 성능 지표를 생성해야하지만 LoginMBean과 같은 JSF 관리 Bean에 대해서는 생성 할 수 없습니다. 그러나 @Component가 있으므로 AspectJ (LTW)와 함께 작동 할 수 있습니까? aop.xml이 추가되고 aspectJWeaver 경로도 vm 인수에 추가됩니다.
<aspectj>
<weaver
options=" -verbose -showWeaveInfo -Xset:weaveJavaxPackages=true -Xreweavable">
<include within="com.x.login..*" />
<include within="com.x.aspects.Aspect" />
</weaver>
<aspects>
<aspect name="com.x.aspects.Aspect" />
</aspects>
</aspectj
package com.x.login;
@Component
@Scope("session")
public class LoginMBean extends AbstractMbean {
@Autowired
LoginService loginService ;
public void loginUserData(){
LoginInfo info= new LoginInfo();
//setter for info object
//some nested method calls
loginService.insertLoginData(info);
}
}
package com.x.login.service.impl;
@Service("LoginService")
public class LoginServiceImpl implements LoginService{
@Autowired
GenericCrudService genericCrudService ;
public void insertLoginData(LoginInfo info){
//some nested method calls
try{
genericCrudService.saveEntity(info);
}catch(Exception e){
//log exception
}
}
}
package com.x.aspect.config;
@Configuration
@ComponentScan(basePackages = { "com.x" })
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
public class AspectConfig {
}
package com.x.aspects;
@Component
@Aspect
public class Aspects {
private static Logger Logger= LoggerFactory.getLogger(Aspects.class);
@Pointcut("execution(* *(..)) && cflow(execution(* com.x.login..*(..)))")
public void methodsToBeProfiled() {}
@Around("methodsToBeProfiled()")
public Object methodsToBeProfiled(ProceedingJoinPoint point) throws Throwable {
StopWatch sw = new StopWatch(getClass().getSimpleName());
try {
sw.start(point.getSignature().getName());
return point.proceed();
} finally {
sw.stop();
Logger.info("Elapsed Time, Package Name, Method Name");
Logger.info(sw.prettyPrint());
Logger.info("Package Name: " + point.getStaticPart());
}
}
}
AspectJ 로그 :
[[email protected]] info register aspect com.x.aspects.Aspects
[[email protected]] info register aspect org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect
[[email protected]] info register aspect org.springframework.scheduling.aspectj.AnnotationAsyncExecutionAspect
[[email protected]] weaveinfo Join point 'method-execution(void com.x.aspects.Aspects.methodsToBeProfiled())' in Type 'com.x.aspects.Aspects' (Aspects.java:36) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(java.lang.String com.x.login.PSMVProperties.getMultiDb())' in Type 'com.x.login.PSMVProperties' (PSMVProperties.java:27) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(void com.x.login.MultiDatabase.loadAEFormRestrictions(com.x.qnccore.service.GenericCrudService, java.lang.String, org.springframework.web.context.WebApplicationContext))' in Type 'com.x.login.MultiDatabase' (MultiDatabase.java:275) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(void com.x.login.QuestionMBean.setRecordLock(boolean))' in Type 'com.x.login.QuestionMBean' (QuestionMBean.java:146) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(java.lang.String com.x.login.RequestPojo.getTenantid())' in Type 'com.x.login.RequestPojo' (RequestPojo.java:18) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(void com.x.login.RequestPojo.setTenantid(java.lang.String))' in Type 'com.x.login.RequestPojo' (RequestPojo.java:23) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(void com.x.login.service.impl.LoginServiceImpl.insertLoginData(com.x.agx.admin.bus.entity.LoginInfo))' in Type 'com.x.login.service.impl.LoginServiceImpl' (LoginServiceImpl.java:427) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
[[email protected]] weaveinfo Join point 'method-execution(java.util.List com.x.login.service.impl.LoginServiceImpl.getFailedLoginAttemptUsingIp(java.util.HashMap))' in Type 'com.x.login.service.impl.LoginServiceImpl' (LoginServiceImpl.java:442) advised by around advice from 'com.x.aspects.Aspects' (Aspects.java) [with runtime test]
spring-config.xml
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
<context:load-time-weaver aspectj-weaving="on" />
메트릭 로그
ms % Task name
-----------------------------------------
00003 100% insertLoginData
2019-07-30 15:14:19,550 INFO c.a.a.Aspects [http-nio-8080-exec-10] Package Name: execution(void com.x.login.service.impl.LoginServiceImpl.insertLoginData(LoginInfo))
2019-07-30 15:14:19,554 INFO c.a.a.Aspects [http-nio-8080-exec-10] Elapsed Time, Package Name, Method Name
2019-07-30 15:14:19,555 INFO c.a.a.Aspects [http-nio-8080-exec-10] StopWatch 'Aspects': running time (millis) = 4
LoginMBean은 login.xhtml에 대해 jsf 관리됩니다. JSF 문제입니까, 아니면 잘못된 pointcut 때문입니까? LoginMBean은 짠 클래스에는 나타나지 않습니다. 위의 문제를 도와주세요. LoginMBean 클래스의 모든 메소드에 대한 성능 메트릭.
- 답변 # 1
관련 자료
- 위치가있는 iOS 프레임 워크를 올바르게 추가하고 Cordova에서 플러그인을 만드는 방법은 무엇입니까?
- c# - 제대로 작동하지 않아서 Entity Framework Core 21 그룹
- aspectj - 스프링 애플리케이션에서 컴파일 시간 컴파일이 제대로 작동하지 않음
- c# - 봇 프레임 워크에서 느슨하게 메시지를 올바르게 형식화
- Java Spring Boot가 예외를 로깅하지 않음
- java - Spring Framework로 패키지를 만드는 방법
- java - spring-data-jpa에서 스프링 부트 자동 구성이 제대로 작동하지 않음
- java - spring integration dsl tcp - 클라이언트 측에서 거부 된 연결의 과도한 로깅을 방지하는 방법
- java - 잘못된 데이터를 업데이트하는 스프링 프레임 워크 트랜잭션을 동시에 실행
- java - 요청 본문의 각도 클라이언트에서 스프링 부트 컨트롤러로 맵을 올바르게 보내는 방법은 무엇입니까? 받은지도는 항상 비어 있습니다
- maven 3 - Spring Webflux에서 로깅이 아닌 작업을 기록하고 있습니까?
- reactjs - React Spring Transition이 제대로 작동하지 않습니다
- java - 스프링 보안 프레임 워크의 encodePassword와 마찬가지로 PHP에서 동일한 값을 얻는 방법은 무엇입니까?
- 스프링 부트의 트랜잭션 동기화가 제대로 작동하지 않습니다
- 스프링 부트 21 MVC 로깅
- c# - bot framework v3 - 사용자 사인 아웃을 올바르게 수행하는 방법?
- java : 봄 프레임 워크 컬렉션은 퇴거되었습니다
- java - Spring REST 데이터를 올바르게 필터링하는 방법
- java - Spring LogOut 기능 로그 아웃하지 않음
- java - Spring Boot Framework는 시작시 데이터베이스를 초기화하지 않습니다
로그를 보면
LoginMBean
처럼 보입니다. AspectJ 위버에 노출되지 않습니다. 적어도 나는 어떤weaveinfo ... in Type 'com.x.login.LoginMBean'
도 보지 못한다 . 그래서클래스 중 하나를로드하고 나중에 짠다 (
weaveinfo.*LoginMBean
에 대한 로그를 잡을 수 있음) JSF가 클래스를로드하고 사용했는지 확인한 후 로그를 더 아래로 내리십시오)또는 전혀 짠 것이 아닙니다 (그런 로그 항목을 찾지 못한 경우). 그런 다음 클래스 로더 문제가 있습니다. 즉, 어떻게 든 AspectJ 직조 에이전트가
LoginMBean
로드를 담당하는 클래스 로더에 등록되지 않았습니다 . 그런 다음 사용중인 응용 프로그램 서버와 명령 JVM 행이 어떻게 보이는지 아는 것이 흥미로울 것입니다 (-javaagent:...
와 관련이 있어야 함) .댓글을 달거나 추가 정보로 질문을 업데이트하여이 답변에 대해 후속 조치를 취하십시오.