Java(Seasar2)-S2JDBC(S2JDBC-Gen)でPostgreSQLを使用する

Javaプログラミング
この記事は約7分で読めます。

前回は、Java(Seasar2)-SAStruts、S2JDBCの開発環境構築手順について書き、Doltengプラグインでプロジェクトを生成しました。

前回の記事はこちら⇒EclipseのJava(Seasar2)-SAStruts、S2JDBC開発環境構築手順

今回は、「S2JDBC」をもう少し触ってみようと思います。

Java(Seasar2)の「S2JDBC」は、DBのアクセスとJavaオブジェクトの変換を行うO/Rマッピングのフレームワーク。

S2JDBC-Gen」という「S2JDBC」を使用した開発をサポートするツールがあり、こいつがなかなか便利で、データベースの実テーブルからエンティティクラス・サービスクラス・DLLを自動生成し、マイグレーション・ロールバックを行うことができるのです。

まあとりあえず少し触ってみる。

なお、今回のバージョンは以下です。

  • Windows 7 Professional SP1(32bit)
  • Eclipse 4.2 Juno
  • JDK 7u15
  • Apache Tomcat 7.0.35
  • PostgreSQL 9.2

S2JDBCの設定ファイルの編集

S2JDBCでは、データベースに関する設定ファイルが「s2jdbc.dicon」、「jdbc.dicon」の2つ。

どちらも有名どころのデータベースに関する記述例が用意されているので、そのコメントアウトを外し、自分の環境用に修正して使えばOK。

まずは、「/sample/src/main/resources/s2jdbc.dicon」。

<!--?xml version="1.0" encoding="UTF-8"?-->

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd"&gt;
&lt;components&gt;
&lt;include path="jdbc.dicon"/&gt;
&lt;include path="s2jdbc-internal.dicon"/&gt;
&lt;component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"&gt;
&lt;property name="maxRows"&gt;0&lt;/property&gt;
&lt;property name="fetchSize"&gt;0&lt;/property&gt;
&lt;property name="queryTimeout"&gt;0&lt;/property&gt;
&lt;property name="dialect"&gt;postgreDialect&lt;/property&gt;
&lt;/component&gt;
&lt;/components&gt;

続いて、「/sample/src/main/resources/jdbc.dicon」。

<!--?xml version="1.0" encoding="UTF-8"?-->

<components namespace="jdbc">
<include path="jta.dicon"></include></components>

<!-- for PostgreSQL -->
<component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
		<property name="driverClassName">
			"org.postgresql.Driver"
        </property>
        <property name="URL">
          "jdbc:postgresql://localhost/sample_development"
        </property>
        <property name="user">"sample"</property>
        <property name="password">"sample"</property>
    </component>

<component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
		<property name="timeout">600</property>
		<property name="maxPoolSize">10</property>
		<property name="allowLocalTx">true</property>
		<destroymethod name="close">
</destroymethod></component>

<component name="DataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"></component>

PostgreSQLのJDBCドライバのダウンロードとJar追加

S2JDBCでは、PostgreSQLのJDBCドライバは用意されていないため、自分でダウンロードして設定してやる必要がある。

PostgreSQL JDBCドライバ公式サイトより、JDBCドライバをダウンロードする。

PostgreSQLとJDKのバージョンによってドライバが異なるので注意。

今回は、「PostgreSQL 9.2」と「JDK 1.7」の為、「9.2-1004 JDBC 41」である。

ダウンロードしたファイルは「postgresql-9.2-1004.jdbc41.jar」。

「ナビゲーター」、「プロジェクトエクスプローラー」、「パッケージエクスプローラー」上のプロジェクトを右クリック⇒「プロパティ」を開く。

左側で「Javaのビルド・パス」を開く。

「ライブラリー」タブで「外部Jar追加」ボタンで、ダウンロードしたJDBCドライバ(Jarファイル)を指定し、追加する。

これで、PostgreSQLへ接続できるはず…だったが、以下のように「org.postgresql.Driver」クラスが見つからないというエラーに。

