データベースにいくつかのデータをコミットした後、最近コミットされたデータを反映するために、セッション Bean を自動的に更新したいと考えています。JSF 2.0 でマネージド セッション Bean を使用する場合、これをどのように達成するのですか?
現在、セッションをクリアして再度ロードするには、Web サーバーを再起動する必要があります。
データベースにいくつかのデータをコミットした後、最近コミットされたデータを反映するために、セッション Bean を自動的に更新したいと考えています。JSF 2.0 でマネージド セッション Bean を使用する場合、これをどのように達成するのですか?
現在、セッションをクリアして再度ロードするには、Web サーバーを再起動する必要があります。
2 つの方法:
代わりに、それらをビュー スコープに入れてください。ビュー固有のデータをセッション全体で保存するのは無駄です。パフォーマンスに懸念がある場合は、接続プーリング、DB レベルのページネーション、および/または永続レイヤーでのキャッシュの実装に集中する必要があります (たとえば、JPA2 は第 2 レベルのキャッシュをサポートしています)。
@ManagedBean
@ViewScoped
public class FooBean {
// ...
}
load()
アクション メソッドから (必要に応じて別の Bean から) 呼び出せるように、パブリック メソッドを追加します。
@ManagedBean
@SessionScoped
public class FooBean {
private List<Foo> foos;
@EJB
private FooService fooService;
@PostConstruct
public void load() {
foos = fooService.list();
}
// ...
}
これは、同じ Bean 内のアクション メソッドで呼び出すことができます (もちろん、フォームをまったく同じマネージド Bean に送信する場合)。
public void submit() {
fooService.save(foos);
load();
}
または別の Bean のアクション メソッドから (マネージド Bean の設計が通常とは少し異なる場合):
@ManagedProperty("#{fooBean}")
private FooBean fooBean;
public void submit() {
fooService.save(foos);
fooBean.load();
}
もちろん、これは現在のセッションにのみ影響します。他のセッションにも影響を与えたい場合は、最初の方法で提案されているように、代わりにビュー スコープに配置することを検討する必要があります。