Boa tarde,
Notei que apenas o interceptor binding está funcionando tanto pra método como pra classe. Quando uso ejb-jar.xml não funciona no Wildfly. O interessante é que não dá erro nenhum. Tentei mudar * para o nome do meu ejb dao sem sucesso também. Tentei colocar o ejb-jar.xml tanto no WEB-INF coo no META-INF sem sucesso.
Segue alguns arquivos do projeto:
<!--EJB JAR-->
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
<interceptors>
<interceptor>
<interceptor-class>
br.com.caelum.livraria.infra.LogInterceptor
</interceptor-class>
</interceptor>
</interceptors>
<assembly-descriptor>
<interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>
br.com.caelum.livraria.infra.LogInterceptor
</interceptor-class>
</interceptor-binding>
</assembly-descriptor>
</ejb-jar>
<!--beans.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all">
</beans>
-----------------------------------------------------------------------
package br.com.caelum.livraria.infra;
import org.apache.commons.lang3.time.StopWatch;
import javax.annotation.Priority;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
import java.util.concurrent.TimeUnit;
@Interceptor
@Cronometravel
@Priority(Interceptor.Priority.APPLICATION)
public class LogInterceptor {
@AroundInvoke
public Object logarTempoMetodo(InvocationContext invocationContext) throws Exception {
StopWatch stopWatch = StopWatch.createStarted();
Object result = invocationContext.proceed();
stopWatch.stop();
long time = stopWatch.getTime(TimeUnit.MILLISECONDS);
String methodName = invocationContext.getMethod().toString();
System.out.printf("===================================================================================================================\n");
System.out.printf("Tempo decorrido do %s foi %d milisegundos.\n", methodName, time);
System.out.printf("===================================================================================================================\n");
return result;
}
}
-----------------------------------------------------------------------
package br.com.caelum.livraria.infra;
import javax.interceptor.InterceptorBinding;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@InterceptorBinding
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PACKAGE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Cronometravel {}
-----------------------------------------------------------------------
package br.com.caelum.livraria.dao;
import java.util.List;
import br.com.caelum.livraria.infra.Cronometravel;
import br.com.caelum.livraria.modelo.Autor;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import static javax.ejb.TransactionAttributeType.MANDATORY;
import static javax.ejb.TransactionAttributeType.SUPPORTS;
@Stateless
public class AutorDao {
@Inject
private EntityManager em;
@PostConstruct
void aposCriacao() {
System.out.println("[INFO] AutorDao foi criado.");
}
@TransactionAttribute(MANDATORY)
public void salva(Autor autor) {
System.out.println("[INFO] Salvando o Autor " + autor.getNome());
em.persist(autor);
System.out.println("[INFO] Salvou o novo Autor: " + autor.getNome());
}
@PreDestroy
void destruindoEjb() {
System.out.println("[INFO] AutorDao foi destruido de novo.");
}
@TransactionAttribute(SUPPORTS)
public List<Autor> todosAutores() {
return em.createNamedQuery("Autor.listarTodos", Autor.class)
.getResultList();
}
@TransactionAttribute(SUPPORTS)
public Autor buscaPelaId(Integer autorId) {
Autor autor = em.find(Autor.class,autorId);
return autor;
}
}