E ae galera, blz?
Estou com um problema que não consegui resolver, muito menos entender o motivo de estar ocorrendo. Vamos ao cenário:
Eu tenho um classe ClienteModel, que é um EJB:
@Stateless
public class ClienteModel extends AbstractModel {
@Inject
private ClienteDAO clienteDAO;
@Interceptors(AuditoriaInterceptor.class)
public Cliente incluir(Cliente cliente) throws Exception {
clienteDAO.incluir(cliente);
return cliente;
}
}
Este EJB está anotado para utilizar o interceptor AuditoriInterceptor:
public class AuditoriaInterceptor {
@AroundInvoke
public Object intecept(InvocationContext invocation) throws Exception {
System.out.println("******************** AUDIT ");
try {
return invocation.proceed();
} catch (Exception e) {
throw e;
}
}
}
Criei uma classe abstrata CrudMB que possui alguns métodos básicos:
public abstract class CrudMB<T> {
private T bean;
public T getBean() {
return bean;
}
public void setBean(T bean) {
this.bean = bean;
}
public abstract AbstractModel<T> getModel();
public String incluir() {
try {
getModel().incluir(getBean()); // interceptor não executa
addMessage(null, "Inclusão realizada com sucesso");
return "pesquisa";
} catch (CorreiosException e) {
addError(null, e.getKey());
}
return null;
}
}
Então implementei o meu MB:
@ViewScoped
@ManagedBean
public class ClienteMB extends CrudMB<Cliente> {
@PostConstruct
public void init() {
setBean(new Cliente());
}
@Inject
private ClienteModel clienteModel;
public ClienteModel getModel() {
return clienteModel;
}
}
O interceptor não está sendo chamado quando o método incluir do meu MB é acionado pelo xhtml. O curioso é que se eu copiar o código da classe CrudMB para a classe ClienteMB, o interceptor é chamado:
@ViewScoped
@ManagedBean
public class ClienteMB extends CrudMB<Cliente> {
@Inject
private ClienteModel clienteModel;
public ClienteModel getModel() {
return clienteModel;
}
@Override
public String incluir() {
try {
getModel().incluir(getBean()); // interceptor executa
addMessage(null, "Inclusão realizada com sucesso");
return "pesquisa";
} catch (CorreiosException e) {
addError(null, e.getKey());
}
return null;
}
}
Eu sei que existe outra forma de fazer um interceptor utilizando o CDI, porém não posso modificar o interceptor atual.
Alguém já passou por este problema?