package fi.arcusys.koku.common.soa; import javax.ejb.EJB; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; import fi.arcusys.koku.common.external.LogMessage; import fi.arcusys.koku.common.external.LogServiceDAO; /** * Abstract class for performing common logic in accessing LOK-interface'es DAO service. * * @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi) * Oct 4, 2011 */ public abstract class AbstractLoggingInterceptor { @EJB private LogServiceDAO logDao; @AroundInvoke public Object log(InvocationContext ctx) throws Exception { final Object result = ctx.proceed(); if (isLogNeeded(ctx)) { logDao.logMessage(createLogMessage(ctx, result)); } return result; } protected abstract boolean isLogNeeded(InvocationContext ctx); protected abstract LogMessage createLogMessage(final InvocationContext ctx, final Object result); protected String getParameterAsString(final InvocationContext ctx, final int index) { return String.valueOf(ctx.getParameters()[index]); } protected <T> T getGenericParameter(final InvocationContext ctx, final int index) { return (T)ctx.getParameters()[index]; } }