第2章 移行
Seam の旧バージョンがすでにインストールされている場合は本章の説明にしたがって最新バージョン (2.0.0) に移行する必要があります。 最新バージョンは JBoss Enterprise Application Platform に同梱されています。
Seam 2.0 をすでに使用している場合は、直接 「Seam 2.0 から Seam 2.1 または 2.2 への移行」 まで進んでください。現在 Seam 1.2.x を使用している場合は、「Seam 1.2.x から Seam 2.0 への移行」 および 「Seam 2.0 から Seam 2.1 または 2.2 への移行」 の両方の説明に従ってください。
2.1. Seam 1.2.x から Seam 2.0 への移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
本項では Seam 1.2.x から Seam 2.0 に移行する方法について見ていきます。 また、 バージョン間での Seam コンポーネントへの変更点も記載しています。
2.1.1. JavaServer Faces 1.2 への移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Seam 2.0 は正しく動作するには JSF 1.2 が必要です。 JBoss 4.2 などほとんどの Java EE 5 アプリケーションサーバーに同梱される Sun の JSF Reference Implementation (RI) を推奨します。 JSF RI に切り替えるには
web.xml に次の変更を行う必要があります。
- MyFaces の
StartupServletContextListenerを削除します。 - AJAX4JSF フィルタ、 マッピング、
org.ajax4jsf.VIEW_HANDLERSコンテキストパラメータを削除します。 org.jboss.seam.web.SeamFilterの名前をorg.jboss.seam.servlet.SeamFilterに変更します。org.jboss.seam.servlet.ResourceServletの名前をorg.jboss.seam.servlet.SeamResourceServletに変更します。web-appのバージョンを2.4から2.5に変更します。名前空間 URL でj2eeをjavaeeに変更します。 たとえば、Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Seam 1.2 では、
SeamExceptionFilter と SeamRedirectFilter を web.xml に明示的に宣言せずに SeamFilter を web.xml に宣言することができます。
クライアント側の状態保存には JSF RI を必要としないため削除が可能です。クライアント側の状態保存は
javax.faces.STATE_SAVING_METHOD コンテキストパラメータで定義します。
また、
faces-config.xml に以下の変更が必要になります。
TransactionalSeamPhaseListenerまたはSeamPhaseListenerの宣言を使用している場合は削除します。SeamELResolver宣言を使用している場合は削除します。SeamFaceletViewHandler宣言を標準のcom.sun.facelets.FaceletViewHandlerに変更してからそれが有効になっていることを確認します。- ドキュメント上の DTD を削除して XML Schema 宣言をその
<faces-config>ルートタグに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.2. コードの移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Seam の組み込みコンポーネントは再編成されより簡単に理解できるようになり、 特定の技術依存と固有パッケージが分離されました。
- 永続関連のコンポーネントは
org.jboss.seam.persistenceに移動しました。 - jBPM 関連のコンポーネントは
org.jboss.seam.bpmに移動しました。 - JSF 関連のコンポーネント、 特に
org.jboss.seam.faces.FacesMessagesはorg.jboss.seam.facesに移動しました。 - サーブレット関連のコンポーネントは
org.jboss.seam.webに移動しました。 - 非同期に関連するコンポーネントは
org.jboss.seam.asyncに移動しました。 - 国際化関連のコンポーネントは
org.jboss.seam.internationalに移動しました。 - ページフローのコンポーネントは
org.jboss.seam.pageflowに移動しました。 - ページコンポーネントは
org.jboss.seam.navigationに移動しました。
こうした API に依存するコードはすべて新しい Java パッケージ名を反映するよう変更する必要があります。
アノテーションについても再編成が行われました。
- BPM 関連のアノテーションは
org.jboss.seam.annotations.bpmパッケージに含まれています。 - JSF 関連のアノテーションは
org.jboss.seam.annotations.facesパッケージに含まれています。 - インターセプタのアノテーションは
org.jboss.seam.annotations.interceptパッケージに含まれています。 - 非同期に関連するアノテーションは
org.jboss.seam.annotations.asyncパッケージに含まれています。 @RequestParameterはorg.jboss.seam.annotations.webパッケージに含まれています。@WebRemoteはorg.jboss.seam.annotations.remotingパッケージに含まれています。@Restrictはorg.jboss.seam.annotations.securityパッケージに含まれています。- 例外処理のアノテーションは
org.jboss.seam.annotations.exceptionパッケージに含まれています。 @Intercept(NEVER)ではなく@BypassInterceptorsを使用します。
2.1.3. components.xml の移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
前項で概要を説明した新しいパッケージングシステムにより、
components.xml を新しいスキーマと名前空間で更新する必要があります。
名前空間は当初は
org.jboss.seam.foobar の形式をとっていました。 新しい名前空間の形式は http://jboss.com/products/seam/foobar になり、 スキーマの形式は http://jboss.com/products/seam/foobar-2.0.xsd です。 components.xml ファイルで名前空間とスキーマの形式を更新する必要があります。 これにより URL は移行先となる Seam のバージョン (2.0 または 2.1) に対応するようになります。
次の宣言はその位置を修正するか完全に削除する必要があります。
<core:managed-persistence-context>を<persistence:managed-persistence-context>で置換します。<core:entity-manager-factory>を<persistence:entity-manager-factory>で置換します。<core:manager/>エレメントからconversation-is-long-runningパラメータを削除します。<core:ejb/>を削除します。<core:microcontainer/>を削除します。<core:transaction-listener/>を<transaction:ejb-transaction/>で置換します。<core:resource-bundle/>を<core:resource-loader/>で置換します。
例2.1 components.xml の注記
Seam トランザクション管理はデフォルトで有効です。
faces-config.xml の JSF フェーズリスナー宣言ではなく、components.xml で制御されています。 Seam 管理トランザクションを無効にする場合は次を使用します。
<core:init transaction-management-enabled="false"/>
<core:init transaction-management-enabled="false"/>
event action にある expression 属性は廃止され execute になります。 たとえば、
Seam 2.2 では、セキュリティイベントは
org.jboss.seam ではなく org.jboss.seam.security> プレフィックスを使用します (例えば org.jboss.seam.security.notLoggedIn)。
注記
org.jboss.seam.postAuthenticate イベントの代わりに、 org.jboss.seam.security.loginSuccessful イベントを使ってキャプチャしたビューに戻ります。
2.1.4. Embedded JBoss への移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Embedded JBoss は JBoss Embeddable EJB3 または JBoss Microcontainer の使用に対応しなくなりました。代わりに、 新しい Embedded JBoss ディストリビューションにより簡略化されたデプロイメントを持つ Java EE 互換の API セットが提供されます。
テスト行う場合には次をクラスパスに含ませる必要があります。
- Seam の
lib/ディレクトリにあるjar bootstrap/ディレクトリ
embeddded-ejb ディレクトリや jboss-beans.xml など JBoss Embeddable EJB3 関連の参照やアーティファクトはすべて削除します。 (Seam のサンプルを参照として使用できます。)
Tomcat デプロイメントに関する特殊な設定やパッケージング要件はすべてなくなりました。Tomcat でデプロイする場合はユーザーガイドの説明にしたがってください。
注記
Embedded JBoss はデータソースを
-ds.xml ファイルからブートストラップできるため、 jboss-beans.xml ファイルは必要なくなりました。
2.1.5. jBPM 3.2 への移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ビジネスプロセスに対する jBPM およびページフローを使用している場合は
tx サービスを jbpm.cfg.xml に追加する必要があります。
<service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
<service name="tx" factory="org.jbpm.tx.TxServiceFactory" />
2.1.6. RichFaces 3.1 への移行 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
RichFaces および AJAX4JSF にはコードベースの大幅な再編成が行われました。
ajax4jsf.jar と richfaces.jar の jar は richfaces-api.jar (EAR の lib/ ディレクトリに配置される)、 richfaces-impl.jar および richfaces-ui.jar (WEB-INF/lib に配置される) で置き換えられました。
<s:selectDate> は廃止され <rich:calendar> になります。 <s:selectDate> の開発は行われなくなります。 ご使用のスタイルシートからデータピッカー関連のスタイルを削除してバンド幅の使用を減らします。
名前空間およびパラメータ名に対する変更については RichFaces のドキュメントを確認してください。
2.1.7. コンポーネントにおける変更点 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
パッケージングの変更点
application.xml でモジュールとしてこれまで宣言されていた依存性は、jboss-seam.jar を 除き すべて EAR の lib/ ディレクトリに配置されるようになるはずです。 jboss-seam.jar は EJB モジュールとして application.xml に宣言されるはずです。
Seam のユーザーインターフェースにおける変更点
<s:decorate> は命名コンテナになりました。 したがってクライアント ID は fooForm:fooInput から fooForm:foo:fooInput に変更になり、 次の宣言を前提としています。
<h:form id="fooForm">
<s:decorate id="foo">
<h:inputText id="fooInput" value="#{bean.property}"/>
</s:decorate>
</h:form>
<h:form id="fooForm">
<s:decorate id="foo">
<h:inputText id="fooInput" value="#{bean.property}"/>
</s:decorate>
</h:form>
ID を
<s:decorate> に与えないと JSF は ID を自動的に生成します。
seam-gen における変更点
Seam 2.0.0.CR2 からは、 generate-entities が実行されるときに seam-gen で生成されたクラスの編成に変更が発生しました。
元々はクラス郡は次のように生成されました。
src/model/com/domain/projectname/model/EntityName.java
src/action/com/domain/projectname/model/EntityNameHome.java
src/action/com/domain/projectname/model/EntityNameList.java
src/model/com/domain/projectname/model/EntityName.java
src/action/com/domain/projectname/model/EntityNameHome.java
src/action/com/domain/projectname/model/EntityNameList.java
現在では次のように生成されます。
src/model/com/domain/projectname/model/EntityName.java
src/action/com/domain/projectname/action/EntityNameHome.java
src/action/com/domain/projectname/action/EntityNameList.java
src/model/com/domain/projectname/model/EntityName.java
src/action/com/domain/projectname/action/EntityNameHome.java
src/action/com/domain/projectname/action/EntityNameList.java
Home および Query のオブジェクトは モデル コンポーネントではなく アクション コンポーネントになるため、
action パッケージに配置されます。 これにより generate-entities 対話が new-entity コマンドのそれと整合性を持ちます。
モデルのクラスはホット再ロードができないため別々に記載されます。
テストシステムの JBoss Embeddable EJB3 から Embedded JBoss への変更に伴い、 Seam 2.x の seam-gen でプロジェクトを生成し、その
build.xml ファイルを新しいプロジェクトのベースとして使用することをお勧めします。 build.xml に大幅な変更を行っている場合は、テスト関連の対象のみの移行に焦点を絞ることが可能です。
Embedded JBoss で動作するかのテストでは、
resources/META-INF/persistence-test.xml (または persistence-test-war.xml) の <datasource> エレメントの値を java:/DefaultDS に変更する必要があります。 代わりに -ds.xml ファイルを bootstrap/deploy フォルダにデプロイして、そのファイルで定義される JNDI 名を使用する方法もあります。
説明のとおり Seam 2.x
build.xml を使用する場合は deployed-*.list ファイルも必要になります。 これらのファイルは EAR または WAR アーカイブにパッケージ化される jar ファイル群を指定します。 build.xml ファイルから jar セットを取り除くために導入されました。
次の CSS をスタイルシートに追加してスタイルシートが RichFaces パネルでの変更に対応できるようにします。 このコードの追加に失敗すると
generate-entities で作成されるすべてのページで 検索基準 ブロックが 結果表 に流出することになります。
.rich-stglpanel-body {
overflow: auto;
}
.rich-stglpanel-body {
overflow: auto;
}