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.Company;
020 import com.liferay.portal.model.Shard;
021 import com.liferay.portal.service.ShardLocalServiceUtil;
022
023 import org.aopalliance.intercept.MethodInterceptor;
024 import org.aopalliance.intercept.MethodInvocation;
025
026
031 public class ShardParameterAdvice implements MethodInterceptor {
032
033 public Object invoke(MethodInvocation methodInvocation) throws Throwable {
034 Object[] arguments = methodInvocation.getArguments();
035
036 long companyId = (Long)arguments[0];
037
038 Shard shard = ShardLocalServiceUtil.getShard(
039 Company.class.getName(), companyId);
040
041 String shardName = shard.getName();
042
043 if (_log.isInfoEnabled()) {
044 _log.info(
045 "Setting service to shard " + shardName + " for " +
046 methodInvocation.toString());
047 }
048
049 Object returnValue = null;
050
051 _shardAdvice.pushCompanyService(shardName);
052
053 try {
054 returnValue = methodInvocation.proceed();
055 }
056 finally {
057 _shardAdvice.popCompanyService();
058 }
059
060 return returnValue;
061 }
062
063 public void setShardAdvice(ShardAdvice shardAdvice) {
064 _shardAdvice = shardAdvice;
065 }
066
067 private static Log _log = LogFactoryUtil.getLog(ShardParameterAdvice.class);
068
069 private ShardAdvice _shardAdvice;
070
071 }