branch feature/7017 updated (adce27f -> 4688273)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7017 in repository observe. See http://git.codelutin.com/observe.git from adce27f utilisation de obtainProperties new 4688273 déplacement du cache de référentiels dans le module services-api (refs #7017) The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 46882736c3c9c7ba4db1d2f57fe9eacd775c0f71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 6 11:12:22 2015 +0200 déplacement du cache de référentiels dans le module services-api (refs #7017) Summary of changes: .../ird/observe/services/ObserveServicesCache.java | 4 +- .../referential/AbstractReferentialCache.java | 42 ++++++++++-- .../main/java/fr/ird/observe/ObserveContext.java | 19 +++++- .../observe/ui/content/ContentUIInitializer.java | 75 ++++++++++------------ 4 files changed, 88 insertions(+), 52 deletions(-) rename observe-swing/src/main/java/fr/ird/observe/ui/content/ReferentialCache.java => observe-services-api/src/main/java/fr/ird/observe/services/referential/AbstractReferentialCache.java (67%) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7017 in repository observe. See http://git.codelutin.com/observe.git commit 46882736c3c9c7ba4db1d2f57fe9eacd775c0f71 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed May 6 11:12:22 2015 +0200 déplacement du cache de référentiels dans le module services-api (refs #7017) --- .../ird/observe/services/ObserveServicesCache.java | 4 +- .../referential/AbstractReferentialCache.java | 42 ++++++++++-- .../main/java/fr/ird/observe/ObserveContext.java | 19 +++++- .../observe/ui/content/ContentUIInitializer.java | 75 ++++++++++------------ 4 files changed, 88 insertions(+), 52 deletions(-) diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesCache.java b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesCache.java index e642827..ae59dcb 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesCache.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/ObserveServicesCache.java @@ -59,7 +59,7 @@ public class ObserveServicesCache implements Closeable { ObserveService service = ObserveServicesCache.this.factory.newService(key.dataSource, key.serviceType); if (log.isInfoEnabled()) { - log.info("Adding service " + service + "in cache"); + log.info("Adding service " + service + " in cache"); } return service; @@ -139,7 +139,7 @@ public class ObserveServicesCache implements Closeable { for (ServiceKey<? extends ObserveService> serviceKey : keysToRemove) { ObserveService service = map.get(serviceKey); if (log.isInfoEnabled()) { - log.info("Remove service : " + service); + log.info("Removing service from cache: " + service); } } cache.invalidateAll(keysToRemove); diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/ReferentialCache.java b/observe-services-api/src/main/java/fr/ird/observe/services/referential/AbstractReferentialCache.java similarity index 67% rename from observe-swing/src/main/java/fr/ird/observe/ui/content/ReferentialCache.java rename to observe-services-api/src/main/java/fr/ird/observe/services/referential/AbstractReferentialCache.java index 92ea2cc..62a6af3 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/ReferentialCache.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/referential/AbstractReferentialCache.java @@ -1,18 +1,17 @@ -package fr.ird.observe.ui.content; +package fr.ird.observe.services.referential; import com.google.common.base.Preconditions; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import fr.ird.observe.ObserveContext; import fr.ird.observe.ObserveTechnicalException; import fr.ird.observe.entities.referentiel.ReferenceEntity; -import fr.ird.observe.services.referential.ReferentialService; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.util.Collection; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; @@ -23,19 +22,25 @@ import java.util.concurrent.ExecutionException; * Pour obtenir une liste d'un référentiel, on passe toujours dans cette classe qui gère les modifications de * référentiels. * + * FIXME Il faudrait que avoir une méthode sur ReferentialService qui donne la date de dernière modification d'une liste + * FIXME pour ensuite mettre à jour le cache si besoin (mais pour cela il faut ajouter une colonne sur tous les référentiels) + * * Created on 5/5/15. * * @author Tony Chemit - chemit@codelutin.com * @since 4.0 */ -public class ReferentialCache { +public abstract class AbstractReferentialCache { /** Logger. */ - private static final Log log = LogFactory.getLog(ReferentialCache.class); + private static final Log log = LogFactory.getLog(AbstractReferentialCache.class); protected final LoadingCache<Class<? extends ReferenceEntity>, ReferentialList<? extends ReferenceEntity>> cache; - public ReferentialCache() { + protected abstract ReferentialService getReferentialService(); + + public AbstractReferentialCache() { + this.cache = CacheBuilder.newBuilder().build(new CacheLoader<Class<? extends ReferenceEntity>, ReferentialList<? extends ReferenceEntity>>() { @SuppressWarnings("unchecked") @@ -44,7 +49,7 @@ public class ReferentialCache { Preconditions.checkNotNull(key, "key can't be null"); - ReferentialService service = ObserveContext.get().getService(ReferentialService.class); + ReferentialService service = getReferentialService(); List<? extends ReferenceEntity> list = service.getList(key); if (log.isInfoEnabled()) { @@ -59,6 +64,15 @@ public class ReferentialCache { } + public <R extends ReferenceEntity> boolean isReferentialListUpToDate(Class<R> referentialType, Date timeStamp) { + + ReferentialList<R> referentialList = getReferentialList(referentialType); + Date referentialListTimeStamp = referentialList.getTimeStamp(); + boolean uptodate = timeStamp.after(referentialListTimeStamp); + return uptodate; + + } + @SuppressWarnings("unchecked") public <R extends ReferenceEntity> ReferentialList<R> getReferentialList(Class<R> referentialType) { @@ -74,11 +88,25 @@ public class ReferentialCache { } public void clearEntry(Class<? extends ReferenceEntity> referentialType) { + + ReferentialList<? extends ReferenceEntity> referentialList = getReferentialList(referentialType); + if (log.isInfoEnabled()) { + log.info("Removing from cache: " + referentialList); + } cache.invalidate(referentialType); + } public void clear() { + + Collection<ReferentialList<? extends ReferenceEntity>> referentialLists = cache.asMap().values(); + for (ReferentialList<? extends ReferenceEntity> referentialList : referentialLists) { + if (log.isInfoEnabled()) { + log.info("Removing from cache: " + referentialList); + } + } cache.invalidateAll(); + } public static class ReferentialList<R extends ReferenceEntity> { diff --git a/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java b/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java index e63103e..1f3a606 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java +++ b/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java @@ -33,6 +33,7 @@ import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceFactory; import fr.ird.observe.services.ObserveServicesCache; import fr.ird.observe.services.data.OpenableService; +import fr.ird.observe.services.referential.ReferentialService; import fr.ird.observe.ui.ObserveMainUI; import fr.ird.observe.ui.ObserveMainUIHandler; import fr.ird.observe.ui.ObserveUIMode; @@ -51,8 +52,8 @@ import fr.ird.observe.ui.actions.shared.ResetEditUIAction; import fr.ird.observe.ui.actions.shared.SaveEditUIAction; import fr.ird.observe.ui.actions.shared.SelectNodeUIAction; import fr.ird.observe.ui.actions.shared.SelectOpenNodeUIAction; +import fr.ird.observe.services.referential.AbstractReferentialCache; import fr.ird.observe.ui.content.ContentUI; -import fr.ird.observe.ui.content.ReferentialCache; import fr.ird.observe.ui.tree.ObserveTreeHelper; import jaxx.runtime.context.JAXXContextEntryDef; import jaxx.runtime.swing.CardLayout2; @@ -67,6 +68,7 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.Component; import java.util.Arrays; +import java.util.Date; import java.util.List; import static org.nuiton.i18n.I18n.n; @@ -112,7 +114,14 @@ public class ObserveContext extends ObserveApplicationContext { protected final ObserveServicesCache servicesCache = new ObserveServicesCache(serviceFactory); - protected final ReferentialCache referentialCache = new ReferentialCache(); + protected final AbstractReferentialCache referentialCache = new AbstractReferentialCache() { + + @Override + protected ReferentialService getReferentialService() { + return ObserveContext.get().getService(ReferentialService.class); + } + + }; /** * Récupération du contexte applicatif. @@ -255,7 +264,11 @@ public class ObserveContext extends ObserveApplicationContext { return service; } - public static <R extends ReferenceEntity> ReferentialCache.ReferentialList<R> getReferentialList(Class<R> referentialCache) { + public static <R extends ReferenceEntity> boolean isReferentialListUpToDate(Class<R> referentialCache, Date timeStamp) { + return get().referentialCache.isReferentialListUpToDate(referentialCache, timeStamp); + } + + public static <R extends ReferenceEntity> AbstractReferentialCache.ReferentialList<R> getReferentialList(Class<R> referentialCache) { return get().referentialCache.getReferentialList(referentialCache); } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java index bd78fdd..fb71073 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/ContentUIInitializer.java @@ -31,6 +31,7 @@ import fr.ird.observe.db.DataSource; import fr.ird.observe.db.DataSourceException; import fr.ird.observe.entities.referentiel.ReferenceEntities; import fr.ird.observe.entities.referentiel.ReferenceEntity; +import fr.ird.observe.services.referential.AbstractReferentialCache; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.actions.shared.AbstractUIAction; import fr.ird.observe.ui.util.BooleanEditor; @@ -655,7 +656,7 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte if (ReferenceEntity.class.isAssignableFrom(entityClass)) { // On charge la liste depuis le cache de référentiels - ReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); + AbstractReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); data = getReferentialList(list, referentialList, false); @@ -710,7 +711,7 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte if (ReferenceEntity.class.isAssignableFrom(entityClass)) { // On charge la liste depuis le cache de référentiels - ReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); + AbstractReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); data = getReferentialList(list, referentialList, false); @@ -772,7 +773,7 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte if (referenceEntity) { // On charge la liste depuis le cache de référentiels - ReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); + AbstractReferentialCache.ReferentialList referentialList = ObserveContext.getReferentialList((Class) entityClass); data = getReferentialList(comboBox, referentialList, true); @@ -814,17 +815,14 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte @SuppressWarnings("unchecked") public static <EE extends ReferenceEntity> void reload(BeanListHeader<EE> list) { - Date timeStamp = (Date) list.getClientProperty(CLIENT_PROPERTY_REFERENTIAL_LIST_TIME_STAMP); - Class<EE> beanType = list.getBeanType(); - ReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); - - Date lastUpdate = referentialList.getTimeStamp(); + boolean needToReload = needToReloadList(list, beanType); - if (lastUpdate.after(timeStamp)) { + if (needToReload) { // reload list + AbstractReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); List<EE> data = getReferentialList(list, referentialList, false); if (log.isInfoEnabled()) { @@ -845,12 +843,6 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte } - } else { - - if (log.isInfoEnabled()) { - log.info("Up-to-date entities list: " + referentialList); - } - } } @@ -858,17 +850,14 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte @SuppressWarnings("unchecked") public static <EE extends ReferenceEntity> void reload(FilterableDoubleList<EE> list) { - Date timeStamp = (Date) list.getClientProperty(CLIENT_PROPERTY_REFERENTIAL_LIST_TIME_STAMP); - Class<EE> beanType = list.getBeanType(); - ReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); - - Date lastUpdate = referentialList.getTimeStamp(); + boolean needToReload = needToReloadList(list, beanType); - if (lastUpdate.after(timeStamp)) { + if (needToReload) { // reload list + AbstractReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); List<EE> data = getReferentialList(list, referentialList, false); if (log.isInfoEnabled()) { @@ -888,12 +877,6 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte // reselect it list.setSelected(selectedValues); - } else { - - if (log.isInfoEnabled()) { - log.info("Up-to-date entities list: " + referentialList); - } - } } @@ -901,17 +884,14 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte @SuppressWarnings("unchecked") public static <EE extends ReferenceEntity> void reload(BeanComboBox<EE> comboBox) { - Date timeStamp = (Date) comboBox.getClientProperty(CLIENT_PROPERTY_REFERENTIAL_LIST_TIME_STAMP); - Class<EE> beanType = comboBox.getBeanType(); - ReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); - - Date lastUpdate = referentialList.getTimeStamp(); + boolean needToReload = needToReloadList(comboBox, beanType); - if (lastUpdate.after(timeStamp)) { + if (needToReload) { // reload list + AbstractReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); List<EE> data = getReferentialList(comboBox, referentialList, true); if (log.isInfoEnabled()) { @@ -935,18 +915,12 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte } } - } else { - - if (log.isInfoEnabled()) { - log.info("Up-to-date entities list: " + referentialList); - } - } } @SuppressWarnings("unchecked") - public static <EE extends ReferenceEntity> List<EE> getReferentialList(JComponent component, ReferentialCache.ReferentialList<EE> referentialList, boolean removeObsolete) { + public static <EE extends ReferenceEntity> List<EE> getReferentialList(JComponent component, AbstractReferentialCache.ReferentialList<EE> referentialList, boolean removeObsolete) { List<EE> data = new ArrayList<EE>(referentialList.getData()); @@ -973,4 +947,25 @@ public class ContentUIInitializer<E extends TopiaEntity, UI extends ObserveConte } + protected static <EE extends ReferenceEntity> boolean needToReloadList(JComponent component,Class<EE> beanType ) { + + Date timeStamp = (Date) component.getClientProperty(CLIENT_PROPERTY_REFERENTIAL_LIST_TIME_STAMP); + + boolean uptodate = ObserveContext.isReferentialListUpToDate(beanType, timeStamp); + + if (uptodate) { + + if (log.isDebugEnabled()) { + + AbstractReferentialCache.ReferentialList<EE> referentialList = ObserveContext.getReferentialList(beanType); + log.debug("Up-to-date entities list: " + referentialList); + + } + + } + + return !uptodate; + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm