2015-03-11 9 views
0

Я хотел бы зарегистрировать время выполнения некоторых методов в моих контроллерах.
Прямо сейчас я просто пытаюсь выяснить, поэтому я не регистрирую, но печатаю, и это для всех методов.
У меня есть класс Profiler:Как использовать AOP в WildFly 8.2

@Aspect 
public class Profiler { 

    @Pointcut("execution(public * *(..))") 
    public void methods() {} 

    @Around("methods()") 
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { 
     long start = System.currentTimeMillis(); 
     Object result = joinPoint.proceed(); 
     System.out.println(joinPoint.getSignature() + " " + (System.currentTimeMillis() - start)); 
     return result; 
    } 
} 

Мой pom.xml содержит aspectjrt версии 1.8.5
Я не использую Spring.

Я пробовал десятки комбинаций аннотаций, таких как @Provider, @ApplicationScoped, @Initialized (ApplicationScoped.class), @Named.
Я пытался использовать javax.ws.rs.core.Application, JBoss-aop.xml и т.д.
Ничего не работает (но без ошибок) :-(

Спасибо за вашу помощь.

ответ

0

Java EE 7 не поддерживает АОП в полной общности, но с использованием ракет-перехватчиков, как правило, можно добиться того же эффекта.

Посмотрите на Interceptors и CDI спецификации для получения более подробной информации.

+0

Итак, я теряю выгоду от необходимости изменять какие-либо классы в моих проектах? –

+0

Вы можете написать расширение CDI, чтобы программным путем добавлять перехватчики в свои классы. - Однако, если все, что вы хотите сделать, - это однократное ведение журнала с помощью point point point AOP, то я полагаю, что этот вопрос сводится к ткачеству ваших классов способом, совместимым с WildFly. Что вы делали, чтобы сплести свои классы, или вы предположили, что WildFly сделает это автоматически? –

+0

Я ничего не предполагал ;-) Я новичок в WildFly, я работал с Spring + Tomcat/Jetty (что я предпочитаю гораздо больше). Я использовал Spring AOP + AspectJ так 1 класс для @Aspect (как тот, который был в моем вопросе), и я был сделан, не нужно изменять существующий код. –

0

последняя версия АОП была released in 2010, за год до Java 7 was released.

Wildfly requires Java 7 или выше, поэтому ответ на ваш вопрос, к сожалению, кажется вы не можете.

AOP работает над управлением байт-кодом Java, а байт-код Java 6 и Java 7 будет отличаться. Это сделает библиотеки AOP несовместимыми с версиями Java более поздними, чем 6