|
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? |
_______________________________________________ aspectj-users mailing list [email protected] https://dev.eclipse.org/mailman/listinfo/aspectj-users
