[jboss-user] [JBoss AOP] - Re: probleam in granularity of interception

fabiocsilva do-not-reply at jboss.com
Thu Dec 7 21:32:29 EST 2006


Weaving mode: compile-time

jboss-aop.xml:

  | 
  | 
  | <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  | <aop>
  | 
  | 	<aspect class="aspects.distribution.HealthWatcherServerSideAspect"
  | 		scope="PER_VM" />
  | 
  | 	<aspect class="aspects.distribution.HealthWatcherClientSideAspect"
  | 		scope="PER_VM" />
  | 
  | 
  | 
  | 	<aspect class="aspects.dataManagement.nonpersistent.DataCollectionNonPersistent"
  | 		scope="PER_VM" />
  | 
  | 
  | <!--
  | 	<aspect class="aspects.dataManagement.persistent.DataCollectionPersistent"
  | 		scope="PER_VM" />
  | -->
  | 
  | 
  | 	<aspect class="aspects.dataManagement.persistent.PersistenceControlHealthWatcher"
  | 		scope="PER_VM" />
  | 
  | 
  | 	<introduction
  | 		expr="class(complaint.ComplaintRecord) 
  | 						OR class(healthGuide.HealthUnitRecord) 
  | 						OR class(healthGuide.MedicalSpecialtyRecord)
  | 						OR class(employee.EmployeeRecord) 
  | 						OR class(complaint.DiseaseRecord)">
  | 		<mixin>
  | 			<interfaces>
  | 				aspects.dataManagement.util.SystemRecord
  | 			</interfaces>
  | 			<class>aspects.dataManagement.util.SystemRecordImpl</class>
  | 			<construction>
  | 				new aspects.dataManagement.util.SystemRecordImpl()
  | 			</construction>
  | 		</mixin>
  | 	</introduction>		
  | 
  | 
  | 	<pointcut
  | 		expr="execution(public void gui.servlets.ServletWebServer->init(javax.servlet.ServletConfig))"
  | 		name="facadeMainExecution" />
  | 		
  | 	<bind pointcut="facadeMainExecution">
  | 		<advice
  | 			aspect="aspects.distribution.HealthWatcherServerSideAspect"
  | 			name="beforeFacadeMainExecution" />
  | 	</bind>
  | 
  | 	
  | 	<pointcut name="facadeCallers"
  | 		expr="within($instanceof{javax.servlet.http.HttpServlet})" />
  | 
  | 
  | 	<pointcut name="facadeCalls"
  | 		expr="call(* controllers.HealthWatcherFacade->*(..)) AND !call(static * controllers.HealthWatcherFacade->*(..))" />
  | 
  | 
  | 
  | 	<bind pointcut="facadeCallers AND facadeCalls">
  | 		<advice
  | 			aspect="aspects.distribution.HealthWatcherClientSideAspect"
  | 			name="aroundFacadeLocalCalls" />
  | 	</bind>
  | 
  | <!--
  | 	<pointcut name="recordsCreation"
  | 		expr="all($instanceof{aspects.dataManagement.util.SystemRecord}) AND !within($instanceof{aspects.dataManagement.AbstractDataCollectionCustomization})" />
  | -->
  | 
  | 	<pointcut name="recordsCreation"
  | 		expr="call(employee.EmployeeRecord->new(..))" />
  | 	
  | 	<bind pointcut="recordsCreation">
  | 		<advice
  | 			aspect="aspects.dataManagement.nonpersistent.DataCollectionNonPersistent"
  | 			name="aroundRecordsCreation" />
  | <!--			
  | 		<advice
  | 			aspect="aspects.dataManagement.persistent.DataCollectionPersistent"
  | 			name="aroundRecordsCreation" />			
  | -->
  | 	</bind>	
  | 	
  | 
  |  
  | 		<pointcut name="connectionOperations"	expr="call(void IPersistenceMechanism->connect()) OR 
  |         call(void IPersistenceMechanism->disconnect())" />
  | 
  | 
  | 	
  | 
  | 
  | 
  | 	<pointcut name="obtainPmInstance"
  | 		expr="call(* aspects.dataManagement.dataCollections.rdbms.PersistenceMechanismRDBMS->getInstance(..))" /> 
  | 
  | 
  | 
  | 	<pointcut name="initSystem"
  | 		expr="call(controllers.HealthWatcherFacade->new())" /> 
  | 
  | 	<bind pointcut="initSystem">
  | 		<advice
  | 			aspect="aspects.dataManagement.persistent.PersistenceControlHealthWatcher"
  | 			name="adviceInitSystem" />
  | 	</bind>	
  | 	
  | 
  | 
  | </aop>
  | 
  | 
  | 


