/** * Dianping.com Inc. * Copyright (c) 2003-2013 All Rights Reserved. */ package com.dianping.pigeon.remoting.invoker.process.filter; import java.util.List; import com.dianping.pigeon.remoting.common.domain.InvocationRequest; import com.dianping.pigeon.remoting.common.process.ServiceInvocationFilter; import com.dianping.pigeon.remoting.common.util.Constants; import com.dianping.pigeon.remoting.invoker.domain.InvokerContext; import com.dianping.pigeon.remoting.invoker.process.InvokerInterceptor; import com.dianping.pigeon.remoting.invoker.process.InvokerInterceptorFactory; import com.dianping.pigeon.remoting.invoker.process.InvokerProcessInterceptor; import com.dianping.pigeon.remoting.invoker.process.InvokerProcessInterceptorFactory; public abstract class InvocationInvokeFilter implements ServiceInvocationFilter<InvokerContext> { public void beforeInvoke(InvokerContext invokerContext) { InvocationRequest request = invokerContext.getRequest(); if (request.getMessageType() == Constants.MESSAGE_TYPE_SERVICE) { List<InvokerProcessInterceptor> interceptors = InvokerProcessInterceptorFactory.getInterceptors(); for (InvokerProcessInterceptor interceptor : interceptors) { interceptor.preInvoke(request); } List<InvokerInterceptor> contextInterceptors = InvokerInterceptorFactory.getInterceptors(); for (InvokerInterceptor interceptor : contextInterceptors) { interceptor.preInvoke(invokerContext); } } } public void afterInvoke(InvokerContext invokerContext) { InvocationRequest request = invokerContext.getRequest(); if (request.getMessageType() == Constants.MESSAGE_TYPE_SERVICE) { List<InvokerProcessInterceptor> interceptors = InvokerProcessInterceptorFactory.getInterceptors(); for (InvokerProcessInterceptor interceptor : interceptors) { interceptor.postInvoke(request, invokerContext.getResponse()); } List<InvokerInterceptor> contextInterceptors = InvokerInterceptorFactory.getInterceptors(); for (InvokerInterceptor interceptor : contextInterceptors) { interceptor.postInvoke(invokerContext); } } } public void afterThrowing(InvokerContext invokerContext, Throwable throwable) { InvocationRequest request = invokerContext.getRequest(); if (request.getMessageType() == Constants.MESSAGE_TYPE_SERVICE) { List<InvokerInterceptor> contextInterceptors = InvokerInterceptorFactory.getInterceptors(); for (InvokerInterceptor interceptor : contextInterceptors) { interceptor.afterThrowing(invokerContext, throwable); } } } }