Come disabilitare temporaneamente la strategia in letargo di cache di 2 ° livello di sola lettura in Grails?

StackOverflow https://stackoverflow.com/questions/2238695

Domanda

Nella mia applicazione Grails, alcune delle mie classi di dominio non saranno mai cambiate dagli utenti.

Tuttavia, a volte sono necessari alcuni lavori di manutenzione e l'amministratore dovrebbe essere in grado di creare/modificare poche istanze di volta in volta (diciamo due volte l'anno).

Vorrei impostare una strategia di cache di 2 ° livello di sola lettura per queste classi di dominio (static mapping = { cache usage: 'read-only' } ) E vorrei essere in grado di "disabilitare" (in situazioni molto particolari) la strategia di sola lettura al fine di utilizzare alcune istanze tramite la vista di modifica delle impalcature di Grails.

È possibile? Cosa mi consigli di fare?

MODIFICARE: La soluzione che sto implementando è un mix di risposte Pascal e Burt (vedi commenti). Entrambe le risposte sono fantastiche e disponibili. Quindi ho ricevuto un dilemna per aver scelto la risposta accettata! Comunque grazie.

È stato utile?

Soluzione

È probabilmente possibile ma molto probabilmente non banale. Andrei con inserti diretti usando groovy.sql.sql. Perdi la convalida, ma potresti creare istanze e convalidarle ma non chiamare Save (). Quindi fai gli inserti SQL se sono ok, ad es.

def thing = new Thing(params)
if (thing.validate()) {
   new Sql(dataSource).executeInsert(
             "insert into thing(name) values(?)", [params.name])
}
else {
   // report validation error
}

Altri suggerimenti

Eseguirei l'aggiornamento sulle entità fornite utilizzando puro SQL e poi fai il richiesto evict() Metodo chiama sul file SessionFactory Per rimuovere le entità specifiche dalla cache di 2 ° livello. Si noti che potrebbe essere necessario rimuovere anche le entità dalle collezioni evictCollection(). Verificare questo Bel post sul blog Per dettagli sullo sfratto.

Incapsulare tutto questo nei servizi (ad es. wipeBooksFromGlobalCache()) di quanto gli amministratori possano chiamare nelle situazioni molto particolari che stai menzionando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top