Let me try it! 

I'll not been able to implement it immediately but please, tell me the hints :)





> El 10/5/2015, a las 13:25, Dan Haywood <d...@haywood-associates.co.uk> 
> escribió:
> 
> Hi Oscar,
> 
> yes, this makes a lot of sense, and is something I've thought about in the 
> past myself (though I don't think it's been discussed on the mailing list 
> before).
> 
> In terms of API, it only really makes sense to enable caching for safe 
> (query-only) actions.  So I suggest that it might be better to extend the 
> ActionSemantics enum:
> 
> 
>     @Override
>     @Action(semantics = SemanticsOf.SAFE_AND_REQUEST_CACHED)
>     public SortedSet<IESG> relevantSnpGenotypes(final IE inputElement,
>             final Kit kit) {
>         if (kit != null) {
>             return 
> kit.findAllAssociatedSNPGenotypesForInputElement(inputElement, 
> AlgorithmImplementation.this.IESGClass);
>         } else {
>             return Sets.newTreeSet();
>         }
>     }
> 
> 
> I suggest the word "REQUEST" is in the enum somewhere just so it's obvious 
> that the caching is only for the duration of a request (rather than session 
> or something else).
> 
> This feature is probably pretty easy to implement.  I can do it if you want, 
> but if you'd like to give it a go I can provide some pointers if you want?
> 
> cheers
> Dan
> 
> 
> 
> 
>> On 10 May 2015 at 12:14, GESCONSULTOR - Óscar Bou <o....@gesconsultor.com> 
>> wrote:
>> 
>> 
>> Hi all.
>> 
>> We currently have available the 
>> "org.apache.isis.applib.services.queryresultscache.QueryResultsCache” 
>> service to cache the result of an Action invocation for the  same transation.
>> 
>> So if we call a SAFE action that is costly to be computed, many times during 
>> the same transaction, it’s only computed once, as the 2nd time and so on the 
>> result will be obtained from a LocalThread cache.
>> 
>> Current usage idiom is something like:
>> 
>>     // {{ relevantSnpGenotypes (programmatic - cached)
>>     @Override
>>     @Action(semantics = SemanticsOf.SAFE)
>>     public SortedSet<IESG> relevantSnpGenotypes(final IE inputElement,
>>             final Kit kit) {
>>         return this.queryResultsCache.execute(new 
>> Callable<SortedSet<IESG>>() {
>> 
>>             @Override
>>             public SortedSet<IESG> call() throws Exception {
>>                 if (kit != null) {
>>                     return 
>> kit.findAllAssociatedSNPGenotypesForInputElement(inputElement, 
>> AlgorithmImplementation.this.IESGClass);
>>                 } else {
>>                     return Sets.newTreeSet();
>>                 }
>>             }
>> 
>>         }, Kit.class, "relevantSnpGenotypes", inputElement, kit);
>>     }
>> 
>>     // }}
>> 
>> 
>>     // {{ injected: QueryResultsCache
>>     @Inject
>>     protected QueryResultsCache queryResultsCache;
>> 
>>     // }}
>> 
>> 
>> 
>> But perhaps would it be possible to ease its usage by means of an annotation 
>> ?
>> 
>> Something like:
>> 
>> 
>>     @Action(semantics = SemanticsOf.SAFE, cacheResults = true)
>> 
>> 
>> If so, the usage idiom would change to simply the action’s code, as the one 
>> responsible for caching could be a Facet, for example?
>> 
>>     // {{ relevantSnpGenotypes (programmatic - cached)
>>     @Override
>>     @Action(semantics = SemanticsOf.SAFE, cacheResults = true)
>>     public SortedSet<IESG> relevantSnpGenotypes(final IE inputElement,
>>             final Kit kit) {
>>         if (kit != null) {
>>             return 
>> kit.findAllAssociatedSNPGenotypesForInputElement(inputElement, 
>> AlgorithmImplementation.this.IESGClass);
>>         } else {
>>             return Sets.newTreeSet();
>>         }
>>     }
>> 
>>     // }}
>> 
>> 
>> Just to know others opinion about if it has sense and if it would be 
>> possible.
>> 
>> I’m pretty sure this would be one of those “killer functions” for complex 
>> Domains that would appear on a summary list, despite being currently being 
>> available.
>> 
>> 
>> 
>> Thanks!
>> 
>> 
>> 
>> Óscar Bou Bou
>> Responsable de Producto
>> Auditor Jefe de Certificación ISO 27001 en BSI
>> CISA, CRISC, APMG ISO 20000, ITIL-F
>> 
>>    902 900 231 / 620 267 520
>>    http://www.twitter.com/oscarbou
>> 
>>    http://es.linkedin.com/in/oscarbou
>> 
>>    http://www.GesConsultor.com 
>> 
>> 
>> 
>> 
>> Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen 
>> información reservada que no puede ser difundida. Si usted ha recibido este 
>> correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar 
>> al remitente mediante reenvío a su dirección electrónica; no deberá copiar 
>> el mensaje ni divulgar su contenido a ninguna persona.
>> Su dirección de correo electrónico junto a sus datos personales constan en 
>> un fichero titularidad de Gesdatos Software, S.L. cuya finalidad es la de 
>> mantener el contacto con Ud. Si quiere saber de qué información disponemos 
>> de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un 
>> escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente 
>> dirección: Gesdatos Software, S.L. , Paseo de la Castellana, 153 bajo - 
>> 28046 (Madrid), y Avda. Cortes Valencianas num. 50, 1ºC - 46015 (Valencia). 
>> Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos 
>> adjuntos no contengan virus informáticos, y en caso que los tuvieran 
>> eliminarlos.
> 

Reply via email to