This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository wao. See http://git.codelutin.com/wao.git commit c63e4c50e19c26df551c46a7b987f6ef004afbde Author: Brendan Le Ny <bleny@codelutin.com> Date: Wed Oct 22 11:06:38 2014 +0200 Ajout d'une astuce pour contourner les weak-references utilisées dans ToPIA pour stocker les listeners. Le problème d'invalidation des caches était dû au fait que le listener était perdu avant le commit. (fixes #5985) --- .../fr/ifremer/wao/WaoTopiaPersistenceContext.java | 39 ++++++++++++++++++++++ ...er.java => CacheInvalidationTopiaListener.java} | 6 ++-- .../wao/web/DefaultWaoApplicationContext.java | 8 ++--- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/wao-persistence/src/main/java/fr/ifremer/wao/WaoTopiaPersistenceContext.java b/wao-persistence/src/main/java/fr/ifremer/wao/WaoTopiaPersistenceContext.java new file mode 100644 index 0000000..53788a5 --- /dev/null +++ b/wao-persistence/src/main/java/fr/ifremer/wao/WaoTopiaPersistenceContext.java @@ -0,0 +1,39 @@ +package fr.ifremer.wao; + +import org.nuiton.topia.persistence.TopiaIdFactory; +import org.nuiton.topia.persistence.event.TopiaEntityListener; +import org.nuiton.topia.persistence.event.TopiaTransactionListener; +import org.nuiton.topia.persistence.internal.HibernateProvider; +import org.nuiton.topia.persistence.internal.TopiaHibernateSessionRegistry; +import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; + +import java.util.EventListener; +import java.util.HashSet; +import java.util.Set; + +public class WaoTopiaPersistenceContext extends AbstractWaoTopiaPersistenceContext { + + /** + * XXX contournement de weak references + * + * Ensemble qui ne sert à rien si ce n'est à conserver les références afin que + * les listeners ne soient pas perdus eu éguard à l'utilisation de weak references + * dans topia pour conserver les listeners + */ + protected Set<EventListener> listeners = new HashSet<>(); + + public WaoTopiaPersistenceContext(HibernateProvider hibernateProvider, TopiaFiresSupport applicationFiresSupport, TopiaIdFactory topiaIdFactory, TopiaHibernateSessionRegistry sessionRegistry) { + super(hibernateProvider, applicationFiresSupport, topiaIdFactory, sessionRegistry); + } + + public void addTopiaEntityListener(TopiaEntityListener topiaEntityListener) { + listeners.add(topiaEntityListener); + getTopiaFiresSupport().addTopiaEntityListener(topiaEntityListener); + } + + public void addTopiaTransactionListener(TopiaTransactionListener topiaTransactionListener) { + listeners.add(topiaTransactionListener); + getTopiaFiresSupport().addTopiaTransactionListener(topiaTransactionListener); + } + +} diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaEntityListener.java b/wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaListener.java similarity index 97% rename from wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaEntityListener.java rename to wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaListener.java index 17fb074..d3e9838 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaEntityListener.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/CacheInvalidationTopiaListener.java @@ -49,9 +49,9 @@ import java.util.Set; * Avec ce listener, on scrute ce qu'il se passe sur l'application pour invalider les caches * qu'il faut. */ -public class CacheInvalidationTopiaEntityListener implements TopiaEntityListener, TopiaTransactionListener { +public class CacheInvalidationTopiaListener implements TopiaEntityListener, TopiaTransactionListener { - private static final Log log = LogFactory.getLog(CacheInvalidationTopiaEntityListener.class); + private static final Log log = LogFactory.getLog(CacheInvalidationTopiaListener.class); protected Cache<SamplingPlanCacheKey, SamplingPlan> samplingPlansCache; @@ -78,7 +78,7 @@ public class CacheInvalidationTopiaEntityListener implements TopiaEntityListener @Deprecated protected boolean boatsFilterValuesCacheInvalidationEnabled = false; - public CacheInvalidationTopiaEntityListener( + public CacheInvalidationTopiaListener( Cache<SamplingPlanCacheKey, SamplingPlan> samplingPlansCache, Cache<BoatsFilterValuesCacheKey, BoatsFilterValues> boatsFilterValuesCache, Cache<SynthesisCacheKey, Synthesis> synthesesCache) { diff --git a/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java b/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java index 6e265b3..db09e28 100644 --- a/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java +++ b/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java @@ -177,14 +177,14 @@ public class DefaultWaoApplicationContext implements WaoApplicationContext { if (applicationConfig.isCachingEnabled()) { - CacheInvalidationTopiaEntityListener cacheInvalidationTopiaEntityListener = - new CacheInvalidationTopiaEntityListener( + CacheInvalidationTopiaListener cacheInvalidationTopiaListener = + new CacheInvalidationTopiaListener( getSamplingPlansCache(), getBoatsFilterValuesCache(), getSynthesesCache()); - persistenceContext.getTopiaFiresSupport().addTopiaEntityListener(cacheInvalidationTopiaEntityListener); - persistenceContext.getTopiaFiresSupport().addTopiaTransactionListener(cacheInvalidationTopiaEntityListener); + persistenceContext.addTopiaEntityListener(cacheInvalidationTopiaListener); + persistenceContext.addTopiaTransactionListener(cacheInvalidationTopiaListener); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.