ServletInit.java

  | 
  | 
  | package gui.servlets;
  | 
  | 
  | 
  | import java.io.IOException;
  | 
  | 
  | 
  | import javax.servlet.ServletConfig;
  | 
  | import javax.servlet.ServletException;
  | 
  | import javax.servlet.http.HttpServlet;
  | 
  | import javax.servlet.http.HttpServletRequest;
  | 
  | import javax.servlet.http.HttpServletResponse;
  | 
  | 
  | 
  | import controllers.HealthWatcherFacade;
  | 
  | import employee.EmployeeRecord;
  | 
  | 
  | public class ServletInit extends HttpServlet {
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  |     public void init(ServletConfig config) throws ServletException {	
  | 
  |     	HealthWatcherFacade.getInstance();
  | 
  |     	
  | 
  |     }
  | 
  | 
  | 
  |     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  | 
  |     	HealthWatcherFacade.getInstance();
  | 
  | 
  | 
  |     }
  | 
  |     
  | 
  |     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        
  | 
  |     	HealthWatcherFacade.getInstance();
  | 
  |     }
  | 
  | }
  | 
  | 




HealthWatcherFacade.java

  | 
  | 
  | package controllers;
  | 
  | 
  | 
  | import complaint.*;
  | 
  | import employee.Employee;
  | 
  | import employee.EmployeeRecord;
  | 
  | import exceptions.ObjectAlreadyInsertedException;
  | 
  | import exceptions.ObjectNotFoundException;
  | 
  | import exceptions.ObjectNotValidException;
  | 
  | import healthGuide.HealthUnit;
  | 
  | import healthGuide.HealthUnitRecord;
  | 
  | import healthGuide.MedicalSpecialtyRecord;
  | 
  | import util.IteratorHW;
  | 
  | 
  | 
  | 
  | 
  | public class HealthWatcherFacade {
  | 
  | 
  | 
  | 	private static HealthWatcherFacade singleton; 
  | 
  | 	private ComplaintRecord complaintRecord;
  | 
  | 	private HealthUnitRecord healthUnitRecord;
  | 
  | 	private MedicalSpecialtyRecord specialtyRecord;
  | 
  | 	private DiseaseRecord diseaseRecord;		
  | 
  | 	private EmployeeRecord employeeRecord;
  | 
  | 
  | 
  | 	private HealthWatcherFacade() {		
  | 
  | 		complaintRecord = new ComplaintRecord(null);
  | 
  | 		healthUnitRecord = new HealthUnitRecord(null);
  | 
  | 		specialtyRecord = new MedicalSpecialtyRecord(null);
  | 
  | 		diseaseRecord = new DiseaseRecord(null);		
  | 
  | 		employeeRecord = new EmployeeRecord(null);
  | 
  | 	}
  | 
  | 	public synchronized static HealthWatcherFacade getInstance() {		
  | 
  | 		if (singleton == null) {
  | 
  | 			singleton = new HealthWatcherFacade();
  | 
  | 		}
  | 
  | 
  | 
  | 		return singleton;
  | 
  | 	}
  | 
  | 	
  | 
  | 	public Employee searchEmployee(String login) throws ObjectNotFoundException {
  | 
  | 		return employeeRecord.search(login);
  | 
  | 	}
  | 
  | 	public void update(Employee employee) throws ObjectNotFoundException, ObjectNotValidException {
  | 
  | 		employeeRecord.update(employee);
  | 
  | 	}
  | 
  | 	public void insert(Employee employee) throws ObjectAlreadyInsertedException, ObjectNotValidException {
  | 
  | 		employeeRecord.insert(employee);
  | 
  | 	}
  | 
  | 
  | 
  | 	public int insert(Complaint complaint) throws ObjectAlreadyInsertedException, ObjectNotValidException {
  | 
  | 		return complaintRecord.insert(complaint);
  | 
  | 	}
  | 
  | 	public void update(Complaint complaint) throws ObjectNotFoundException, ObjectNotValidException {
  | 
  | 		complaintRecord.update(complaint);
  | 
  | 	}
  | 
  | 	public Complaint searchComplaint(int complaintCode) throws ObjectNotFoundException {
  | 
  | 		return complaintRecord.search(complaintCode);
  | 
  | 	}
  | 
  | 	public void update(HealthUnit unit) throws ObjectNotFoundException, ObjectNotValidException {
  | 
  | 		healthUnitRecord.update(unit);
  | 
  | 	}
  | 
  | 	public HealthUnit searchHealthUnit(int healthUnitCode) throws ObjectNotFoundException {
  | 
  | 		return healthUnitRecord.search(healthUnitCode);
  | 
  | 	}
  | 
  | 	public IteratorHW searchHealthUnitsBySpecialty(int specialtyCode) throws ObjectNotFoundException {
  | 
  | 		return healthUnitRecord.searchHealthUnitsBySpecialty(specialtyCode);
  | 
  | 	}
  | 
  | 	public IteratorHW getHealthUnitList() throws ObjectNotFoundException {
  | 
  | 		return healthUnitRecord.getHealthUnitList();
  | 
  | 	}	
  | 
  | 	public IteratorHW searchSpecialtiesByHealthUnit(int healthUnitCode) throws ObjectNotFoundException {
  | 
  | 		return healthUnitRecord.searchSpecialtiesByHealthUnit(healthUnitCode);
  | 
  | 	}
  | 
  | 	public IteratorHW getComplaintList() throws ObjectNotFoundException {
  | 
  | 		return complaintRecord.getComplaintList();
  | 
  | 	}
  | 
  | 	public IteratorHW getSpecialtyList() throws ObjectNotFoundException {
  | 
  | 		return specialtyRecord.getSpecialtyList();
  | 
  | 	}
  | 
  | 	public DiseaseType searchDiseaseType(int diseaseCode) throws ObjectNotFoundException {
  | 
  | 		return diseaseRecord.search(diseaseCode);
  | 
  | 	}		
  | 
  | 	public IteratorHW getDiseaseTypeList() throws ObjectNotFoundException {
  | 
  | 		return diseaseRecord.getDiseaseTypeList();
  | 
  | 	}
  | 
  | }
  | 
  | 
  | 



