| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 09:43:40
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
eu tenho um código assim no método doExecute() das minhas Actions:
Eu quero refatorar isso pra colocar num lugar só a parte que mexe com o hibernate, mas eu não posso/devo/quero usar AOP.
Também está muito tarde pra passar tudo pro WW2.
Todas as minhas actions já extendem HibernateAction, que tem os métodos de abrir e fechar a session.
O problema de reescrever o método execute() é que eu não quero abrir a session antes de chamar o doValidation(), pq é meio sem nexo, e eu não tô a fim de copiar o execute() da ActionSupport pra dentro da minha action.
Alguém tem alguma idéia??
[]s!
|
Brevity is the soul of wit |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 09:47:40
|
smota
Moderador
![[Avatar]](/images/avatar/ca9c267dad0305d1a6308d2a0cf1c39c.jpg)
Membro desde: 21/02/2003 16:19:19
Mensagens: 1647
Offline
|
Alguem ae ... o WW 1.x não tem interceptors? se tiver é só criar um
|
"Perfection is reached not when there's nothing more to add but when there's no more to take out" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 09:54:28
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
pois eh, acho que não.
eu acho que "tuuudo não dá". Se eu quiser minha session aberta antes do doExecute() mas depois do doValidation(), eu tenho mesmo que sabotar a ActionSupport.
mas vai que alguém já passou por isso, queria ver como o pessoal resolve esse tipo de encrenca...
Minhas actions tão feiamente duplicadas...
|
Brevity is the soul of wit |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 11:05:02
|
smota
Moderador
![[Avatar]](/images/avatar/ca9c267dad0305d1a6308d2a0cf1c39c.jpg)
Membro desde: 21/02/2003 16:19:19
Mensagens: 1647
Offline
|
Porque ao invés de sabotar a ActionSupport você não faz uma classe extendendo a danada e escreve o doExecute() nela, ae vc muda o nome nas sua classes do método pra myDoExecute()
Entonces é só chamar o danado a partir do doExecute() padrão que trata tudo que tem que tratar com o Hibernate & cia (inclusive os erros) ....
(vc podria tb chamar super.doExecute() no doexecute() de cada action, mas teria duplicado 1 linha em cada action )
Esse principio é o mesmo dos interceptors, mais simples mas eh a mesma ideia.
hummm ... funciona, mas se eh a melhor maneira nao sei ... socorro, alguem que usa o 1.x ... outra idéia?
|
"Perfection is reached not when there's nothing more to add but when there's no more to take out" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 12:03:56
|
ricardolecheta
GUJ Master
![[Avatar]](/images/avatar/b59c67bf196a4758191e42f76670ceba.jpg)
Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline
|
eu faço deste jeito que o smota disse com o Struts, deixo o controle de transação do Hibernate em uma action mãe...
nesta action eu inicio uma transação do Hibernate, depois chamo um método abstrato para as subclasses tratarem a requisição, depois disto fecho a sessao/commit/rollback...
|
Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 12:34:47
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Eh, nao tem mto jeito pra se virar com isso sem interceptors alem do que o smota mencionou...
Talvez usar a tal da action-mae como decorator?
Nao pensei muuuuito bem nisso, mas acho que da pra passar a ideia. Isso da certo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/02/2004 14:25:45
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
cv, viajei nessa que vc falou.
HibernateDecorator é a minha classe?
Então, galera... eu tb pensei nisso, ter um hibExecute() que seria executado só em modo "online"...
... mas daí eu tenho que implementar tb o hibDefault(), o hibPreview(), e todos os outros commands da classe.
Eu posso mexer na ActionFactory, colocar minha própria factory, botar um decorator nas actions que eu crio: se ela implementar HibernateAction (eu transformo a classe em interface, e a atual vira AbstractHibernateAction ou HibernateActionSupport), eu intercepto os métodos doXXX():
mas olha o trampo que dá... editar webwork.properties!! : )
implementar mais várias classes...
se eu terminar antes do prazo (tá, tá, podem rir!) eu faço algo mais nessa linha...
ou então o cv explica a do decorator...
[]s!!
|
Brevity is the soul of wit |
|
|
 |
|
|