| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2011 19:06:51
|
Rfuhr
Debugger
Membro desde: 12/01/2011 10:48:13
Mensagens: 68
Localização: Cascavel - paraná
Offline
|
Estamos no desenvolvimento de um sistema WEB utilizando VRaptor + Hibernate.
Neste sistemas temos que gerar alguns relatorios ou arquivos txt, que demandam um certo tempo entre 10 a 40 minutos, dependendo da opção selecionada.
Para isto, estamos querendo fazer que esta tarefa trabalhe em forma de agendamento ou execução em segundo plano.
Exemplo: Usuário seleciona as informações e pede para gerar determinado relatorio. Esta solicitação lança uma requisição, que chamara a classe e metodo correspondete. e grava o mesmo numa pasta determinada na rede. Apos concluido gerá uma informação ao usuário que a solicitação foi concluida.
Qual seria a melhor forma de fazer isto utilizando-se VRaptor. Estamos em duvida como proceder. Seria o quartz?
Alguem poderia nos auxiliar. e dar um "norte" de como fazer, para que possamos seguir em frente.
Obrigado pela ajuda.
This message was edited 1 time. Last update was at 29/05/2011 21:21:49
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2011 22:10:58
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline
|
o quartz é bom quando você precisa executar uma tarefa periódica... se for um trabalho para ser feito uma vez só você pode usar a própria API de concorrência do java com o ExercutorService + runnables
procura por ThreadPoolExecutor e as classes do mesmo pacote
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2011 13:08:51
|
Rfuhr
Debugger
Membro desde: 12/01/2011 10:48:13
Mensagens: 68
Localização: Cascavel - paraná
Offline
|
Lucas Cavalcanti wrote:o quartz é bom quando você precisa executar uma tarefa periódica... se for um trabalho para ser feito uma vez só você pode usar a própria API de concorrência do java com o ExercutorService + runnables procura por ThreadPoolExecutor e as classes do mesmo pacote
Lucas fiz assim no meu SpedController: meu metodo geradorSpedFiscal da Classe GeradorSpedFiscal é assim: e o run... Ele até chama a execução em segundo plano.. mais dentro do this.executarSPED() ele usa session e DAOS. dai ele chama. mas ele finaliza o controller. .dai da erro na execução que esta em segundo plano: <pre> Exception in thread "pool-1-thread-1" org.hibernate.SessionException: Session is closed! at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72) at org.hibernate.impl.SessionImpl.getActionQueue(SessionImpl.java:194 at org.hibernate.engine.query.NativeSQLQueryPlan.coordinateSharedCacheCleanup(NativeSQLQueryPlan.java:179) at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:189) at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310) at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396) at br.com.diplomata.infra.daos.LivroFiscalDAO.fabricaTemporariaParaAsMensagensDoLivroFiscal(LivroFiscalDAO.java:274) at br.com.diplomata.infra.daos.LivroFiscalDAO.CriaTabelasTemporarias(LivroFiscalDAO.java:67) at br.com.diplomata.infra.daos.LivroFiscalDAO.selecionaLivroFiscal(LivroFiscalDAO.java:33) at br.com.diplomata.sped.fiscal.GeradorSpedFiscal.selecionaInformacoesLivroFiscalParaSped(GeradorSpedFiscal.java:11 at br.com.diplomata.sped.fiscal.GeradorSpedFiscal.executarSPED(GeradorSpedFiscal.java:77) at br.com.diplomata.sped.fiscal.GeradorSpedFiscal.run(GeradorSpedFiscal.java:130) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) </pre> Como fazer para que ele continue com a session do hibernate. só finalize depois que terminar o "Run()" chamado? Obrigado
This message was edited 1 time. Last update was at 28/05/2011 17:30:08
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2011 14:52:15
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline
|
vc vai precisar gerenciar as Sessions separadamente pra esssas tasks, não pode usar a mesma da requisição, pois não está na mesma thread e pode ser executado em qqer ponto
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2011 16:58:54
|
Rfuhr
Debugger
Membro desde: 12/01/2011 10:48:13
Mensagens: 68
Localização: Cascavel - paraná
Offline
|
Lucas Cavalcanti wrote:vc vai precisar gerenciar as Sessions separadamente pra esssas tasks, não pode usar a mesma da requisição, pois não está na mesma thread e pode ser executado em qqer ponto
Acabei fazendo o JobScheduler, conforme mostra no vraptor.com.br. Pois tambem teria algumas rotinas que são chamadas em determinados momentos.
Agora uma duvida, posso mostrar o meu Pool de Task, e quais estão sendo executadas.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2011 18:09:53
|
Rfuhr
Debugger
Membro desde: 12/01/2011 10:48:13
Mensagens: 68
Localização: Cascavel - paraná
Offline
|
Lucas Cavalcanti wrote:vc vai precisar gerenciar as Sessions separadamente pra esssas tasks, não pode usar a mesma da requisição, pois não está na mesma thread e pode ser executado em qqer ponto
Grande Lucas, acabei mudando e fazendo como havia iniciado com ThreadPoolExecutor.. A duvida anterior para saber quanto tem no pool consegui. usando this.executorFactory.getInstance().getTaskCount(). Preciso fazer o seguinte: Mostrar a lista de tarefas que estão no Pool.. tem como identifcar uma task e listar. Exemplo: SPED 01 - Exec SPED 02 - Exec SPED 03 - Wait SPED 04 - Wait Minhas Classes são: FabricadaThreadPool
This message was edited 1 time. Last update was at 28/05/2011 17:29:24
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2011 18:31:45
|
Lucas Cavalcanti
GUJ Hacker
![[Avatar]](/images/avatar/5f6780632f5d27dd0cded5fc9361169e.jpg)
Membro desde: 08/07/2007 00:08:14
Mensagens: 6396
Offline
|
bom, vc pode sobrescrever o toString da task e imprimir a lista de tasks que não foram executadas assim (algum dos métodos do pool faz isso)
PS: coloque o código entre [code ] e [/code]
|
--
Caelum
www.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/05/2011 21:20:07
|
Rfuhr
Debugger
Membro desde: 12/01/2011 10:48:13
Mensagens: 68
Localização: Cascavel - paraná
Offline
|
Lucas Cavalcanti wrote:bom, vc pode sobrescrever o toString da task e imprimir a lista de tasks que não foram executadas assim (algum dos métodos do pool faz isso)
PS: coloque o código entre [code ] e [/code]
Valeu lucas, e pode deixar que as proximas vão entre .
|
|
|
 |
|
|