Gostaria de saber qual é a melhor prática, no desenvolvimento de aplicações web com o struts 2,
para criar as regras de negócio. Por enquanto estou colocando nas actions mesmo. Tem algum pattern
J2EE que seja mais aconselhado para o struts? Ou alguma forma de fazer que alguém já usou?
Bom eu costumo deixar as regras de negócio numa classe Bo(Business Object) que é um simples Pojo e somente fazer as chamadas nas Actions, colocando a regra de negócio/conexão dentro das actions como vc faria para reaproveitamento de negócio ou separar o view do negócio??
Os frameworks que costumo usar são esses.
Camada web Struts 2/Plugin de integração com o Spring/DisplayTag/Prototype Ajax
+ Spring 2(Bean Factory, Dao, Transação)
+ Jpa/Hibernate 3/Pojo-Business Object
bbviana
Se vc desenvolve uma aplicação JEE, suas regras de negocio ficam nas suas sessions (ejbs).
A sua action deve ser “burra”, ou seja, nao deve conter nenhum tipo de logica de negocio. O q ela tem q fazer eh delegar todas as operações para uma session (ou para um BO, como o rodrigo disse). Para injetar o BO ou o EJB na sua action, use interceptadores ou Spring.
Lembrando que no struts nao funciona a anotação @EJB para injeção de ejbs na actions, ao contrario do q ocorre nos componentes JSF. Isso pq JSF é um framework para aplicações JEE.
samuelbrehm
Será que teria como mandar um exemplo de como injetar o BO dentro da action através de interceptors?
Obrigado!
bbviana
/** * Interceptador */publicclassInjecaoGerenciadorextendsAbstractInterceptor{publicStringintercept(ActionInvocationinvocation)throwsException{Objectaction=invocation.getAction();// Se for uma action que implementa GerenciadorPessoaAware, injetar um gerenciador nela.// Desse modo, quando a execução chegar na action, ela já terá a sua disposição um gerenciador.if(actioninstanceofGerenciadorPessoaAware){((GerenciadorPessoaAware)action).setGerenciador(newGerenciadorPessoaImpl());}returninvocation.invoke();}}// Interface q sua action precisa implementarpublicinterfaceGerenciadorPessoaAware{/** * Injeta o gerenciador * * @param gerenciador */publicvoidsetGerenciador(GerenciadorPessoagerenciador);}// Sua action implementa GerenciadorPessoaAware{publicclassPessoaActionextendsActionSupportimplementsGerenciadorPessoaAware{// referencia para a interface, nao para a implementaçãoprivateGerenciadorPessoagerenciador;publicvoidsetGerenciador(GerenciadorPessoagerenciador){this.gerenciador=gerenciador;}}
// Nao esqueca de configurar seu interceptador no seu struts.xml
bbviana
Lembrando q vc tbm pode fazer essa injeção usando Spring.
renatocustodio
Agora já tem plugin para Struts 2 injetar o ejb através da anotação @EJB…