ПРОБЛЕМА: необходимо регистрировать время каждого отдельного выполнения каждого указанного метода.
ИССЛЕДОВАНИЕ: пробная Intellij Idea плагины профилирования .Некоторые не работают, некоторые дорогие.Некоторые излишни.
В коде это может быть легко достигнуто в начале и конце тела метода или как вызовы некоторого общего класса.
Более аккуратный подход заключается в использовании перехватчиков (с объявленными классами перехватчиков или даже посредством пользовательской аннотации привязки перехватчика).Но только метод ввода класса перехватывается (даже в случае аннотации метода intersoptors), тогда как мне нужны более глубокие (вложенные).
Класс бина:
@Stateless
@LocalBean
@Interceptors({ProfilerInterceptor.class, LoggingInterceptor.class})
public class ComparisonService {
@Interceptors({ProfilerInterceptor.class})
public method aMethod(){
bMethod();
}
@Interceptors({ProfilerInterceptor.class})
public method bMethod(){
// Logics for time-measurement.
}
}
Класс перехватчика:
@Interceptor
@Profiled
public class ProfilerInterceptor {
@Inject private Logger logger;
private Object returnedValue;
@AroundInvoke
public Object measureExecutionTime(InvocationContext context) throws Exception {
LocalDateTime start = LocalDateTime.now();
try {
returnedValue = context.proceed();
return returnedValue;
} finally {
LocalDateTime end = LocalDateTime.now();
long difference = Duration.between(start, end).toMillis();
logger.info(
"\n************************************************************************\n"
+ context.getMethod().getName()
+ "() - "
+ difference
+ " мс");
}
}
}
XML-дескриптор бина:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
bean-discovery-mode="all"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd">
<interceptors>
<class>my.package.LoggerInterceptor</class>
<class>my.package.ProfilerInterceptor</class>
</interceptors>
</beans>
ВОПРОС: Как перехватить вложенный метод или реализовать тип шаблона декоратора (оболочки) для методауровень