Refatorando Webwork Actions  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
dukejeffrie
Virtual Machine Man
[Avatar]

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
[Email] [WWW] [MSN] [ICQ]
smota
Moderador
[Avatar]

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"
dukejeffrie
Virtual Machine Man
[Avatar]

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
[Email] [WWW] [MSN] [ICQ]
smota
Moderador
[Avatar]

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"
ricardolecheta
GUJ Master
[Avatar]

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/
cv
Moderador
[Avatar]

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?
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
dukejeffrie
Virtual Machine Man
[Avatar]

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
[Email] [WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team