Opa Galera, tenho uma dúvida.
O hibernate Tools, plugin do eclipse, tem a opção de exportar classes DAO para tornar mais fácil fazer a persistencia com o bd... ele cria uma classe +- assim..
public class PacoteViagemItemHome {
private static final Log log = LogFactory
.getLog(PacoteViagemItemHome.class);
private final SessionFactory sessionFactory = getSessionFactory();
protected SessionFactory getSessionFactory() {
try {
return (SessionFactory) new InitialContext()
.lookup("SessionFactory");
} catch (Exception e) {
log.error("Could not locate SessionFactory in JNDI", e);
throw new IllegalStateException(
"Could not locate SessionFactory in JNDI");
}
}
public void persist(PacoteViagemItem transientInstance) {
log.debug("persisting PacoteViagemItem instance");
try {
sessionFactory.getCurrentSession().persist(transientInstance);
log.debug("persist successful");
} catch (RuntimeException re) {
log.error("persist failed", re);
throw re;
}
}
........ mais métodos.......
}
Nesta classe ele gera aquele método, getSessionFactory para recuperar o sessionFactory do hibernate.
No meu caso o Hibernate é integrado com o Spring, portanto quem cria a SessionFactory é o Spring, deixando ele como um bean na aplicação.
Segue abaixo a criação do bean:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/database" />
<property name="username" value="user" />
<property name="password" value="senha" />
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>../hibernate/cadastro/parametrizacao/Orgao001Param.hbm.xml</value>
<value>../hibernate/cadastro/pais/Pais.hbm.xml</value>
.............. meus POJOS .....
<value>../hibernate/cadastro/titulo/TituloPagarParcela.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>hibernate.cfg.xml</value>
</property>
</bean>
E para usalo em uma classe eu faço um wire no spring:
<bean id="enderecamentoBean" class="br.com.dsystems.beans.DSBeanEnderecamento" scope="request">
<property name="factory" ref="mySessionFactory" />
</bean>
E acesso criando uma variavel na minha classe:
private SessionFactory factory;
public void setFactory(SessionFactory factory) { this.factory = factory; }
public SessionFactory getFactory() { return this.factory; }
O método getSessionFactory retorna esta mesma factory que eu criei no Spring ? Não né ?
Se não for, como eu faço para recuperar aquela que o spring criou ?
Obrigado
Rodrigo Kerkhoff