[Git][ultreiaio/ird-t3][develop] use t3 data 1.6 + introduce Activity cache
Tony CHEMIT pushed to branch develop at ultreiaio / ird-t3 Commits: 620e32dd by Tony CHEMIT at 2018-03-23T16:54:04Z use t3 data 1.6 + introduce Activity cache - - - - - 6 changed files: - pom.xml - t3-actions/src/main/java/fr/ird/t3/actions/data/level2/Level2InputContext.java - t3-domain/src/main/java/fr/ird/t3/actions/stratum/LevelInputContext.java - t3-domain/src/main/java/fr/ird/t3/actions/stratum/StratumConfiguration.java - t3-domain/src/main/java/fr/ird/t3/entities/T3TopiaPersistenceContext.java - + t3-domain/src/main/java/fr/ird/t3/entities/cache/ActivityCache.java Changes: ===================================== pom.xml ===================================== --- a/pom.xml +++ b/pom.xml @@ -99,7 +99,7 @@ <projectId>ird-t3</projectId> <stageId>frirdt3</stageId> <applicationName>t3</applicationName> - <t3-data.version>1.6-SNAPSHOT</t3-data.version> + <t3-data.version>1.6</t3-data.version> <lib.version.java4all.i18n>4.0-alpha-11</lib.version.java4all.i18n> <env>dev</env> ===================================== t3-actions/src/main/java/fr/ird/t3/actions/data/level2/Level2InputContext.java ===================================== --- a/t3-actions/src/main/java/fr/ird/t3/actions/data/level2/Level2InputContext.java +++ b/t3-actions/src/main/java/fr/ird/t3/actions/data/level2/Level2InputContext.java @@ -25,7 +25,6 @@ import fr.ird.t3.actions.stratum.LevelInputContext; import fr.ird.t3.entities.data.CorrectedElementaryCatch; import java.util.Collection; -import java.util.concurrent.ExecutionException; /** * A context to get all input data for the execution of action. @@ -40,8 +39,8 @@ public class Level2InputContext extends LevelInputContext<Level2Configuration, L super(action); } - public Collection<CorrectedElementaryCatch> getCorrectedElementaryCatch(String activityId) throws ExecutionException { - return getActivityCache().get(activityId).getCorrectedElementaryCatch(); + public Collection<CorrectedElementaryCatch> getCorrectedElementaryCatch(String activityId) { + return getActivityCache().forId(activityId).getCorrectedElementaryCatch(); } } ===================================== t3-domain/src/main/java/fr/ird/t3/actions/stratum/LevelInputContext.java ===================================== --- a/t3-domain/src/main/java/fr/ird/t3/actions/stratum/LevelInputContext.java +++ b/t3-domain/src/main/java/fr/ird/t3/actions/stratum/LevelInputContext.java @@ -21,12 +21,10 @@ package fr.ird.t3.actions.stratum; * #L% */ -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; import fr.ird.t3.actions.T3Action; import fr.ird.t3.entities.T3Predicates; import fr.ird.t3.entities.T3TopiaPersistenceContext; +import fr.ird.t3.entities.cache.ActivityCache; import fr.ird.t3.entities.cache.LengthWeightConversionWithContextCache; import fr.ird.t3.entities.cache.WeightCategoryTreatmentCache; import fr.ird.t3.entities.cache.ZoneStratumCache; @@ -53,7 +51,6 @@ import fr.ird.t3.services.ioc.InjectFromDAO; import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.function.Predicate; import java.util.function.Supplier; @@ -70,7 +67,7 @@ public abstract class LevelInputContext<C extends LevelConfigurationWithStratum, /** * Cache of activity (to avoid to reload them for catch and sample stratum). */ - private final LoadingCache<String, Activity> activityCache; + private final ActivityCache activityCache; /** * Cache of {@link WeightCategoryTreatment}. */ @@ -155,14 +152,8 @@ public abstract class LevelInputContext<C extends LevelConfigurationWithStratum, } catch (Exception e) { throw new IllegalStateException("can't inject to " + this, e); } - this.activityCache = CacheBuilder.newBuilder().build( - new CacheLoader<String, Activity>() { - @Override - public Activity load(@SuppressWarnings("NullableProblems") String key) { - return activityDAO.forTopiaIdEquals(Objects.requireNonNull(key)).findUnique(); - } - }); T3TopiaPersistenceContext persistenceContext = action.getT3TopiaPersistenceContext().get(); + this.activityCache = persistenceContext.newActivityCache(); this.weightCategoryCache = persistenceContext.newWeightCategoryTreatmentCache(); C configuration = action.getConfiguration(); configuration.setLocale(action.getLocale()); @@ -216,7 +207,7 @@ public abstract class LevelInputContext<C extends LevelConfigurationWithStratum, return nbStratum; } - public LoadingCache<String, Activity> getActivityCache() { + public ActivityCache getActivityCache() { return activityCache; } @@ -281,6 +272,6 @@ public abstract class LevelInputContext<C extends LevelConfigurationWithStratum, } public void clear() { - activityCache.invalidateAll(); + activityCache.clear(); } } ===================================== t3-domain/src/main/java/fr/ird/t3/actions/stratum/StratumConfiguration.java ===================================== --- a/t3-domain/src/main/java/fr/ird/t3/actions/stratum/StratumConfiguration.java +++ b/t3-domain/src/main/java/fr/ird/t3/actions/stratum/StratumConfiguration.java @@ -39,7 +39,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.concurrent.ExecutionException; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; @@ -185,11 +184,7 @@ public class StratumConfiguration<C extends LevelConfigurationWithStratum, A ext } public Activity getActivity(String activityId) { - try { - return inputContext.getActivityCache().get(activityId); - } catch (ExecutionException e) { - throw new RuntimeException(String.format("Could not obtain activity %s", activityId), e); - } + return inputContext.getActivityCache().forId(activityId); } @Override ===================================== t3-domain/src/main/java/fr/ird/t3/entities/T3TopiaPersistenceContext.java ===================================== --- a/t3-domain/src/main/java/fr/ird/t3/entities/T3TopiaPersistenceContext.java +++ b/t3-domain/src/main/java/fr/ird/t3/entities/T3TopiaPersistenceContext.java @@ -21,6 +21,7 @@ package fr.ird.t3.entities; * #L% */ +import fr.ird.t3.entities.cache.ActivityCache; import fr.ird.t3.entities.cache.LengthWeightConversionCache; import fr.ird.t3.entities.cache.LengthWeightConversionWithContextCache; import fr.ird.t3.entities.cache.WeightCategoryTreatmentCache; @@ -37,6 +38,10 @@ public class T3TopiaPersistenceContext extends AbstractT3TopiaPersistenceContext super(parameter); } + public ActivityCache newActivityCache() { + return new ActivityCache(getActivityDao()); + } + public WeightCategoryTreatmentCache newWeightCategoryTreatmentCache() { return new WeightCategoryTreatmentCache(getWeightCategoryTreatmentDao()); } ===================================== t3-domain/src/main/java/fr/ird/t3/entities/cache/ActivityCache.java ===================================== --- /dev/null +++ b/t3-domain/src/main/java/fr/ird/t3/entities/cache/ActivityCache.java @@ -0,0 +1,59 @@ +/* + * #%L + * T3 :: Domain + * %% + * Copyright (C) 2010 - 2018 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ird.t3.entities.cache; + +import fr.ird.t3.entities.data.Activity; +import fr.ird.t3.entities.data.ActivityTopiaDao; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; +import java.util.TreeMap; + +/** + * Created by tchemit on 23/03/2018. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class ActivityCache { + + private static final Log log = LogFactory.getLog(ActivityCache.class); + private final Map<String, Activity> cache; + private final ActivityTopiaDao activityDAO; + + public ActivityCache(ActivityTopiaDao activityDAO) { + this.activityDAO = activityDAO; + this.cache = new TreeMap<>(); + } + + public Activity forId(String activityId) { + Activity result = cache.get(activityId); + if (result == null) { + log.info(String.format("Cache Activity [%d] for %s", cache.size(), activityId)); + cache.put(activityId, result = activityDAO.forTopiaIdEquals(activityId).findUnique()); + } + return result; + } + + public void clear() { + cache.clear(); + } +} View it on GitLab: https://gitlab.com/ultreiaio/ird-t3/commit/620e32dde6c9a0d4b7c2aaec09f837c62... --- View it on GitLab: https://gitlab.com/ultreiaio/ird-t3/commit/620e32dde6c9a0d4b7c2aaec09f837c62... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT