package ro.nextreports.server.aop; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Required; import ro.nextreports.server.domain.DataSource; import ro.nextreports.server.service.StorageService; import ro.nextreports.server.util.ConnectionUtil; @Aspect public class DataSourceModifiedAdvice { private static final Logger LOG = LoggerFactory.getLogger(DataSourceModifiedAdvice.class); private StorageService storageService; @Pointcut("target(ro.nextreports.server.service.StorageService)") public void inStorageService() { } @Pointcut("execution(* modifyEntity(..))") public void modifyEntity() { } @Pointcut("args(source, ..)") public void isDataSource(DataSource source) { } @Pointcut("inStorageService() && modifyEntity() && isDataSource(source)") public void dataSourceModified(DataSource source) { } @AfterReturning("dataSourceModified(source)") public void afterDataSourceModified(DataSource source) { ConnectionUtil.clearPool(source); } @Required public void setStorageService(StorageService storageService) { this.storageService = storageService; } }