ちょうどそのことを行う適用スコープのBeanにメソッドを追加してください。
public void reload() {
list = dao.list();
}
次に、このBeanを別のBeanに取り込み、メソッドを呼び出します。
data.reload();
更新申し訳ありませんが、私は "一日一回" ビットを見落とし。あなたはバックグラウンドでの自動リロードを意味しますか?これは、ScheduledExecutorService
によって管理されるバックグラウンドスレッドによって実現するのが最善です。 ServletContextListener
が好きな作成することは、次のとおりです。このようなクラスReloader
外観は
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();
}
}
}
(マネージドBean名が
data
であると仮定して)おかげで多くのことを@BalusC – leo
どういたしまして。しかし、あなたはサーブレット・コンテナでスレッドを自分で管理することに非常に注意する必要があります。 'contextDestroyed()'の 'scheduler.shutdownNow();'ビットは非常に重要です。スレッド管理ジョブがサポートされている場合は、スレッド管理ジョブをサーブレットコンテナに委任することを検討することもできます。 JBossにはこのためのQuartzがあります。例えば、Glassfishにはこのための 'WorkManager'があります。 Tomcatでは、上記の例が最善の策です。 – BalusC
@BalusC私は同じ必要があります。私は私のアプリケーションでこれを実装しました。唯一の問題は、 'Reloader'メソッド' run() 'でBeanが常にnullであることです。あなたは私にヒントをくれますか? – leostiw