Rational Web Developer V6.0.1 では、
Faces Client ランタイム・リソースの更新は、古いリソースが含まれた Web プロジェクトがイン
ポートされるか、古いリソースが含まれたワークスペースが開かれたときに自動的に行われます。
WebSphere Studio
Site Developer V5.1.x から
Rational Web Developer V6.0.1 に Web プロジェクト
をインポートするかワークスペースを開いた後で、Faces Client ランタイム・リソースを最新レベ
ルに更新するように指示するプロンプトが表示されます。
ランタイム・リソースを自動的に更新する
Web プロジェクトに対して Faces Client ランタイム
・リソースを
自動的に更新するには以下のようにします。
- Faces Client コンテンツが含まれた Web プロジェクト (またはワークスペース) を
WebSphere Studio
Site Developer V5.1.x からインポートする。
「プロジェクトのマイグレーション」ウィンドウが開きます。
注: 「プロジェクトのマイグレーション」ウィンドウが開かない場合は、自動ビルドの設定がお
そらく無効になっています。
プロジェクト・エクスプローラーで Web プロジェクトを右クリックして、
を選択します。これにより、プロジェ
クトの再ビルド・プロセスが実行されて、「プロジェクトのマイグレーション」ウィンドウが開き
ます。
- Faces Client コンテンツが含まれた他の Web プロジェクトがワークスペース内にある場合
は、「アップグレードの必要がある他のプロジェクトにこの選択
を適用する」チェック・ボックスを選択すると、すべての Web プロジェクトが更新される。
- 次のいずれかをクリックする。
- 更新を自動的に完了するには、「適用する」をクリックする。
- 更新を延期するには、「後で適用する」をクリックする。
「後で適用する」の選択後にランタイム・リソースを自動的に更新
するには、Web プロジェクトを再ビルドする前に、Web プロジェクトを閉じてから再び開くかワークベンチを再始動
する必要があります。
自動ビルドを無効にしている場合は、Web プロジェクトを右クリックして
「プロジェクトのビルド」を選択します。
- ランタイム・リソースをバックレベルのままにするには、「
適用しない」をクリックする。
「適用しない」を選択してバックレベルのランタ
イム・リソースを意図的に保持した場合は、これらのランタイム・リソースを更新するように指示するプロンプトは再表
示されません。
今後は、これらのランタイム・リソースが必要な場合は、これらを手動で更新する必要があります。
- Web プロジェクト内のフォルダーから、
com.ibm.dynwdo4jsmediators.<client-data-name> という命名規則に従ったすべてのクライ
アント・データ・メディエーター・クラス・パッケージを削除する。
com.ibm.dynwdo4jsmediators という名前のパッケージは削除しないでください。
このパッケージには、メディエーターを再生
成するのに使用される、プロジェクト内のクライアント・データのメタデータ (ecore ファイルと emap
ファイル) が含まれています。
- Web プロジェクト内のフォルダーから、
OdysseyBrowserFramework.properties ファイルを開いて、EMAP_FILES と
ECORE_FILES のエントリーを削除する。
- 「クライアント・データ」ビュー内のデータ・オブジェクトごとに以下を実行する。
- 右クリックして「構成」を選択する。
- 「拡張」タブで、「サーバー・
サイド・データから再生成する (Regenerate from server-side data)」をクリックして、そのデータ・オブジェクトのすべての
メディエーターを再生成する。
ランタイム・リソースを手動で更新する
Web プロジェクトに対して
Faces Client ランタイム・リソースを
手動で更新するには、以下のようにします。
- 『Web プロジェクトでの Faces ランタイム・リソースの更新』の『ランタイム・リソースを手動で更新
する』のステップを実行する。
- 上記の『ランタイム・リソースを自動的に更新する』セクショ
ンのステップ 4 から 6 を実行する。
Faces Client コンポーネントが含まれたプロジェクトのターゲット・サーバーを
WebSphere Application Server V5.1 から V6.0 に
変更するときには問題が発生する可能性があります。
Faces Client コンポーネントが含まれたプロジェクトのタ
ーゲット・サーバーを WebSphere Application
Server V5.1 から V6.0 に変更すると、次の 2 つの問題が発生する可能性があります。
- すでに生成されているクライアント・データのメディエーター・クラスがコンパイルされなくな
る。これらのメディエーター・クラスは、以下のステップに従って JSP ごとに再生成する必要があり
ます。
- ルートの Java™
ソース・フォルダーにある OdysseyBrowserFramework.properties ファイルを開く。
将来の利用のために内容を保管します。
- OdysseyBrowserFramework.properties ファイルで、Web プロジェクト内の Faces クライアン
ト・データが含まれた JSP ごとに、EMAP_FILES プロパティーと
ECORE_FILES プロパティーに対する
<client-data-name>.ecore エントリーと <client-data-name>.emap エントリーを検索する。
- JSP 上のクライアント・データの一致するエントリーのみを保持し、他のすべてのエントリーを削除する。
例えば、現行ページに ACCOUNT というクライアント・データ
があり、プロパティー・ファイルに次のような項目がある場合:
EMAP_FILES=com¥¥ibm¥¥dynwdo4jsmediators/account.emap com¥¥ibm¥¥dynwdo4jsmediators/orders.emap
項目から
com¥¥ibm¥¥dynwdo4jsmediators/orders.emap を削除します。すると、
この項目は次のように表示されます。
EMAP_FILES=com¥¥ibm¥¥dynwdo4jsmediators/account.emap
- プロパティー・ファイルを保管する。
- JSP 内のクライアント・データ・オブジェクトを選択して右クリック
し、「構成」を選択する。
- 「拡張」タブで「すべて再生成」をクリックする。
これにより、現行の JSP 上のすべてのクライアント・データに必要なすべての成果物が再生成されま
す。
- Web プロジェクト内のクライアント・データが含まれた JSP ごとにステップ 2 から 6 を繰り返す。
- クライアント・データ・メディエーター・クラスを再生成した後でも、コンパイルされ
ないメディエーター・クラスがまだいくつか残ります。これらは、V6.x の Service Data Object (SDO) で使用されなくなったスキ
ーマ・エレメントのメディエーターであり、*_DataGraphSchema_wdo4js_*.java および
*_RootDataObject_wdo4js_*.java という命名規則に従っています。
これらのコンパイル・エラーを回避するためには、Web プロジェクトからこれらのメディエーター・クラス
を削除してください。
- 更新が正常に完了した後、OdysseyBrowserFramework.properties ファイルのオ
リジナルの内容を復元します。
- プロジェクトのターゲット・サーバーを WebSphere Application Server V6.0 に変更した後、
WDO にバインドされたツリー・ビューの Faces Client コンポーネントをサーバー上で実行できない。
この問題の回避策は、すべての className タグが WDO DataObject クラスではなく SDO
DataObject クラスを使用するように、JSP のソース・ビューを変更することです。
例えば、account という名前の WDO については次のようにします。
- ルート・オブジェクトについて、className タグを className="com.ibm.etools.wdo.DataObject(DynWDO`account`RootDataObject)"
から className="commonj.sdo.DataObject(DynWDO`account`DataGraphRoot)" に変更する。
- すべての下位ノードについて、className タグを className="com.ibm.etools.wdo.DataObject(DynWDO`account`ACCOUNT)" から className="commonj.sdo.DataObject(DynWDO`account`ACCOUNT)" に変更する。
ここで、ACCOUNT はデータ・ノードの名前です。
自動化された Diff ハンドラーおよびプロセッサーにアップグレードする
現在は Diff プロセッサーおよびハンドラーは自動生成されます。Faces Client コンポーネントの Diff
ハンドラーおよびプロセッサーを
WebSphere
Studio V5.1.x で作成した場合は、そのコードを廃棄して、次のように自動的に生成されるプロセッ
サーとハンドラーを使用することをお勧めします。
- Web プロジェクト内の各クライアント・データ・オブジェクトで新しい Diff ハンドラーと
プロセッサーを生成する。
- クライアント・データ・オブジェクトを選択して右クリックし、「構成」を選択する。
- 「拡張」タブで「すべて再生成」をクリックする。
- 生成されたプロセッサーとハンドラーは自動的に呼び出されるため、Diff プロセッ
サーとハンドラーを呼び出すために作成したコードを除去する。このコードが使用されていた場所の
典型的な例は、次のような「コマンド・ボタン」コンポーネントの「コマンド」イベントです。
String Diff = getClientData1().getDiffStr();
if (DiffProcessor.Synch(getRoot(), Diff) == true)
return "";
return "failure";
- 作成した古いカスタム・ハンドラーおよびプロセッサーに対応するファイルを Web プロジェクトから除去する。
V5.1.x 用に作成されたカスタム Diff ハンドラーおよびプロセッサーを保持する
これは推奨されませんが、
V5.1.x のカスタム Diff ハンドラーおよびプロセッサーを保持する必要があると判断した場合は、これらを
V6.0 で機能させるためには変更が必要になります。その理由は、DiffHandler
インターフェースと DiffInfo クラスが変更されているためです。
- DiffHandler インターフェースは以下のように変更されました。
- ハンドル・メソッドは DiffException に加え、Exception を throw するようになった。
- フレームワークはオブジェクトを検索するために新しい find メソッドを使用する。
- デバッグに新規 getId メソッドが使用され、フレームワークが
オブジェクトの値を印刷することができる。
生成された DiffHandler により find および getId メソッドが内部で使用される。
カスタム DiffHandler については、このインターフェースに準拠させるためだけに
空のメソッドをインプリメントすることができます。それらのメソッドは、
フレームワークによって呼び出されません。
DiffHandler インターフェースは、
以下のようになりました。
public interface DiffHandler
{
public void handle(DiffInfo Diff) throws DiffException, Exception;
public Object find (DiffInfo Diff) throws DiffException, Exception;
public String getId (DiffInfo Diff, boolean Original);
}
- DiffInfo クラスが以下のように変更されました。
- ArrayList getAncestors() メソッドは DiffInfo
getParent() メソッドに置換されました。このメソッドは再帰的方法で
祖先ツリーの各オブジェクトの情報に容易にアクセスする方法を提供します。
- getCurrent() および getOriginal() メソッドは、EObject オブジェクトではなく
DataObject オブジェクトを戻すようになりました。DataObject オブジェクトを使用するように
コードを変更することは必須ではありません。しかし、DataObject インターフェースの方が
EObject よりもより簡単で直感的に使用できます。既存のコードに対して、容易に DataObject オブジェクトを
EObject オブジェクトに cast することができます。
- このオブジェクトが適用されるプロパティー名を識別するために、
新規メソッド String getPropertyName() が追加されました。これは、例えば特定のクラスに
同じ型の 2 つのプロパティーがある場合に重要です。以前の DiffInfo クラスでは、
コードは 2 つのプロパティー間を区別することができませんでした。
DiffInfo クラスは以下のように変更されました。
public class DiffInfo
{
public char getCrud()
public DataObject getCurrent()
public String getEClassName()
public DataObject getOriginal()
public String getPropertyName()
public DiffInfo getParent()
}
注: DiffInfo クラスは公用の使用ではサポートされなくなりました。
その理由は Diff プロセッサーとハンドラーが自動的に生成されるようになったためです。古い
ハンドラーを保持するのは一時的なソリューションでしかなく、
自動化されたハンドラーを使用するよう強くお勧めします。