システムリリース用WARファイルの作成
ここまでの作業で、記事の管理ツールができ上がりました。まだ掲示板システムとしては完成していませんが、このプロジェクトを使用して、リリース用のWARファイルを作る手順を説明します。
データベーステーブルの自動作成
「OSSフレームワーク「dataforms.jar」でサンプルプログラムを構築する(1)」でプロジェクトを作成した際、初回のアクセスで開発者のパスワードを登録しました。このタイミングでdataforms.jarが使用する最低限のテーブルが作成され、初期データが設定されます。この自動作成の対象になるテーブルは、dataforms.appパッケージ内のテーブルになります。
今回の作業で、bbsパッケージ内に2つのテーブルクラスを作成しました。しかし、この2つのテーブルは自動作成対象になっていません。bbsパッケージ内のテーブルを自動作成するようにするには、web.xmlに以下の設定を記述します。
<!-- データベースの作成時に、初期化するパッケージリストを指定します。 パッケージ名は,区切りで複数設定することができます。 データベースを作成するときに、このパッケージリストを参照し、このパッケージ中のテーブルクラスに対応するテーブルを作成します。 なおdataforms.appパッケージは必ず指定してください。 --> <context-param> <param-name>initialize-package-list</param-name> <param-value> dataforms.app ,bbs </param-value> </context-param>
初期化データの自動登録設定
今回の開発で、列挙型関連テーブルにファイルタイプのデータを登録しました。また機能を登録すると、func_infoというテーブルにその内容が追加されます。データベースの初期化処理の際に、これらのデータをインポートしないとシステムが動作するようになりません。この初期化用のデータを作成するには[開発ツール/テーブル管理]を使用します。
今回はdataforms.appパッケージ内のテーブルにデータを追加しただけなので、[機能]に“/dataforms/app”を指定してテーブルを検索し、ユーザ関連以外のテーブルをチェックし[初期化データとしてエクスポート]ボタンを押下します。今回は必要ありませんが、仮にbssパッケージ内に初期データが必要なテーブルを作成した場合、機能に“/bbs”を指定し、必要なテーブルの初期化データをエクスポートしてください。
この操作を行うと以下のように初期化データファイルが作成されます。
サーバ側のログ設定
dataforms.jarはlog4jを使用しているので、log4j.xmlを適切に編集しサーバ側のログ出力を調整してください。
ブラウザのコンソールのログ設定
通常JavaScriptではconsole.log(message)やconsole.error(message)等を使用してコンソールログを出力します。このコンソールログはブラウザのデバッグ機能で参照できます。しかし、dataforms.jarではconsoleの代わりにloggerという変数を用意していいます。loggerの使い方はconsoleと同じですが、以下の「web.xml」の設定で各種ログ出力を無効化することができるようになっています。
システムが安定したら、以下の通りクライアントログレベルを“warn”程度に設定します。
<!-- クライアントログレベルを指定します。 JavaScriptでのコンソール出力はconsoleではなくloggerを使用してください。 loggerは基本的にconsoleをコピーしたものですが、以下の設定に応じて、 log,info,warn,errorメソッドが何もしないメソッドになります。 --> <context-param> <param-name>client-log-level</param-name> <param-value>warn</param-value> <!-- param-value>debug</param-value --> <!-- param-value>info</param-value --> <!-- param-value>warn</param-value --> <!-- param-value>error</param-value --> <!-- param-value>none</param-value --> </context-param>
開発ツールの停止
dataforms.jar中の開発ツールは、その性格上セキュリティ上の問題のあるページの集まりです。そのため、システムをインターネットに公開する場合、これらの機能は停止させたほうが安全です。開発ツールは以下の「web.xml」の設定で停止することが可能です。
<!-- 開発ツールの無効フラグを設定します。 システムリリース時には無効にしたほうが安全です。 --> <context-param> <param-name>disable-developer-tools</param-name> <param-value>true</param-value> </context-param>
WARファイルの作成
WARファイルは、Eclipseのエクスポート機能で作成します。プロジェクトを右ボタンクリックし、[エクスポート]→[WARファイル]と選択します。以下のダイアログが表示されるのでWARファイル名を指定して、[完了]ボタンを押下してください。
Webアプリケーションのリリースパッケージは、複雑なデータベース構築手順のマニュアルがセットになっているケースがあります。マニュアルがあればまだよいのですが、開発段階で試行錯誤してでき上がったデータベースを、そのまま本番運用で使用しているようなケースも存在します。その場合、仮にマニュアルが存在したとしても、その精度はかなり低いものになります。このようなシステムでも、無事システムの運用が始まれば問題なく開発完了ということになり開発チームは解散してしまいます。
数年間運用した後、こういったシステムをバージョンアップすることになったとします。この場合、現状の仕様を確認するためのテストサーバや開発環境の構築に、予想外の手間がかかります。マニュアルに不備があり、かつ当初の開発チームに連絡が取れない場合などは大変な作業になります。「本番のデータベースをもらってくればよいのでは?」と思われるかもしれませんが、セキュリティを考慮すると避けるべきです。お客さまに確認しながら個人情報をマスクしたデータを作って、持ち出したケースもありました。当然、マスクデータを作るのにはそれなりの手間がかかります。そのため、データベースの構築手順は可能な限り単純であるべきだと思っています。
dataforms.jarを使用すると、初期処理でテーブルの構築と初期データの設定を行うようなアプリケーションを簡単に作ることができます。今回作成したWARファイルの中には、テーブルの構築と初期データの設定処理が入っています。そのため、デプロイ前にテーブル構築のスクリプトを実行したり、初期データのインポートを行ったりする必要はありません。Tomcat等のアプリケーションサーバを使用する場合は、データソースの設定を行いWARファイルをデプロイするだけで動き出します。またrunwarと組み合わせれば、データベースの知識がない方でも、runwar.jarを起動するだけで、Webアプリケーションを使用することができます。さらに、ソースを含むWARファイルを作っておけば、そのWARファイルをEclipseでインポートするだけで開発環境ができ上がります。
さいごに
今回は開発の手順を確認しながらArticlePageを作成したため、Githubリポジトリのdfbbsの内容とは若干異なるコードになっています。さらに、一般のユーザが使用するBBSPageが存在しない状態です。
runwarのReleaseから「runwar_X.XX_with_dfbbs_Y.YY.zip」をダウンロードし、「runwar.jar」を実行すれば、Githubリポジトリのdfbbsが動作するようになっています。このWebアプリケーションのBBSPageを動かしてみるとわかると思いますが、「検索条件を入力するフォーム」「スレッド一覧フォーム」「スレッド内の記事一覧フォーム」「記事編集フォーム」の4種類のフォームで構成されています。この4種類のフォームの連携は、ページやフォームのJavaScriptクラスの適切なメソッドをオーバーライドして実現しています。
dfbbsはあくまでdataforms.jarのサンプルとして作成したもので、掲示板システムとして実用的なものではありません。ちょっと考えただけでも「スレッドが増えていくと、際限なくスレッドの選択肢が増えてしまう」といった問題が存在します。多くのスレッドを作りたい場合は、スレッドの指定を<select id="threadId"></select>から<input id="threadId" type="hidden"/><input id="threadName" type="text"/>に変更し、 ID:threadNameに対応するフィールドクラスで、オートコンプリートを使ってスレッド名の一覧を表示するようにします。さらに、フィールドの変更イベントで入力されたthreadNameに対応するthreadIdを取得すれば、<select id="threadId"></select>と同等の機能になり、かつ候補リストの数を抑えることができます。また、スレッド数を制限するのであれば、新規スレッドを登録できるユーザは管理者のみにしてしまえばいいでしょう。いろいろカスタマイズしてみてください。
この連載で、dataforms.jarを使った開発作業を一通り説明してきました。この連載はこれで終わりますが、dataforms.jarの開発はまだまだ続けていく予定です。この記事の執筆中にも機能強化ポイントのメモがいくつか増えました。
dataforms.jarを使えば、とりあえず動作してカスタマイズしやすいシステムを手っ取り早く作ることができます。カスタマイズのコツをつかむには多少時間がかかるかもしれませんが、それができれば素早いシステム開発ができると思います。一度試してみてください。