タイトル | 倉橋浩一のWebObjects Practice》WebObjects 4.5で作った掲示板をVer.5に対応する(1) | カテゴリー | WebObjects, 倉橋浩一のWebObjects Practice |
作成日 | 2001/12/28 16:23:8 | 作成者 | 新居雅行 |
ご無沙汰してしまいました、WebObjects Practiceです。「飯食ってます」で予告したように、電子掲示板のWO 5対応版をやります。ただ、同じ手順をダラダラと続けてもあまり意味がないので、WO 4.5からWO 5.0への移植方法のご紹介、という形とします。 ご存じのように、WO 4.5と5.0とはプロジェクトの形式も、ソースも異なります。ただ、変換のためのツールは用意されています。が、使い方がちょっと煩雑で、また変換処理も万全というわけではないようです(という記述からお分かりのように、私はツールは使ったことありません)。 ということで、手作業で移植作業をしていきます。手順は大まかに以下のステップを踏みます。 1.WO 5上で新規プロジェクトを作る 2.データベースなど環境を整える 3.EOModelを作り、プロジェクトに登録する 4.Javaソースを移植 5.コンポーネントを移植 6.テスト では、順番に見ていきましょう。 ――――プロジェクトを作る ProjectBuilder上で新規にWebObjects Applicationプロジェクトを作ります。名前はSimpleOrder2にします(芸が無いですが)。基本的な注意事項として、Projectまでのパスに空白や日本語が含まれないようにしてください。ProjectBuilderは動いても、ビルドで失敗したりしますので。 WO 4.5版と同じ名前のコンポーネントを用意します。ProjectBuilderのWeb Componentsをクリックした状態でNewを選び、WebObjectsグループからComponentを選択し、ファイル名を入力します。ターゲットにはApplication Serverを選択します。 この手順を繰り返して登録していくのですが、Newを選ぶ前に、Web Componentsをクリックすることを忘れないでください。でないと、前に作ったコンポーネントの下に、新しいコンポーネントが生成されてしまいます。まぁ、間違えてもドラッグして移動すれば問題ないのですが、時々、どこに生成されたかわからなくなってしまうことがありますので。 ――――データベースなどの定義 4.5版ではOpenBase Liteを使用しましたが、今回はOpenBaseSQLのversion 7を使用します。OpenBaseManagerを起動し、"SimpleBoard2"という名称のデータベースを作成します。encodingには私はEUC Japaneseを指定しましたが、Shift JISやJISでも問題ありません。これまでのOpenBaseで何かと設定に苦労させられた日本語エンコーディングもversion 7ではかなり安定しています。なお、データベースそのものの定義は必要ありません。あとでEOModelerを使って定義しますので。 ――――EOModelを作る WO 4.5で作成したEOModelファイルをWO 5で開こうとすると、エラーになります(ならない環境もあるようですが)。ので、ここでは、新規にEOModelを定義しなおします。 まず、EOModelerを起動します。Newを選び、JDBCアダプタを指定し、URLにjdbc:openbase://127.0.0.1/SimpleOrder2を設定し、Finishボタンをクリックします。これで空のEOModelが出来上がりましたので、ここで一度保存します。Saveを選んで、SimpleBoard2のプロジェクトディレクトリ直下に保存します。WO 4.5では、この時、「モデルをプロジェクトに登録しますか?」というダイアログが出て、この場で登録することができたのですが、WO 5.0では手動で登録する必要があります。 ProjectBuilderでResourcesをクリックし、プロジェクトメニューから「ファイルを追加」を選び、さきほど保存したSimpleBoard2.eomodeldを選びます。次に表示されるダイアログで、参照スタイルを「プロジェクトを基準」、タイトルを「Application Server」に指定します。 さて、WO 5のEOModelerには、新しく作ったeomodeldファイル再度開こうとするとエラーが出てしまって開くことができないというバグがあります。ので、一度EOModelerを終了させてから、SimpleOrder2.eomodeldディレクトリの中のindex.eomodeldファイルをエディタなどで開き、12行目を IDENTIFIER_QUOTE_STRING = "\x80""; から IDENTIFIER_QUOTE_STRING = "\""; に変更します。これで、無事、開けるようになりますので、Modelを定義します。なお、サンプルではWO 4.5版とはAttributeの名称が一部異なりますのでご注意ください。また、4.5ではEOGenericRecordを使っていましたが、今回はCustom EOを作ります。Add EntityでEntityを追加し、Entity名などを入力していきますが、Entity名、Table名、クラス名を、すべて同じものにします(前回は、クラス名はEOGenericRecordのままでした)。 custom eoのためのソースを生成するには、EOModeler上のSimpleBoard2アイコン(Modelアイコン)をクリックした状態で、Javaボタンをクリックします。するとソースが生成されますので、SimpleBoard2のプロジェクトディレクトリ直下に保存します。 生成したソースをProjectに登録します。ProjectBuilderでClassesグループを選んでおいてから、プロジェクトメニューから「ファイルを追加」を選び、Board.javaを選択します。先ほどEOModelを登録した時と同様に、参照スタイルを「プロジェクトを基準」、タイトルを「Application Server」に指定します。同じ手順をMessage.javaでも行います。 ――――ソースの移植 JavaソースはWO 4.5のソースをcopy&pasteして、5.0との相違点(日本語化コード、コンストラクタのパラメータ、NSGregorianDateをNSTimestampに変更、など)を修正します。 また、4.5版ではEOEnterpriseObjectを使っていましたが、今回はcustom eoを使っています。そのままでも動きますが、せっかくなのでEOEnterpriseObjectで定義されている部分を各クラスに変更し、takeValueForKey/valueForKeyをアクセサメソッドに置き換え、不要になったキャストを消します。 例えば、 String title = (String)eo.valueForKey("title"); と書いてあったものは String title = eo.title(); となりますし、 eo.takeValueForKey(new NSGregorianDate(), "updated"); は、 eo.setUpdated(new NSTimestamp()); と書き直します。一見して、コーディング量がかなり減るのがおわかりかと思います。実は今回、まったく"custom"なことはしていないのですが、コーディング量が減ることで開発効率はかなり上がります。また、valueForKey/takeValueForKey(key-valueコーディング)では、attribute名が文字列定数で与えられますので、attributeを間違えたとしても、コンパイルを通ってしまい実行するまでエラーがわかりませんが、custom eoはアクセサメソッドですのでコンパイル時点でエラーが表示されます。"custom"でなくても、十分メリットがあることがおわかりいただけますでしょうか。 (この項、続く) [倉橋浩一/テクニカル・ピット] | |
関連リンク | WebObjectsのページ |