Hibernate (OpenSession in View) - createCriteria is not valid without active transaction

Boa tarde galera,
sempre usei Open Session in View nas minhas aplicações, só que agora precisei criar agendamentos no Quartz. Só que ao tentar executar algo com o Hibernate por algum agendamento do Quartz, ele da o erro:

[code]SEVERE: org.hibernate.HibernateException: createCriteria is not valid without active transaction
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)
at com.sun.proxy.$Proxy153.createCriteria(Unknown Source)
at br.com.zanzini.dao.VendedorDao.getVendedorByCod(VendedorDao.java:33)
at br.vendas.integracao.VendedorIntegra.tratarVendedor(VendedorIntegra.java:108)
at br.vendas.integracao.VendedorIntegra.exportaVendedor(VendedorIntegra.java:60)
at br.vendas.job.ExportaVendedor.execute(ExportaVendedor.java:31)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)

SEVERE: at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:348)
SEVERE: at com.sun.proxy.$Proxy153.createCriteria(Unknown Source)
SEVERE: at br.com.zanzini.dao.VendedorDao.getVendedorByCod(VendedorDao.java:33)
SEVERE: at br.vendas.integracao.VendedorIntegra.tratarVendedor(VendedorIntegra.java:108)
SEVERE: at br.vendas.integracao.VendedorIntegra.exportaVendedor(VendedorIntegra.java:60)
SEVERE: at br.vendas.job.ExportaVendedor.execute(ExportaVendedor.java:31)
SEVERE: at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
SEVERE: at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)[/code]
Não sei muito a respeito, mas creio que tem algo a ver com o Filter e com Session.

Quais opções eu tenho para contornar esse erro e conseguir usar minha conexão do Hibernate?

Obrigado.
Abraço!

Abra a transação na mão e feche depois. [=

Teria como você verificar se eu montarei isso corretamente? Fazendo um grande favor.

[quote] SessionFactory sf = HibernateUtil.getSessionFactory();
sf.getCurrentSession().beginTransaction();
sf.getCurrentSession().getTransaction().commit();
ven = new VendedorDao().getVendedorByCod(Long.parseLong(split[0]));
sf.close();[/quote]

Ou isso: (?)

SessionFactory sf = HibernateUtil.getSessionFactory(); try { sf.getCurrentSession().beginTransaction(); sf.getCurrentSession().getTransaction().commit(); ven = new VendedorDao().getVendedorByCod(Long.parseLong(split[0])); } finally { if (!sf.isClosed()) { sf.close(); } }

Consegui fazer funcionar assim:

try { sf.getCurrentSession().beginTransaction(); ven = new VendedorDao().getVendedorByCod(Long.parseLong(split[0])); sf.getCurrentSession().getTransaction().commit(); } finally { }
Não pude deixar o sf.close(), que se não dava erro.
Minha preocupação com isso é, a conexão está ficando aberta?

[quote=faelzindc]Consegui fazer funcionar assim:

try { sf.getCurrentSession().beginTransaction(); ven = new VendedorDao().getVendedorByCod(Long.parseLong(split[0])); sf.getCurrentSession().getTransaction().commit(); } finally { }
Não pude deixar o sf.close(), que se não dava erro.
Minha preocupação com isso é, a conexão está ficando aberta?[/quote]Sempre feche a conexão. Não sei como funciona a sessão do hibernate mas eu imagino que fique aberta.