JSF Interceptor не срабатывает

Почему мой перехватчик не работает?

MyLog.java

@Inherited
@InterceptorBinding
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface MyLog {
}

MyLogger.java

@Interceptor
@MyLog
@Priority(Interceptor.Priority.APPLICATION)
public class MyLogger {
    @AroundInvoke
    public Object log(InvocationContext context) throws Exception{ 
        System.out.println("begin " + context.getMethod().getName());
        Object obj = context.proceed();
        System.out.println("end " + context.getMethod().getName());
        return obj;
    }
}

PerguntaController.java

import interceptor.MyLog;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.EJBException;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
@Named("PerguntaController")
@SessionScoped
public class PerguntaController implements Serializable {

    @EJB
    private PerguntaFacade ejbFacade;

    @MyLog
    public List<> getAll() {
        return ejbFacade.getAll();
    }

    @MyLog
    public void update(Pergunta pergunta) {
        ejbFacade.update(pergunta);
    }
}

PerguntaFacade.java

import interceptor.MyLog;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
public class PerguntaFacade {
    @PersistenceContext(unitName = "WebApplicationPU")
    private EntityManager em;

    @MyLog
    public List<Pergunta> getAll() {
        return em.createQuery("SELECT p FROM Pergunta p", Pergunta.class).getResultList();
    }

    @MyLog
    public void update(Pergunta pergunta) {
      //do something
    }
}

При использовании getAll и update (из PerguntaController) на странице jsf перехватчик не запускается ни getAll, ни update на PerguntaFacade. Что я делаю не так?


person ulima69    schedule 24.02.2015    source источник
comment
Пожалуйста, добавьте свой импорт .. PerguntaController компонент CDI или управляемый компонент JSF?   -  person John Ament    schedule 25.02.2015
comment
Это компонент CDI. Я использую стеклянную рыбу.   -  person ulima69    schedule 25.02.2015
comment
Какая версия GlassFish?   -  person Harald Wellmann    schedule 26.02.2015
comment
Вы используете cdi 1.1? Если нет, зарегистрируйте перехватчик в beans.xml   -  person Kukeltje    schedule 26.02.2015
comment
Да cdi 1.1 и beans.xml с bean-discovery-mode = annotated   -  person ulima69    schedule 27.02.2015


Ответы (1)


Решено.

На beans.xml с bean-discovery-mode="annotated" не работает. Затем измените на bean-discovery-mode="all" и все работает нормально.

person ulima69    schedule 27.02.2015