Quantcast
Channel: ソフラボの技術ブログ
Viewing all articles
Browse latest Browse all 166

GlassFish3.1.2.2でPostgreSQLのデータソースを設定する方法

$
0
0

以前にGlassFish3でアプリをデプロイした後、JDBCドライバーが見つからないときの対処 - Webサービスで起業を目指すプログラマーblogという記事を書きました。


アプリを再デプロイするとJDBCドライバーが見つからなくなる現象が発生し、アプリにドライバーを含めることで解決すると書きました。


この状態で運用していたのですが、アプリを再デプロイするたびにドライバーがないとエラーになり、GlassFishの再起動をしないといけなくなりました。結局解決していなかったようです。


毎回こんな作業したくないので、今回徹底的に調べました。
結果的に、GlassFishでのPostgreSQLのデータソースの設定が誤っていたのが原因でした。

環境

OSCentOS 6.4 x64
DBPostgreSQL 9.3
GlassFish3.1.2.2

手順

1.PostgreSQLJDBCドライバーを公式サイトより取得します
http://jdbc.postgresql.org/download/postgresql-9.3-1100.jdbc4.jar

# wgetが使える場合直接ダウンロード
wget http://jdbc.postgresql.org/download/postgresql-9.3-1100.jdbc4.jar

各環境に応じたドライバーは以下を参照してください
http://jdbc.postgresql.org/download.html


2.PostgreSQLJDBCドライバーをGlassFishのlibディレクトリに配置します

/usr/local/glassfish3/glassfish/domains/domain1/lib/ext
※ GlassFishのインストルディレクトリは環境に合わせて変更して下さい


3.GlassFishのコンソールを開きます。

http://localhost:4848
※ ホスト名は環境に合わせて変更して下さい


4.左のメニューより「リソース」→「JDBC」→「JDBC接続プール」を選択し、右側にある「新規」ボタンをクリックして接続プールを新規で作成します
f:id:shinsuke789:20140108154414p:plain


5.ステップ1で以下のように入力し「次」をクリックします
f:id:shinsuke789:20140108154427p:plain

プール名好きな名前
リソースタイプjavax.sql.DataSource
データベース・ドライバーのベンダーPostgresql


6.ステップ2で以下のように入力します
f:id:shinsuke789:20140108154437p:plain
データソース・クラス名のプルダウン下のテキストボックスに入力する

データソース・クラス名org.postgresql.ds.PGPoolingDataSource


7.続いて画面下部にある追加プロパティで以下の5項目を残し、それ以外の項目を全て削除します。終わったら「終了」をクリックします
f:id:shinsuke789:20140108154447p:plain

ServerNameサーバーのIP等
PortNumber5432 (default)
DatabaseNameデータベース名
UserユーザーID
Passwordパスワード


8.GlassFishを再起動します

# 通常
/usr/local/glassfish3/bin/asadmin restart-domain

# chkconfigに登録されている場合
service glassfish restart

PostgreSQLの接続プールとデータソース

PostgreSQLのデータソースのクラスは以下の2種類があり、プール処理の対応に違いがあります。

プール処理実装クラス
なしorg.postgresql.ds.PGSimpleDataSource
ありorg.postgresql.ds.PGPoolingDataSource

GlassFishでウィザードに従ってデータソースを作成すると「PGSimpleDataSource」が選択されます。
設定が初めてだと全くわかりません。


今回の現象は、「PGSimpleDataSource」クラスを使用してDBに接続していたので、
アプリの再デプロイ等が発生すると、コネクションプールの扱いがおかしくなっていたように思います。
そもそもプールには対応していないクラスですから、エラーが発生してもおかしくないですね。


Viewing all articles
Browse latest Browse all 166

Latest Images

Trending Articles