原因は、「/sample/src/main/webapp/WEB-INF/lib」に追加したJarファイルがないため。

なぜないのかはいまいち不明だが、コピーしたら動いたから詳細追求は後回し。

Caused by: org.seasar.framework.exception.ClassNotFoundRuntimeException: [ESSR0044]クラスが見つかりませんでした。詳細はjava.lang.ClassNotFoundException: org.postgresql.Driver
Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver

S2JDBC-Genを使用して自動生成

ここまでの設定で、S2JDBC(S2JDBC-Gen)でPostgreSQLを使用する為の準備が整った。

今回はDoltengプラグインを使用してプロジェクトを生成したので、S2JDBC-Genを使用するための「s2jdbc-gen-build.xml」ファイルがプロジェクト直下にあるはずだ。

S2JDBC-Genはこのファイルを使用し、Antビルドすることで、エンティティクラスなどの自動生成を行うことができる。

流れは以下のよう。

S2JDBC-Gen概要

実行の仕方は、「ナビゲーター」、「プロジェクトエクスプローラー」、「パッケージエクスプローラー」上の「s2jdbc-gen-build.xml」ファイルを右クリック⇒「外部ツールの構成」を開く。

左側の「Ant」⇒「sample s2jdbc-gen-build.xml」を選択し、右側の「ターゲット」タブで実行する以下の機能を選択し、「実行」ボタンで実行できる。

  • 「gen-entity」…実テーブルからエンティティクラス・サービスクラスの自動生成
  • 「gen-ddl」…実テーブルからDDLの自動生成
  • 「migrate」…DDLを使用して、データベーススキーマを再作成
  • 「rollback」…バージョンを戻す
  • 「dump」…CSV形式のダンプデータを生成

実際にやってみた。

まずは、データベースに実テーブルを作成し、データ登録してみる。

C:>psql -U sample -d sample_development
ユーザ sample のパスワード:
psql (9.2.4)
"help" でヘルプを表示します.

cm_development=# CREATE TABLE SAMPLE (
cm_development=# SAMPLE_CD VARCHAR(8) NOT NULL,
cm_development=# SAMPLE_NAME VARCHAR(20) NOT NULL,
cm_development=# CONSTRAINT SAMPLE PRIMARY KEY (SAMPLE_CD));
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"sample"に暗黙的なインデックス"sample_pkey"を作成します
CREATE TABLE

cm_development=# INSERT INTO SAMPLE VALUES (12345678, 'TEST');
INSERT 0 1

続いて、実テーブルからエンティティクラスを生成する。

「ナビゲーター」、「プロジェクトエクスプローラー」、「パッケージエクスプローラー」上の「s2jdbc-gen-build.xml」ファイルを右クリック⇒「外部ツールの構成」を開き、「ターゲット」タブで「gen-entity」にチェックし、実行する。

そうすると、「entity」、「service」にソースが自動生成されている。

さらに同様に、「ナビゲーター」、「プロジェクトエクスプローラー」、「パッケージエクスプローラー」上の「s2jdbc-gen-build.xml」ファイルを右クリック⇒「外部ツールの構成」を開き、「ターゲット」タブで「gen-ddl」にチェックし、実行する。

そうすると、プロジェクト直下の「/sample/db/migrate/バージョンNo/」にDDLが自動生成されている。

「/sample/db/ddl-info.txt」には現在のバージョンNoが設定されているみたいだ。

とりあえず、うまくいってよかった。

参考サイト

Seasar2 – S2JDBC-Gen – S2JDBC-Genとは

プログラミング
えふめん

大阪在住、30代。
業務系SE・社内SEの仕事を通じて学んだこと、PCトラブルで困って調べたこと、手作業を効率化して改善したこと、WordPressのブログ運営などの記事を書いています。

えふめんをフォローする
\よかったらシェアしてね/
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
俺の開発研究所

コメント

タイトルとURLをコピーしました