Ho un problema per aggiornare o ricaricare un bean gestito con scope dell'applicazione. Si comporta come un bean di dati memorizzato nella cache. Quindi una volta che i dati sono cambiati sul lato db, voglio ricaricare la lista nel bean. Esiste comunque un modo per aggiornare/ricaricare l'elenco, ad esempio una volta al giorno in base all'ora prestabilita? GrazieAggiorna/Ricarica bean gestito dell'ambito applicazione
8
A
risposta
14
Basta aggiungere un metodo al bean con scope di aplicazione che fa esattamente questo.
public void reload() {
list = dao.list();
}
Quindi afferrare/iniettare questo bean in un altro bean e chiamare il metodo.
data.reload();
aggiornamento dispiace, ho trascurato il "una volta al giorno" bit. Intendi ricaricare automaticamente in background? Questo è il modo migliore per ottenere un thread in background gestito da ScheduledExecutorService
. Creare un ServletContextListener
piace segue:
@WebListener
public class Config implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
Reloader reloader = new Reloader(event.getServletContext());
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(reloader, 1, 1, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
dove lo sguardo di classe Reloader
come questo (assumendo che il nome bean gestito è data
)
public class Reloader implements Runnable {
private ServletContext context;
public Reloader(ServletContext context) {
this.context = context;
}
@Override
public void run() {
Data data = (Data) context.getAttribute("data");
if (data != null) {
data.reload();
}
}
}
Problemi correlati
- 1. JSF 2 localizzazione (bean gestito)
- 2. JSF-bean gestito EJB iniezione
- 3. Come configurare un bean gestito all'avvio?
- 4. bean gestito con scope sessione vs bean stateful vs httpsession
- 5. Accesso ai valori di un bean gestito JSF in un altro bean gestito
- 6. Chiamata metodo bean gestito da JavaScript
- 7. Come iniettare l'intero bean gestito tramite l'annotazione @ManagedProperty?
- 8. Come dichiarare un bean gestito JSF in un'applicazione Spring 3.1?
- 9. Inietta bean gestito CDI in Shiro personalizzato AuthorizingRealm
- 10. Come posso restituire l'HTML dal bean gestito in JSF?
- 11. Bean gestito con scope della sessione e actionListener
- 12. Imposta bean gestito come parametro nel componente composito
- 13. Come ottenere il nome del bean gestito dall'interno del bean di supporto?
- 14. applicazione di debug che è gestito utilizzando PM2
- 15. Come configurare un bean gestito per lavorare con il documento Notes
- 16. Metodi di utilità nel bean con ambito applicazione
- 17. JSF Chiamato Bean, applicazione Eager ambito (aka @ManagedBean (desiderosi = true))
- 18. Recupera un bean gestito da un contenitore JerseyTest con jersey-spring3
- 19. JSF - Il bean gestito con ambito sessione non ha re-iniettate dipendenze nella deserializzazione della sessione
- 20. Inizializzazione bean bean Spring
- 21. cosa usare, fagioli gestiti (backing bean) o bean di entità?
- 22. Utilizzo del bean gestito con scope sessione jsf per rappresentare i dati statici gerarchici
- 23. leggere le proprietà di bundle di risorse in un bean gestito
- 24. @ViewScoped Il bean gestito viene caricato molte volte durante il postback
- 25. Avviso "Parametri [Parametri]: blocco non valido ignorato" durante la registrazione da un bean gestito
- 26. qual è la differenza tra bean gestito e controller a molla?
- 27. Problema Primefaces: p: download scaricato da p: datatable con bean gestito ViewScoped
- 28. Nessun accesso alla proprietà nidificato in bean gestito all'interno di p: colonne
- 29. Come cancellare un oggetto del bean gestito con scope della sessione?
- 30. Come utilizzare il codice gestito dal codice non gestito?
Grazie @BalusC molto – leo
Sei il benvenuto. Devi comunque essere estremamente attento con la gestione dei thread in un contenitore servlet. Il 'scheduler.shutdownNow();' bit in 'contextDestroyed()' è molto importante. Potresti considerare di delegare il lavoro di gestione dei thread al servlet container, se lo supporta. JBoss ha per esempio il quarzo per questo, Glassfish ha per esempio 'WorkManager' per questo. In Tomcat, l'esempio sopra è la soluzione migliore. – BalusC
@BalusC Ho lo stesso bisogno. L'ho implementato nella mia applicazione. L'unico problema è che nel metodo 'Reloader'' run() 'il mio bean è sempre nullo. Puoi darmi un suggerimento, per favore – leostiw