Struts 2 e regras de negócio

6 respostas
samuelbrehm

Saudações a todos!

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?

Desde já obrigado!

6 Respostas

rodrigo_corinthians

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
 */
public class InjecaoGerenciador extends AbstractInterceptor {
     public String intercept(ActionInvocation invocation) throws Exception {
        Object action = 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 (action instanceof GerenciadorPessoaAware) {
            ((GerenciadorPessoaAware) action).setGerenciador(new GerenciadorPessoaImpl());
        }

        return invocation.invoke();
    }
}

// Interface q sua action precisa implementar
public interface GerenciadorPessoaAware {

    /**
     * Injeta o gerenciador
     * 
     * @param gerenciador
     */
    public void setGerenciador(GerenciadorPessoa gerenciador);
}


// Sua action implementa GerenciadorPessoaAware{
public class PessoaAction extends ActionSupport implements GerenciadorPessoaAware{
  // referencia para a interface, nao para a implementação
   private GerenciadorPessoa gerenciador; 
   public void setGerenciador(GerenciadorPessoa gerenciador) {
        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

http://cwiki.apache.org/S2PLUGINS/ejb3-plugin.html

Criado 25 de outubro de 2007
Ultima resposta 4 de mai. de 2008
Respostas 6
Participantes 4