Olá pessoal do fórum, estou com um problema ao tentar recuperar uma lista em uma JSP. Estou tendo um java.lang.NullPointerException relacionado a uma Session.
Vamos códiogo:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
scope="singleton">
<property name="configLocation">
<value>classpath:/hibernate.cfg.xml</value>
</property>
</bean>
</beans>
@Component
public class HibernateUtil implements ComponentFactory<Session> {
@Autowired
private SessionFactory factory; //recebe a SessionFactory configurada no applicationContext.xml
private Session session;
public SessionFactory getFactory() {
return factory;
}
public void setFactory(SessionFactory factory) {
this.factory = factory;
}
@PostConstruct
public void abre() {
this.session = factory.openSession();
}
@Override
public Session getInstance() {
return factory.openSession();
}
@PreDestroy
public void fecha() {
this.session.close();
}
}
public class GenericDao<T> {
@SuppressWarnings("rawtypes")
private Class persistentClass;
/**
* Injeta a dependência Session através da anotação @Autoriwed.
* O bean injetado (nesse caso) vem do método getInstance() da
* classe HibernateUtil
*/
@Autowired
protected Session session;
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
@SuppressWarnings("rawtypes")
public GenericDao(Class pC){
this.persistentClass = pC;
}
//MÉTODOS PARA O CRUD DO OBJETO....
}
@Component
public class GarcomDao extends GenericDao<Garcom> {
public GarcomDao() {
super(Garcom.class);
}
@SuppressWarnings("unchecked")
@Override
public List<Garcom> getLista() {
return session.createCriteria(Garcom.class)
.addOrder(Order.asc("nome"))
.list();
}
}
//NA MINHA JSP
<!-- cria a lista -->
<jsp:useBean id="dao" class="br.com.dao.GarcomDao"/>
Garçom: <select name="registro.keyGarcom">
<c:forEach var="garcom" items="${dao.lista }">
<option value="${garcom.id_garcom}">${garcom.nome}</option>
</c:forEach>
</select><br>
Na hora que eu acesso a JSP eu recebo um java.lang.NullPointerException com relação a Session na linha return session.createCriteria(Garcom.class)
do método getLista() da classe GarcomDao(debug do programa me confirmou isso).
O estranho é que isso só ocorre quando eu tento recuperar a lista através do jstl na jsp. Em outros pontos da aplicação, como por exemplo, na
hora de inserir ou excluir os objetos através do controller’s a Session é injetada corretamente.Alguma idéia do que pode está ocorrendo???
Abraço a todos