AspectJ

10 respostas
ikki_de_fenix

Ola Pessoal !!

To usando o AspectJ para o Eclipse. Fiz uma aplicação de teste usando o projeto dom Aspect e rodando dentro do Eclipse funcionou normalmente. Entom gerei um jar dos Aspect e testei na web (num servidor WebSphere 4) e nom funcionou. Pergunta: existe alguma configuração para funcionar o Aspect na Web ou no websphere ?

Abaraços
Thomás

10 Respostas

C

Mostra a exceção

Mauricio_Linhares

Você colocou o arquivo .jar do AspectJ lá na pasta lib da sua aplicação?

ikki_de_fenix

Não dar nenhum erro de exceção

Vou explicar melhor :

Criei uma classe (PTMManagerJ.java) e um Aspect (PTMAspect.aj) rodando o PTMManagerJ pelo eclipse o aspecto funciona, empacotei o aspect e a classe (num jar) e coloquei no WEB-INF/lib da minha aplicação chame a classe PTMManagerJ dentro de um Action do Struts e o aspect não foi executado !!!

Mauricio_Linhares

Você colocou o aspectjrt.jar lá no lib da sua aplicação? O aspecto não funciona porque não está sendo chamado ou porque dá uma exceção?

Cole o código dos dois aí.

ikki_de_fenix

Sim !! O jar do aspect está no WEB-INF/lib da minha aplicação

– Código Java

public class PTMManagerJ {

    public PTMManagerJ() {
    }
    
    public static void main(String args[]) {
        PTMManagerJ managerJ = new PTMManagerJ();
        try {
            managerJ.testeMetodo();
            managerJ.testeMetodo2();
        } catch (Exception e) {
        }
    }
    
    public void testeMetodo() throws Exception {
        System.out.println("testeMetodo");
        throw new Exception("testeMetodo");
    }
    
    public void testeMetodo2() throws Exception {
        System.out.println("testeMetodo2");
        throw new Exception("testeMetodo2");
    }    

}

– Código Aspect

public aspect PTMAspect {

    pointcut testeMetodo() : call(* PTMManagerJ.testeMetodo());
    
    before() :testeMetodo() {
        System.out.println("Antes de Executar o testemetodo");
    }
    
    after() :testeMetodo() {
        System.out.println("Depois de Executar o testemetodo");
    }    
    
    after() throwing(Exception e): target(PTMManagerJ) && call(void testeMetodo()) {
        System.out.println("Excepion no metodo no testemetodo");
    }
    
}

– Struts Action

O DefaultAction é uma classe que eu implementei a partir do Action do Struts

public class ServicoEmsAction extends DefaultAction {

    public ActionForward executeForm(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        PTMManagerJ managerJ = new PTMManagerJ();
        managerJ.testeMetodo();
        
        return mapping.getInputForward();
    }
    
}

EDIT (Thingol) - Pus os tags [ code ] para você.

Mauricio_Linhares

Quem é DefaultAction? Herda de quem? Porque o método não é execute? Esse Action vem de DispatchAction?

Essa classe DefaultAction não existe no Struts.

ikki_de_fenix

Não esquenta com essa classe ela herda do Action normal

Mauricio_Linhares

Pois se ela heda de Action deveria implementar o método com o nome de execute, não executeForm.

ikki_de_fenix

Meu RELAXA !!! Esse Action funciona beleza entra normal eu só fiz uma implementação diferente pro Action para uma necessidade que tinha aki na empresa !!!

Mauricio_Linhares

Então mude o System.out lá do seu aspecto pra o lançamento de uma exceção, porque o System.out do seu servidor pode não ser exatamente onde você está esperando que ele apareça. Ou então coloque um logger escrevendo em algum lugar específico.

Outra coisa, se você não explica como a sua aplicação se comporta, agente não tem com advinhar né.

Criado 2 de junho de 2005
Ultima resposta 2 de jun. de 2005
Respostas 10
Participantes 3