Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: RES: [aspectj-users] AspectJ with Servlets on Tomcat 5.x

I think that I have other problem, now:

    Mmm, I've created other AspectJ Project and I've created a simple class and a simple Aspect:

Aspect -->
package org;

public aspect LogAspect {
    protected org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger("aspectLog");
   
    pointcut sets (org.ProvaClass p, int value) : call (void org.ProvaClass.set*(int)) && target(p) && args(value);
   
    before (org.ProvaClass p, int value) : sets(p,value){
        System.out.println("merda");
    }
}

and Simple class -->

package org;

public class ProvaClass {

    protected String name;
    protected int value;
   
    public ProvaClass(String name, int value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }
   
    public static void main (String args[]) {
        ProvaClass cl = new ProvaClass("hola",5);
        cl.setName("Neus");
        cl.setValue(21);
    }
}


So, I capture all set*(int) methods of ProvaClass. And it runs correctly.

But, in my web application I've created this servlet (Controller of MVC) -->

package com.gmsoft;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.sql.*;

/**
 * Servlet implementation class for Servlet: Controller
 * @web.servlet
 *   name="Controller"
 *   display-name="Controlador"
 *   description="Controlador de tota l'aplicació Web - MVC"
 * @web.servlet-mapping
 *   url-pattern="/Controller" 
 */
 public class ControllerServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     */
    public ControllerServlet() {
        super();
    }      
   
    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.getWriter().print("Get");
    }     
   
    /* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Integer action = "">         request.getSession().getServletContext().log("action ----->" + action);
       
        if (action != null) {
            switch (action.intValue()) {
                case com.gmsoft.enumerates.ActionsEnum.LOGIN:
                    com.gmsoft.utils.UtilsModelFacade facade = (com.gmsoft.utils.UtilsModelFacade)request.getSession().getAttribute("ModelFacade");
                    //Identificació del client en front al sistema.
                    if (facade.validate(request.getAttribute("user").toString(), request.getAttribute("password").toString())) {
                        //Obtenció del role del client.
                        facade.getRole(1,false);
                    }
                    break;
           
                case com.gmsoft.enumerates.ActionsEnum.CHANGE_LANGUAGE:
                    request.getSession().setAttribute("language", request.getAttribute("language"));
                    request.getSession().getServletContext().log(request.getRequestURL().toString());
                    break;
               
                default:
                    response.getWriter().print("Post");
                    request.getSession().getServletContext().log("default");
            }
        }else{
            response.getWriter().write("bull");
        }
    }
   
    public void setName(String name) {
        System.out.println("merda");
    }
}

and I've implemented this aspect -->

package com.gmsoft.aspects;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public aspect LogAspect {
    pointcut doPostMethod (com.gmsoft.ControllerServlet controller, HttpServletRequest request, HttpServletResponse response) : call (void com.gmsoft.ControllerServlet.doPost(HttpServletRequest request, HttpServletResponse response)) && target(controller) && args(request,response);
    pointcut sets (com.gmsoft.ControllerServlet controller, String name) : call (void com.gmsoft.ControllerServlet.set* (String)) && target(controller) && args(name);
   
    before (com.gmsoft.ControllerServlet controller, HttpServletRequest request, HttpServletResponse response) : doPostMethod(controller,request,response) {
        System.out.println("merda");
        request.getSession().getServletContext().log("merda");
        try {
            response.getWriter().write("aspect");
        }catch (Exception ex) {
            ex.printStackTrace();
        }
    }
   
    before (com.gmsoft.ControllerServlet controller, String name) : sets(controller, name) {
        System.out.println(name);
    }
}

I've compiled both projects and I've tried decompile my .class files -->

In first project, the class is modificated by AspectJ weaver -->

    public static void main(String args[])
    {
        ProvaClass cl = new ProvaClass("hola", 5);
        cl.setName("Neus");
        byte byte0 = 21;
        ProvaClass provaclass = cl;
        LogAspect.aspectOf().ajc$before$org_LogAspect$1$3f5957a5(provaclass, byte0);
        provaclass.setValue(byte0);
    }

but, in my ServletController class AspectJ don't inject AspectJ intercode inside my ServletController class:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        Integer action = "">         request.getSession().getServletContext().log("action ----->" + action);
        if(action != null)
            switch(action.intValue())
            {
            case 4: // '\004'
                UtilsModelFacade facade = (UtilsModelFacade)request.getSession().getAttribute("ModelFacade");
                if(facade.validate(request.getAttribute("user").toString(), request.getAttribute("password").toString()))
                    facade.getRole(1, false);
                break;

            case 6: // '\006'
                request.getSession().setAttribute("language", request.getAttribute("language"));
                request.getSession().getServletContext().log(request.getRequestURL().toString());
                break;

            case 5: // '\005'
            default:
                response.getWriter().print("Post");
                request.getSession().getServletContext().log("default");
                break;
            }
        else
            response.getWriter().write("bull");
    }

    public void setName(String name)
    {
        System.out.println("merda");
    }

Do you know if it is normal?

Back to the top