001
014
015 package com.liferay.portal.dao.shard.advice;
016
017 import com.liferay.portal.kernel.log.Log;
018 import com.liferay.portal.kernel.log.LogFactoryUtil;
019 import com.liferay.portal.model.Portlet;
020
021 import java.lang.reflect.Method;
022
023 import org.aopalliance.intercept.MethodInterceptor;
024 import org.aopalliance.intercept.MethodInvocation;
025
026
031 public class ShardPortletAdvice implements MethodInterceptor {
032
033 public Object invoke(MethodInvocation methodInvocation) throws Throwable {
034 Method method = methodInvocation.getMethod();
035 String methodName = method.getName();
036
037 Object[] arguments = methodInvocation.getArguments();
038
039 if ((arguments == null) || (arguments.length == 0)) {
040 return methodInvocation.proceed();
041 }
042
043 Object argument = arguments[0];
044
045 long companyId = -1;
046
047 if (argument instanceof Long) {
048 if (methodName.equals("checkPortlets") ||
049 methodName.equals("clonePortlet") ||
050 methodName.equals("getPortletById") ||
051 methodName.equals("getPortletByStrutsPath") ||
052 methodName.equals("getPortlets") ||
053 methodName.equals("hasPortlet") ||
054 methodName.equals("updatePortlet")) {
055
056 companyId = (Long)argument;
057 }
058 }
059 else if (argument instanceof Portlet) {
060 if (methodName.equals("checkPortlet") ||
061 methodName.equals("deployRemotePortlet") ||
062 methodName.equals("destroyPortlet") ||
063 methodName.equals("destroyRemotePortlet")) {
064
065 Portlet portlet = (Portlet)argument;
066
067 companyId = portlet.getCompanyId();
068 }
069 }
070
071 if (companyId <= 0) {
072 return methodInvocation.proceed();
073 }
074
075 if (_log.isInfoEnabled()) {
076 _log.info(
077 "Setting company service to shard of companyId " + companyId +
078 " for " + methodInvocation.toString());
079 }
080
081 Object returnValue = null;
082
083 _shardAdvice.pushCompanyService(companyId);
084
085 try {
086 returnValue = methodInvocation.proceed();
087 }
088 finally {
089 _shardAdvice.popCompanyService();
090 }
091
092 return returnValue;
093 }
094
095 public void setShardAdvice(ShardAdvice shardAdvice) {
096 _shardAdvice = shardAdvice;
097 }
098
099 private static Log _log = LogFactoryUtil.getLog(ShardPortletAdvice.class);
100
101 private ShardAdvice _shardAdvice;
102
103 }