| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 11:47:32
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Olá,
estou utilizando os seguintes frameworks em um projeto web:
- Spring 1.2.6
- Hibernate 3.1
- JSF 1.1
- TomCat 5.5
- Java 5
Eu tentei configurar o filtro OpenSessionInViewFilter para acessar meus TOs em meus Managed Beans (JSF) utilizando lazy-load, mas eu devo ter cometido algum equivoco, pois quando tento acessar, vejo o famoso erro:
Acredito que eu devo ter cometido algum engano na configuração do filtro. Vejam como eu configurei meus arquivos xml:
Acredito que nao preciso incluir todos os meus arquivos XML, visto que eles sao apenas mapeamentos de meus beans. Vou dar prioridade para o s relacionados a persistencia:
hibernateProperties.xml (fragmento)
daoContext.xml (fragmento)
transactionContext.xml
enfim, serviceContext.xml (fragmento)
Meus DAOs todos herdam de HibernateDaoSupport e utilizam getHibernateTemplate().
Acredito que eu deva ter feito alguma configuracao errada no Filtro. Quando eu executo o codigo abaixo no meu Managed bean, ocorre o erro:
O log da aplicacao eh:
Percebi que quando eu carrego a pagina, aparece no log a mensagem:
e, quando a pagina é carregada, aparece tbm:
Porem, quando eu clico no <h:commandButtom> para que ele invoque a action do meu managed bean (veja log acima), o filtro aparentemente nao é invocado.
O que será que está errado na minha configuracao? Alguem consegue ver onde eu me equivoquei?
Agradeco qquer ajuda.
|
SCJP, SCWCD |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 13:03:34
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
+ informacoes:
Retirei os outros filtros que existiam - Ajax4jsf e ExtensionsFilter (myFaces) e o erro continua ocorrendo.
Perceba que o log informa que o transactionManager fecha a conexao assim que o services finaliza sua execucao:
Será que é por isso que no managed bean o erro ocorre? Por estarem na mesma requisicao, a conexao nao deveria continuar aberta e ser fechada pelo filtro apenas no final da mesma?
Já pesquisei bastante na web, e encontrei outros desenvolvedores com problemas por existirem 2 contextos com sessoes e sessionFactories diferentes... mas isso ocorria no Struts, e eu estou usando JSF.
Tenho certeza que estou cometendo algum equívoco, mas nao sei onde
Obrigado
|
SCJP, SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 13:12:14
|
marcelo_mococa
Virtual Machine Man
![[Avatar]](/images/avatar/90248d0a98105fa534cf2b0696ddd12f.jpg)
Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline
|
achei um pouco estranho o teu mapeamento do spring. O erro pode estar aí.
Não há necessidade de mapear o hibernateDaoSpuport.
Faça teu DAO extender a HibernateDaoSupport e injete o sessionFactory.
tua classe DAO
Talvez o erro não esteja aí, porém é uma forma mais correta e elegante de se mapear os DAO's.
T+
|
Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 13:26:39
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Ola Marcelo, obrigado pelo seu comentário.
Originalmente meu mapeamento estava conforme sua indicacao, mas como o erro ocorria realizei essa alteracao, seguindo um artigo que achei no ArcMind.
http://www.thearcmind.com/confluence/display/SpribernateSF/Configuring+Hibernate%2C+Spring%2C+OpenInSessionViewFilter+and+MyFaces+JSF?showComments=true#comments
Realizei a modificacao sugerida por voce, mas o erro continua ocorrendo.
Onde será que estou errando?
|
SCJP, SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 13:34:36
|
marcelo_mococa
Virtual Machine Man
![[Avatar]](/images/avatar/90248d0a98105fa534cf2b0696ddd12f.jpg)
Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline
|
engraçado... segundo o log que vc mostrou, a requisição passou pelo filtro.
Não conheço o jsf, me explique pq você aplicou o filtro nas páginas jsp tb?
Esse .jsf seria o mesmo que o .do do struts?
Se for aplique o filtro somente nele, retire o filtro das jsp.
|
Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 13:57:14
|
Kenobi
GUJ Master
![[Avatar]](/images/avatar/cf2226ddd41b1a2d0ae51dab54d32c36.jpg)
Membro desde: 14/11/2003 13:06:37
Mensagens: 1678
Localização: Brasil
Offline
|
Hey amigo, tive um problema similar com esse filtro, quando usava o template do Spring e o método merge().
Altere primeiramente o código para o modo anterior, estendendo a classe HibernateDAOSupport e usando o template.
Deixei um código nessa thread - http://www.guj.com.br/posts/list/41629.java , onde alterei uma configuração do OpenSession, e no meu caso funcionou.
Tenta, se der certo, poste pra eu saber
|
----------------------------------------------------------
SOA|EXPERT - http://www.soaexpert.com.br
SOA de um jeito simples e eficiente. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 14:02:18
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Oi Marcelo, obrigado novamente pela sua ajuda!
Eu apliquei o filtro erroneamente nas paginas jsp. Realmente a necessidade existe apenas em aplicá-lo para paginas jsf.
Respondendo sua pergunta: Sim, o .jsf eh para o JSF o mesmo que o .do é para o Struts.
E sobre o log, eu percebi que quando entro na pagina jsf pela url, o filtro é aplicado. Mas, quando clico no botao que dispara a action JSF, o filtro aparentemente nao eh aplicado, pois nao aparece no log a informacao de que ele abriu uma sessao.
Alterei o web.xml, deixando apenas o filtro para paginas jsf, mas o erro persiste
Onde será que está o erro? Já pesquisei bastante na web, mas nao encontrei nada diferente daquilo que estou usando.
Obrigado pela ajuda
|
SCJP, SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 14:10:14
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Ola Kenobi, obrigado pelo seu comentario.
Eu tinha visto a thread que vc mencionou, mas como o meu problema ocorre em uma simples consulta (assim como o da thread citada), acreditei que sua solucao nao se aplicava.
Vou realizar as alteracoes por ti descritas, e postarei se obtive sucesso ou nao... tomara que funcione
Valeu pessoal, a ajuda de voces está sendo muito bem vinda.
Obrigado
|
SCJP, SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/10/2006 15:27:49
|
marcelo_mococa
Virtual Machine Man
![[Avatar]](/images/avatar/90248d0a98105fa534cf2b0696ddd12f.jpg)
Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline
|
engraçado...
como vc está chamando a action por um botão? vc está usando AJAX? é para dar o post em um form?
|
Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2006 09:31:47
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Kenobi,
tentei utilizar a implementacao que vc sugeriu mas ela nao funcionou tambem :(
Nao sei se eu fiz corretamente. Vejam como ficou meu arquivo web.xml:
e o codigo do filter:
Depurando, percebi que o metodo AutoFlushOpenSessionInViewFilter.getSession eh invocado corretamente no inicio do request, mas a sessão continua sendo fechada antes da requisicao acabar. Ou seja, quando eu executo o seguinte codigo no meu Managed Bean, a sessao acaba:
Estou ficando aflito... onde será que estou errando?
Obrigado
|
SCJP, SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/10/2006 09:46:20
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline
|
Marcelo,
estou utilizando um <h:commandButton>, que é um componente JSF. Este componente realiza o submit da pagina.
Minha pagina jsf está assim:
E meu managed bean está assim:
A configuracao desse managed bean no faces-config.xml foi feita assim:
Acredito que esteja tudo correto com as configuracoes acima exibidas.
Como dito no post anterior, o log está informando que a sessao está sendo finalizada assim que o services finalizada sua execucao... o que é estranho para mim, pois tinha entendido que o filtro OpenSessionInViewFilter deveria manter a conexao aberta até o final da requisicao.
Acredito que eu esteja errando em algum ponto, mas nao sei em qual...
Amigos, alguma sugestao?
Obrigado a todos pela ajuda
|
SCJP, SCWCD |
|
|
 |
|
|