2008-07-06

Jaxer.application を使って、データベースの初期化をスキップする

Jaxer におけるアプリケーション、ページ、セッションのスコープの考え方
Aptana Jaxer は、application、page、session、sessionPage という 4つのコンテナを持ち、そのコンテナごとにデータを保持できます。互いにコンテナは独立していて、データの相互関係はありません。ですので、アプリケーション、ページ、セッションを組み合わせたパターンのスコープがあると考えればよいです。
application や page のコンテナにどのようなデータを格納するのか、その使い方が思い浮かばないので、Jaxer のサンプルでの使い方を調べてみました。

Chat アプリケーション の中で、次のとおり、Jaxer.application を使っていました。Chat アプリケーションのテーブルを作成した後、初期化済みを表す isInitialized を格納し、それ以降、テーブルを作成するコードを実行しないようにしています。

(function() {

if (Jaxer.application.get("isInitialized")) return;

var sql;

sql = "CREATE TABLE IF NOT EXISTS users " +
"( id INTEGER PRIMARY KEY AUTO_INCREMENT" +
", username VARCHAR(255) NOT NULL" +
", password VARCHAR(255) NOT NULL" +
", created DATETIME NOT NULL" +
", last_login DATETIME NOT NULL" +
", UNIQUE (username)" +
")";

Jaxer.DB.execute(sql);

sql = "CREATE TABLE IF NOT EXISTS messages " +
"( id INTEGER PRIMARY KEY AUTO_INCREMENT" +
", room_id INTEGER NOT NULL" +
", sent DATETIME NOT NULL" +
", user_id INTEGER NOT NULL" +
", contents TEXT NOT NULL" +
")";

Jaxer.DB.execute(sql);

Jaxer.application.set("isInitialized", true);

})();

ただ、上のコードは、本来ならセットアップのためのページを別に用意するものだと思いますので、特別な手続きをせず、また余計なデータベースの操作しないという、あくまでもサンプルのためのコードに過ぎません。

Jaxer のサンプルからは、application や page のコンテナの明確な使い方は見出せませんでしたが、Jaxer.application を Firefox の about:config のように使ったらどうだろうというアイディアが思い浮かびました。

初期化というタイミングで、アプリケーションの設定を Jaxer.application に格納して、それ以降は Jaxer.application の値で動作させる。そして、運用者向けの設定ページを用意し、そのページで、Jaxer.application の値を変更するという使い方です。これは、どんなアプリケーションでも型にはまると思いますので、Jaxer アプリケーション向けの about:config ページを作ってみようという気になってきました。

0 件のコメント: