JSF2.2入門 第15回JavaBeansのスコープ一覧


kanban15

JavaBeansを使うときにどのスコープに設定すべきか迷うことがありませんか?Requestスコープか、Sessionスコープか。とにかく何でもSessionにしてしまう人も多いのではないでしょうか。ここではスコープの使い分けについて解説します。

katatsumuri-e1463911702620ManagedBeanとCDIの違い

その前にJabaBeansにはManagedBeanとCDIビーンズについて整理しておきます。それらによってスコープも違うからです。

 leaf-e1463911721194それぞれの定義

  • ManagedBeanとは: JSFで規定されたもので一般のJavaBeansをJSFが管理するもの。アノーテーション@ManagedBeanで識別します。@ManagedBeanとそのスコープはjavax.faces.beanパッケージに定義されています。
  • CDI(Contexts and Dependency Injection)とは: Java EE6から追加された仕様で通常のJavaBeansをDI、つまり依存性注入で管理するというものJava EEの中ではEJB(Enterprise JavaBeans)に追加されたBeansです。アノーテーション@Nanedで識別します。@Nanedやそのスコープはjavax.injectとjavax.enterprise.contextに定義されています。

JavaEE7からはCDIがデフォルトになっており、そのためNetBeansIDE8.xでは「ManagedBeanは次のJSFバージョンで無くなる予定だ」というメッセージが出ます。しかし今はJSF2.2ではどちらも問題なく使えます。全体的な流れはCDIにあるようで、今後はそれを使った方が良いというのが大多数です。注意すべきは、それらに定義の仕方やスコープに少し違いがあることです。

@ManagedBean(name=”custom”)
@RequestScoped
public class MyBean {……
}
@Named(value=”custom”)
@RequestScoped
public class MyBean {……
}

leaf-e1463911721194それぞれのスコープ

CDIのほうが種類が多くなっています。共通するものも多いです。

 

ManagedBean CDI 意味
RequestScoped RequestScoped  HTTPリクエストとレスポンスの中で有効
ViewScoped ViewScoped(javax.faces.view)  ブラウザーのウィンドウ/タブの同一JSFビューの中で有効
SessionScoped SessionScoped  複数回のHTTPリクエストとレスポンスの中で有効。
ApplicationScoped ApplicationScoped  Webアプリケーションが生きている間は有効
ConversationScoped  開発者がスコープを独自に設定できるもの。SessionScopeを自由に延長するようなもの。
FlowScoped(javax.faces.flow)  開発者が複数のページにわたりビーンの有効範囲を設定できる。
Dependent  CDIではデフォルトのスコープ
CustomScoped  開発者がスコープを独自に設定できるもの
NoneScoped  他のBeansにサービスするための補助的な用途に使用される

次回から詳しく解説します。

previousnext

JSF2.2のすべてをまとめたkindle電子書籍 「JavaServer Faces2.2 入門」もぜひご覧ください。パソコン、iPhone、Androidどんな端末用にもamazonが無料のKindle電子書籍リーダーを用意しています。それをつかってKindle本を手軽にお楽しみください。あなたが今お使いの端末用Kidle電子書籍リーダーのご案内

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA