Olá,
Eu tenho um interceptor que é responsável por verificar o usuário logado no acesso de páginas restritas do meu sistema. Esse interceptor precisa buscar um registro do banco de dados. Porém, quando ele tenta acessar, diz que a session do hibernate está fechada.
Interceptor:
[code]@Intercepts
public class AuthInterceptor implements Interceptor {
private final Result result;
private final Auth auth;
public AuthInterceptor(Result result, Auth auth) {
this.result = result;
this.auth = auth;
}
public boolean accepts(ResourceMethod method) {
return this.auth.isLogado() || method.containsAnnotation(Restrito.class);
}
public void intercept(InterceptorStack stack, ResourceMethod method,
Object instance) throws InterceptionException {
if (auth.isLogado()) {
result.include("logado", auth.getPaciente());
stack.next(method, instance);
} else if (method.containsAnnotation(Restrito.class)) {
result.redirectTo(PagesController.class).index(true);
}
}
}[/code]
Dentro do interceptor eu faço auth.getPaciente(). Essa classe que faz o acesso ao banco:
[code]@Component
@SessionScoped
public class Auth {
private String pacienteCPF;
private PacienteDao pacienteDao;
public Auth(PacienteDao pacienteDao) {
this.pacienteDao = pacienteDao;
}
...
public Paciente getPaciente() {
return pacienteDao.visualizar("cpf", pacienteCPF);
}
}[/code]
PacienteDao é a classe que trabalha com a session do hibernate:
[code]@Component
public class PacienteDao extends ModelDao {
public PacienteDao(Session session) {
super(session, Paciente.class);
}
...
}[/code]
A session é injetada através da seguinte factory:
[code]@Component
public class HibernateSession implements ComponentFactory {
private SessionFactory factory;
private Session session;
public HibernateSession(SessionFactory factory) {
this.factory = factory;
}
@PostConstruct
public void construtor() {
this.session = factory.openSession();
}
public Session getInstance() {
return this.session;
}
@PreDestroy
public void destrutor() {
this.session.close();
}
}[/code]
Porque a session fica fechada durante a execução do interceptor?