001
014
015 package com.liferay.portal.dao.shard.advice;
016
017 import com.liferay.portal.kernel.cache.CacheRegistryUtil;
018 import com.liferay.portal.kernel.dao.shard.ShardUtil;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021
022 import org.aopalliance.intercept.MethodInterceptor;
023 import org.aopalliance.intercept.MethodInvocation;
024
025
030 public class ShardIterativelyAdvice implements MethodInterceptor {
031
032
038 @Override
039 public Object invoke(MethodInvocation methodInvocation) throws Throwable {
040 Object returnValue = null;
041
042 for (String shardName : ShardUtil.getAvailableShardNames()) {
043 if (_log.isInfoEnabled()) {
044 _log.info(
045 "Invoking shard " + shardName + " for " +
046 methodInvocation.toString());
047 }
048
049 _shardAdvice.pushCompanyService(shardName);
050
051 try {
052 Object value = methodInvocation.proceed();
053
054 if (shardName.equals(ShardUtil.getDefaultShardName())) {
055 returnValue = value;
056 }
057 }
058 finally {
059 _shardAdvice.popCompanyService();
060
061 CacheRegistryUtil.clear();
062 }
063 }
064
065 return returnValue;
066 }
067
068 public void setShardAdvice(ShardAdvice shardAdvice) {
069 _shardAdvice = shardAdvice;
070 }
071
072 private static Log _log = LogFactoryUtil.getLog(
073 ShardIterativelyAdvice.class);
074
075 private ShardAdvice _shardAdvice;
076
077 }