Hatena::ブログ(Diary)

じょにぃの一日一善

2009-01-03

S2JDBCは複数スキーマ対応

| 02:01

今抱えている案件では、スキーマーが複数ありますので、大丈夫かなぁ、と思っていましたが、本家のサイトにしっかり追加する方法があります。メモメモ。。。

2つのスキーマーを想定し、S2JDBC-Genで一気に出力!

あら?

1つしかできないなぁ。。。


jdbc.dicon

<components namespace="jdbc">

<include path="jdbc-print.dicon"/>

<include path="jdbc-screen.dicon"/>

</components>


s2jdbc.dicon

<components>

<include path="s2jdbc-print.dicon"/>

<include path="s2jdbc-screen.dicon"/>

</components>

定義はこのように書いています。どうも、最初に書いたDiconファイルの中身のみ実行されるみたいです。

順序を変えてみると、もう1つのEntity/Service/Testクラスが出力。

本家のサイトを見ると、「tableNamePattern」をうまく使うと、いけそうな感じがします。まぁ、5つ以上のスキーマーを対応するわけではないので、順序を変えて実行できるのであれば、これはこれでOKです。もしかすると、今はOracleのExpress Editionを使っているので、起きている問題かもしれないですし、OracleとPostgresで実行すると、上手くいくかもしれないですし。これは今日の宿題にしましょう。

S2JDBC-Gen に挑戦!

| 01:41

去年のSeasar2カンファレンスSAStrutsS2JDBCセッションに参加していましたが、その時はなるほど、という感じでしか見ていませんでした。

実際に使ってみると、すごい。これだけのクラス(EntityとServriceとTest等)を自動生成してくれると、あとが非常に楽になります。

ん?

何かが違うなぁ?

テーブル名はこれです(Oracle Express Edition使用)。

CREATE TABLE "ORDER_VOUCHER"

( "ID" NUMBER(18,0) NOT NULL ENABLE,

"ACCOUNT_ID" VARCHAR2(10),

)

データベースビューでもEntityが作成できるのですね。

これで作成すると、

@Entity

@Table(name="ORDER_VOUCHER")

public class OrderVoucher {

@Id

@GeneratedValue

private Long id;

@Column(name = "ACCOUNT_ID")

private String accountId;

}

このようになり、これはテーブルとクラス名が一致しないので、アノテーションでサポートしているので、正しいでしょうね。

S2JDBC-Genで作成すると、

/**

* OrderVoucherエンティティクラス

*

* @author S2JDBC-Gen

*/

@Entity

public class OrderVoucher {

/** idプロパティ */

@Id

@Column(precision = 18, nullable = false, unique = true)

public Long id;

/** accountIdプロパティ */

@Column(length = 10, nullable = true, unique = false)

public String accountId;

}

確かにカラムの長さやNull許可の設定が自動で生成されるのはすごいです。

しかし、Entityの時のように、「_」が入っているパターンは大丈夫なのでしょうかね?

まずは、考えるよりは動かして、問題ないか、ですね。両方をドッキングすると、上手くいくような気がしますが。。。

SAStrutsしかないですね

| 01:40

昨日、電車の中で調べましたが、やはりSAStrutsははずせないですね。

時間との戦い、私以外の人が保守を担当、という事が既に明確になっていますので、

・誰にでもわかりやすいこと=学習コストが低いこと

ユースケース単位での追加機能が容易にでき、他のクラスにも影響を与えないこと=最初のフェーズですので、今後追加機能がある事は明確で、追加しやすい・既存の機能に影響を与えないこと

この条件を満たすとなると、SAStrutsです。

ネットで色々と探しました所、書籍が2月上旬に発売される予定ですし、、

@ITにも連載がありますし、HPを見てみると意外と情報がたくさんあります。

http://code.nanigac.com/source/wiki/view/597

ここのサイトが一番分かりやすいです。メモメモ(本家のサイト以外で)。。。


HTML - Mayaa - SAStruts - S2JDBC

JSP - SAStruts - S2JDBC

このどちらかでいきます。もちろん前者で行きたいですが(モック+Spryで作成したJavaScript付)、

まずはどちらに行くにしても、共通のSAStrutsS2JDBCを確認です。

その間、Mayaaについて、丁度手元にSeasar2によるサンプルという書籍があるので、勉強です。

taediumtaedium 2009/01/04 04:37 S2JDBC-Genで複数スキーマを扱うときは、ビルドファイルのjdbcmanagernameプロパティに、スキーマに対応するJdbcManager名(printJdbcManagerやscreenJdbcManagerなど)を指定して実行してもらえるとうまくいくと思います。

S2JDBC-Genは、「_」を除去してエンティティ名やプロパティ名を出力しますが、発行されるSQLには「_」が補われるので大丈夫です。

JohnnydaisukeJohnnydaisuke 2009/01/04 09:03 はじめまして。アドバイス、ありがとうございます。
S2JDBC-Genでの複数スキーマ対応、できました。エントリーに詳細を書きます。
データベースビュー→S2DAOを使用する時、S2JDBC-Gen→S2JDBCを使用する時、になると思いますので、S2DAO・S2JDBCを使用する時には対応するツールを使わないといけないですね。