EmployeeRecord.java

  | 
  | 
  | package employee;
  | 
  | 
  | 
  | import exceptions.ExceptionMessages;
  | 
  | import exceptions.ObjectAlreadyInsertedException;
  | 
  | import exceptions.ObjectNotFoundException;
  | 
  | import exceptions.ObjectNotValidException;
  | 
  | public class EmployeeRecord implements util.RecordTag{
  | 
  | 
  | 
  |     private IEmployeeRepository employeeRepository;
  | 
  | 
  | 
  |     public EmployeeRecord(IEmployeeRepository rep) {
  | 
  |         this.employeeRepository = rep;
  | 
  |     }
  | 
  | 
  | 
  |     public Employee search(String login) throws ObjectNotFoundException {    	
  | 
  |         return employeeRepository.search(login);
  | 
  |     }
  | 
  | 
  | 
  |     public void insert(Employee employee) throws ObjectAlreadyInsertedException, ObjectNotValidException {
  | 
  |         if (employeeRepository.exists(employee.getLogin())) {
  | 
  |             throw new ObjectAlreadyInsertedException(ExceptionMessages.EXC_JA_EXISTE);
  | 
  |         } else {
  | 
  |             employeeRepository.insert(employee);
  | 
  |         }
  | 
  |     }   
  | 
  |     
  | 
  |     public void update(Employee employee) throws ObjectNotFoundException, ObjectNotValidException {
  | 
  |         employeeRepository.update(employee);
  | 
  |     }       
  | 
  | }
  | 

message when new EmployeeRecord(null) is called inside servlet:

  | 23:12:45,341 INFO  [STDOUT] aroundRecordsCreation:class gui.servlets.ServletInit_1_ConByMInvocation
  | 23:12:45,369 INFO  [STDOUT] aroundRecordsCreation:class gui.servlets.ServletInit_3_ConByMInvocation
  | 

 	
When the method HealthWatcherFacade.getInstance() is called the attribute modified in the constructor of EmployeeRecord is intercepted(I used keyword ?all? to discover this interception):

     private IEmployeeRepository employeeRepository; 

    public EmployeeRecord(IEmployeeRepository rep) {

        this.employeeRepository = rep; 

    }

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3992143#3992143

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3992143



More information about the jboss-user mailing list