....e invece E' COSI', e questo e' il merdone che per ora ho posizionato per
risolvere il problema almeno temporaneamente preservando la propagazione
dell'eccezione al chiamante:
boolean success = false;
try {
User res = users.getCurrent(auth);
success = true;
return res;
} finally {
if(!success) {
Ehcache cache = cacheManager.getEhcache("users");
cache.put(new Element(auth, null)); // removes the lock if an
exception occurs, as per ehcache doc
cache.remove(auth); // now remove the element as
a fault happened: it's not real
} // how fun will it be with
concurrency... :(
}
Ora tocca a me scrivere qualche forma di interceptor perche' quelli di
Spring non si sono letti la documentazione di Ehcache. In pratica, se in
spring-boot annoti un metodo con "Cacheable" ti becchi gratis questa
fantastica funzionalita' che garantisce che tutti i thread del tuo server
muoiano serenamente su un lock se un'eccezione viene lanciata nel metodo
annotato . E io uso Ehcache parecchio, purtroppo...
Per fortuna che e' Natale e mi trattengo con gli insulti. Ora vediamo se
programmaticamente si riesce a impostare un timeout su questo lock... vi
teniamo aggiornati.
Ciao,
Bruno
--
Bruno Bossola
CTO - meterian.io
Scan your project now! <https://www.meterian.com/projectscanner.html>
On Fri, 20 Dec 2019 at 15:54, bruno bossola <[email protected]> wrote:
> Non ci posso credere... potrebbe essere una "feature" :(
>
> https://www.ehcache.org/apidocs/2.6.9/net/sf/ehcache/constructs/blocking/BlockingCache.html#get(java.lang.Object)
>
> RuntimeException
> <http://java.sun.com/javase/6/docs/api/java/lang/RuntimeException.html?is-external=true>
> -
> if thrown the lock will not released. Catch and call put(new Element(key,
> null)); to release the lock acquired.
> Probabilmente gli amici di Spring Boot si sono persi questo interessante
> caveat... Vi prego, ditemi che mi sbaglio.... o suggeritemi una strada per
> uscire da questo incubo.
>
> Ciao,
>
> Bruno
>
>
> --
> Bruno Bossola
> CTO - meterian.io
> Scan your project now! <https://www.meterian.com/projectscanner.html>
>
>
> On Fri, 20 Dec 2019 at 15:40, bruno bossola <[email protected]> wrote:
>
>> Ciao a tutti,
>>
>> Ho un problema molto strano sui metodi annotati con ehcache usati in un
>> servizio con spring-boot. Succede in poche parole che se il metodo lancia
>> un'eccezione allora il lock usato da ehcache su quell'elemento della cache
>> non viene rilasciato e a quel punto ogni successivo tentativo di accedere
>> all'elemento vede il thread ancorarsi su tale lock. Accedendo ad un altro
>> elemento tutto funziona.
>>
>> Ci sto lavorando da stamattina e non so proprio cosa fare... possibile
>> che nel 2020 si siano dimenticati di un finally per rilasciare il lock in
>> caso di eccezione? Se trappo l'eccezione e ritorno un sonoro "null", tutto
>> va perfettamente
>>
>> Se avete suggerimenti concreti li accetto volentieri, suggerimenti vaghi
>> o altre cose tipo "ma perche' non usi XY?" potete girarli su /dev/null.
>> Allego uno stack trace bonificato a titolo illustrativo.
>>
>> Ciao e grazie in anticipo,
>>
>> Bruno
>> --
>> Bruno Bossola
>> CTO - meterian.io
>> Scan your project now! <https://www.meterian.com/projectscanner.html>
>>
>