package alien4cloud.dao; import java.io.IOException; import java.util.concurrent.ExecutionException; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.elasticsearch.ElasticsearchException; import org.springframework.stereotype.Component; import alien4cloud.exception.IndexingServiceException; /** * Aspect to handles technical exceptions from Elastic Search. * * @author luc boutier */ @Aspect @Component public class ESExceptionHandlingAspect { @Around("target(alien4cloud.dao.ESIndexMapper)") public Object handleException(ProceedingJoinPoint pjp) throws Throwable { try { return pjp.proceed(); } catch (IOException | ExecutionException | ElasticsearchException e) { String message = logAndGetMessage(pjp, e); throw new IndexingServiceException(message, e); } } private String logAndGetMessage(ProceedingJoinPoint pjp, Throwable t) { String message = "Error when calling <" + pjp.getSignature().getDeclaringTypeName() + "> <" + pjp.getSignature().getName() + ">"; ESIndexMapper.getLog().error(message, t); return message; } }