2009/12/03
Jetty+PostgreSQLの設定
公開サーバのスクリプトからはDBも使える様にしたい。
1ユーザ=1スキーマでやるとするとDerbyでは心許ないので postgre を使う事に。
とりあえず ports に有った最新版は 8.4 たっだのでこれを使う。
インストールできたらDBの初期化と開始。
テストユーザとテストスキーマの作成。
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
動作確認。
実行すると正しく取れている。
WSJSにJNDIアクセス制限の機能追加。
- これで /home/${user}/** のファイル以外からは jdbc/${user} にはアクセスできない。
と、ここまでは良かったのだが Derby 用に作ったデモが全然動かない。
SQLが結構違うみたいだ.. orz
いい加減 SQL は互換性を取ってくれ..
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 は互換性を取ってくれ..
この投稿へのコメント

コメント・フォーム