公開サーバのスクリプトからはDBも使える様にしたい。
1ユーザ=1スキーマでやるとするとDerbyでは心許ないので postgre を使う事に。

とりあえず ports に有った最新版は 8.4 たっだのでこれを使う。

# cd /usr/ports/databases/postgresql84-server
# make install


インストールできたらDBの初期化と開始。

> export PGDATA=$HOME/pgdata
> initdb
> pg_ctl start


テストユーザとテストスキーマの作成。

> createuser -P test
Password: ****
agein: ****
> createdb --owner test test


postgre用のJDBCドライバをダウンロードしておく。
- http://jdbc.postgresql.org/download.html
- 今回は JDBC3 Postgresql Driver, Version 8.4-701 を選択。
- postgresql-8.4-701.jdbc3.jar を lib に入れて置く。

jetty への DataSource の登録。
- WEB-INF/web-jetty.xml に設定を追加する。
- パラメータは DataSource の実装毎に違うので用注意。
-- http://siisise.net/pgsql/jdbc.html

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE Configure PUBLIC '-//Mort Bay Consulting//DTD Configure//EN' 'http://jetty.mortbay.org/configure.dtd'>
<Configure class='org.mortbay.jetty.webapp.WebAppContext'>
<Set name='war'><SystemProperty name='jetty.home' default='.'/>/webapps/wsjs</Set>
<Set name='contextPath'>/wsjs</Set>

<New id='jdbc/test' class='org.mortbay.jetty.plus.naming.Resource'>
<Arg>jdbc/test</Arg>
<Arg>
<New class='org.postgresql.jdbc3.Jdbc3PoolingDataSource'>
<Set name='serverName'>localhost</Set>
<Set name='databaseName'>test</Set>
<Set name='user'>test</Set>
<Set name='password'>****</Set>
</New>
</Arg>
</New>
</Configure>





動作確認。

function doGet(req, res) {
var conn = __ENV__.getDBConnection("jdbc/test");
res.writer.write(conn.toString());
conn.close();
}


実行すると正しく取れている。

Pooled connection wrapping physical connection org.postgresql.jdbc3.Jdbc3Connection@1c41e49


WSJSにJNDIアクセス制限の機能追加。
- これで /home/${user}/** のファイル以外からは jdbc/${user} にはアクセスできない。

config.permitJNDI = [
["jdbc/${user}", "${user}"],
];


と、ここまでは良かったのだが Derby 用に作ったデモが全然動かない。
SQLが結構違うみたいだ.. orz
いい加減 SQL は互換性を取ってくれ..