Author: bleny Date: 2014-09-10 11:24:51 +0200 (Wed, 10 Sep 2014) New Revision: 2243 Url: http://forge.codelutin.com/projects/wao/repository/revisions/2243 Log: Fusion des modifications effectu?\195?\169es dans la branche 4.0.x dans le tronc en 4.1 Added: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheLoader.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheLoader.java Modified: trunk/ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheKey.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheKey.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsService.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/UpdateContactCommand.java trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/MammalsObservationEmail.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/EditContactAction.java Property changes on: trunk ___________________________________________________________________ Modified: svn:mergeinfo - /branches/wao-4.0-obsvente:2075-2085 /branches/wao-4.0.x:2169-2227 + /branches/wao-4.0-obsvente:2075-2085 /branches/wao-4.0.x:2169-2242 Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheKey.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheKey.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheKey.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -63,4 +63,19 @@ return Objects.hashCode(locale, optionalCompanyId, obsProgram, boatsFilter); } + public Locale getLocale() { + return locale; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } + + public Optional<String> getOptionalCompanyId() { + return optionalCompanyId; + } + + public BoatsFilter getBoatsFilter() { + return boatsFilter; + } } Copied: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheLoader.java (from rev 2242, branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheLoader.java) =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheLoader.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsFilterValuesCacheLoader.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -0,0 +1,61 @@ +package fr.ifremer.wao.services.service; + +import com.google.common.cache.CacheLoader; +import fr.ifremer.wao.WaoTopiaPersistenceContext; +import fr.ifremer.wao.services.WaoApplicationContext; +import fr.ifremer.wao.services.WaoServiceContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Locale; + +public class BoatsFilterValuesCacheLoader extends CacheLoader<BoatsFilterValuesCacheKey, BoatsFilterValues> { + + private static final Log log = LogFactory.getLog(BoatsFilterValuesCacheLoader.class); + + protected WaoApplicationContext waoApplicationContext; + + public BoatsFilterValuesCacheLoader(WaoApplicationContext waoApplicationContext) { + this.waoApplicationContext = waoApplicationContext; + } + + @Override + public BoatsFilterValues load(BoatsFilterValuesCacheKey key) { + + if (log.isTraceEnabled()) { + log.trace("start refreshing boatFilterValuesCache for key " + key); + } + + Locale locale = key.getLocale(); + + WaoTopiaPersistenceContext persistenceContext = null; + + try { + + persistenceContext = waoApplicationContext.newPersistenceContext(); + + WaoServiceContext waoServiceContext = waoApplicationContext.newServiceContext(persistenceContext, locale); + + BoatsService service = waoServiceContext.newService(BoatsService.class); + + BoatsFilterValues boatsFilterValues = service.getBoatsFilterValues(key); + + if (log.isTraceEnabled()) { + log.trace("will return from refreshing boatFilterValuesCache"); + } + + return boatsFilterValues; + + } catch (Exception e) { + if (persistenceContext != null) { + persistenceContext.rollback(); + } + throw e; + } finally { + if (persistenceContext != null) { + persistenceContext.close(); + } + } + + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsService.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/BoatsService.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -90,21 +90,37 @@ if (boatsFilterValues == null) { - BoatTopiaDao dao = getBoatDao(); + if (log.isTraceEnabled()) { + log.trace("cache fail, will compute filter values for key " + boatsFilterValuesCacheKey); + } - List<Boat> boats = dao.findAll(filter); + boatsFilterValues = getBoatsFilterValues(boatsFilterValuesCacheKey); - boatsFilterValues = new BoatsFilterValues(serviceContext.getLocale(), authenticatedWaoUser.getObsProgram(), optionalCompanyId); + cache.put(boatsFilterValuesCacheKey, boatsFilterValues); - for (Boat boat : boats) { - boatsFilterValues.addBoat(boat); - } + } - cache.put(boatsFilterValuesCacheKey, boatsFilterValues); + return boatsFilterValues; + } + public BoatsFilterValues getBoatsFilterValues(BoatsFilterValuesCacheKey boatsFilterValuesCacheKey) { + + BoatTopiaDao dao = getBoatDao(); + + List<Boat> boats = dao.findAll(boatsFilterValuesCacheKey.getBoatsFilter()); + + BoatsFilterValues boatsFilterValues = + new BoatsFilterValues( + boatsFilterValuesCacheKey.getLocale(), + boatsFilterValuesCacheKey.getObsProgram(), + boatsFilterValuesCacheKey.getOptionalCompanyId()); + + for (Boat boat : boats) { + boatsFilterValues.addBoat(boat); } return boatsFilterValues; + } public BoatsList getBoatsList(AuthenticatedWaoUser authenticatedWaoUser, Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheKey.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheKey.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheKey.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -63,4 +63,19 @@ return Objects.hashCode(locale, optionalCompanyId, obsProgram, contactsFilter); } + public Locale getLocale() { + return locale; + } + + public ObsProgram getObsProgram() { + return obsProgram; + } + + public Optional<String> getOptionalCompanyId() { + return optionalCompanyId; + } + + public ContactsFilter getContactsFilter() { + return contactsFilter; + } } Copied: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheLoader.java (from rev 2242, branches/wao-4.0.x/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheLoader.java) =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheLoader.java (rev 0) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsFilterValuesCacheLoader.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -0,0 +1,61 @@ +package fr.ifremer.wao.services.service; + +import com.google.common.cache.CacheLoader; +import fr.ifremer.wao.WaoTopiaPersistenceContext; +import fr.ifremer.wao.services.WaoApplicationContext; +import fr.ifremer.wao.services.WaoServiceContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Locale; + +public class ContactsFilterValuesCacheLoader extends CacheLoader<ContactsFilterValuesCacheKey, ContactsFilterValues> { + + private static final Log log = LogFactory.getLog(BoatsFilterValuesCacheLoader.class); + + protected WaoApplicationContext waoApplicationContext; + + public ContactsFilterValuesCacheLoader(WaoApplicationContext waoApplicationContext) { + this.waoApplicationContext = waoApplicationContext; + } + + @Override + public ContactsFilterValues load(ContactsFilterValuesCacheKey key) { + + if (log.isTraceEnabled()) { + log.trace("start refreshing boatFilterValuesCache for key " + key); + } + + Locale locale = key.getLocale(); + + WaoTopiaPersistenceContext persistenceContext = null; + + try { + + persistenceContext = waoApplicationContext.newPersistenceContext(); + + WaoServiceContext waoServiceContext = waoApplicationContext.newServiceContext(persistenceContext, locale); + + ContactsService service = waoServiceContext.newService(ContactsService.class); + + ContactsFilterValues boatsFilterValues = service.getContactsFilterValues(key); + + if (log.isTraceEnabled()) { + log.trace("will return from refreshing boatFilterValuesCache"); + } + + return boatsFilterValues; + + } catch (Exception e) { + if (persistenceContext != null) { + persistenceContext.rollback(); + } + throw e; + } finally { + if (persistenceContext != null) { + persistenceContext.close(); + } + } + + } +} Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsService.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsService.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/ContactsService.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -153,19 +153,31 @@ ContactsFilterValues contactsFilterValues = cache.getIfPresent(cacheKey); if (contactsFilterValues == null) { + contactsFilterValues = getContactsFilterValues(cacheKey); + cache.put(cacheKey, contactsFilterValues); + } - ContactTopiaDao dao = getContactDao(); - List<Contact> contacts = dao.findAllForFilterValues(filter); + return contactsFilterValues; + } - contactsFilterValues = new ContactsFilterValues(locale, obsProgram, optionalCompanyId); - for (Contact contact : contacts) { - contactsFilterValues.addContact(contact); - } + public ContactsFilterValues getContactsFilterValues(ContactsFilterValuesCacheKey cacheKey) { - cache.put(cacheKey, contactsFilterValues); + ContactTopiaDao dao = getContactDao(); + + List<Contact> contacts = dao.findAllForFilterValues(cacheKey.getContactsFilter()); + + ContactsFilterValues contactsFilterValues = + new ContactsFilterValues( + cacheKey.getLocale(), + cacheKey.getObsProgram(), + cacheKey.getOptionalCompanyId()); + + for (Contact contact : contacts) { + contactsFilterValues.addContact(contact); } return contactsFilterValues; + } public ObsMerContactsList getContactsList(AuthenticatedWaoUser authenticatedWaoUser, Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/UpdateContactCommand.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/UpdateContactCommand.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/UpdateContactCommand.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -120,6 +120,10 @@ contact.setMammalsInfo(mammalsInfo); } + public String getMammalsInfo() { + return contact.getMammalsInfo(); + } + /** * Check if mammals informations has changed. * Modified: trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/MammalsObservationEmail.java =================================================================== --- trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/MammalsObservationEmail.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-services/src/main/java/fr/ifremer/wao/services/service/mail/MammalsObservationEmail.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -33,7 +33,8 @@ import java.util.Locale; /** - * Created on 4/5/14. + * Courriel de notification qui est envoyé lorsqu'un utilisateur rapporte, à la saisie d'un + * contact, qu'une capture accidentelle d'un mammifère est survenue pendant la marée. * * @author Tony Chemit <chemit@codelutin.com> * @since 4.0 Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/DefaultWaoApplicationContext.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -34,8 +34,10 @@ import fr.ifremer.wao.services.WaoWebApplicationContext; import fr.ifremer.wao.services.service.BoatsFilterValues; import fr.ifremer.wao.services.service.BoatsFilterValuesCacheKey; +import fr.ifremer.wao.services.service.BoatsFilterValuesCacheLoader; import fr.ifremer.wao.services.service.ContactsFilterValues; import fr.ifremer.wao.services.service.ContactsFilterValuesCacheKey; +import fr.ifremer.wao.services.service.ContactsFilterValuesCacheLoader; import fr.ifremer.wao.services.service.InitWaoService; import fr.ifremer.wao.services.service.SamplingPlan; import fr.ifremer.wao.services.service.SamplingPlanCacheKey; @@ -130,7 +132,11 @@ @Override public Cache<BoatsFilterValuesCacheKey, BoatsFilterValues> getBoatsFilterValuesCache() { if (boatsFilterValuesCache == null) { - boatsFilterValuesCache = newCacheBuilder(100).expireAfterWrite(18, TimeUnit.HOURS).build(); + BoatsFilterValuesCacheLoader loader = new BoatsFilterValuesCacheLoader(this); + boatsFilterValuesCache = newCacheBuilder(100) + . expireAfterAccess(20, TimeUnit.DAYS) + . refreshAfterWrite(20, TimeUnit.MINUTES) + . build(loader); } return boatsFilterValuesCache; } @@ -146,7 +152,11 @@ @Override public Cache<ContactsFilterValuesCacheKey, ContactsFilterValues> getContactsFilterValuesCache() { if (contactsFilterValuesCache == null) { - contactsFilterValuesCache = newCacheBuilder(100).expireAfterWrite(18, TimeUnit.HOURS).build(); + ContactsFilterValuesCacheLoader loader = new ContactsFilterValuesCacheLoader(this); + contactsFilterValuesCache = newCacheBuilder(100) + . expireAfterAccess(20, TimeUnit.DAYS) + . refreshAfterWrite(20, TimeUnit.MINUTES) + . build(loader); } return contactsFilterValuesCache; } @@ -178,6 +188,8 @@ } + logCacheStats(); + return persistenceContext; } @@ -195,12 +207,7 @@ @Override public void close() { - if (log.isInfoEnabled()) { - log.info("samplingPlansCache stats: " + getSamplingPlansCache().stats().toString()); - log.info("boatsFilterValuesCache stats: " + getBoatsFilterValuesCache().stats().toString()); - log.info("contactsFilterValuesCache stats: " + getContactsFilterValuesCache().stats().toString()); - log.info("synthesesCache stats: " + getSynthesesCache().stats().toString()); - } + logCacheStats(); if (topiaApplicationContext != null) { @@ -210,6 +217,17 @@ } + protected void logCacheStats() { + + if (log.isInfoEnabled()) { + log.info("samplingPlansCache stats: " + getSamplingPlansCache().stats().toString()); + log.info("boatsFilterValuesCache stats: " + getBoatsFilterValuesCache().stats().toString()); + log.info("contactsFilterValuesCache stats: " + getContactsFilterValuesCache().stats().toString()); + log.info("synthesesCache stats: " + getSynthesesCache().stats().toString()); + } + + } + public void init() { if (getApplicationConfig().isLogConfigurationProvided()) { Modified: trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/EditContactAction.java =================================================================== --- trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/EditContactAction.java 2014-09-10 09:21:00 UTC (rev 2242) +++ trunk/wao-web/src/main/java/fr/ifremer/wao/web/action/EditContactAction.java 2014-09-10 09:24:51 UTC (rev 2243) @@ -143,7 +143,8 @@ public UpdateContactCommand getUpdateContactCommand() { if (updateContactCommand == null) { - prepare(); + // XXX brendan 02/09/14 avant le prepare, on ne sait pas si contactId a été injecté donc on ne l'utilise pas. Par ailleurs, même s'il avait été injecté, on se retrouverait avec une première instance de updateContactCommand qui sera perdue et l'entité sera décorée par une autre commande et on aura perdu des infos entre temps (notamment le flag qui vérifie si on a modifié les informations de capture accidentelle) + updateContactCommand = service.newUpdateContactCommandForCreation(getAuthenticatedWaoUser()); } return updateContactCommand; }