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?
|