前回は、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"?--> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <include path="jdbc.dicon"/> <include path="s2jdbc-internal.dicon"/> <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"> <property name="maxRows">0</property> <property name="fetchSize">0</property> <property name="queryTimeout">0</property> <property name="dialect">postgreDialect</property> </component> </components>
続いて、「/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-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が設定されているみたいだ。
とりあえず、うまくいってよかった。
コメント