- PR -

EJBでのシーケンス用カラムの扱い

1
投稿者投稿内容
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-09-19 11:39
こんにちは。早速ですが質問に移らせて頂きます。
現在、EJBの勉強を始めたばかりで分からないことがあります。

会員登録機能のようなものを作る場合、DBに
テーブル:MEMBER
カラム:ID(プライマリキー)、NAME
と用意したとします。
流れとしては、
1.会員新規登録画面で名前を入力し、新規登録ボタンを実行
2.受け取ったサーブレット(アクション)で、CMPを生成
3.CMPが自動的にDBにレコード追加
4.正常登録終了を知らせる画面
となるのかな、と考えています。

ここで、2では、プライマリーキーを引数に取るcreateメソッドを発行して、
EntityBeanの生成を行いたいのですが、IDをシーケンスとして振りたい場合
(1,2,3........と自動的にインクリメントされるように)、どのように新規登録会員のIDを取得したら良いのでしょうか?
自分なりに考えてみたのですが、次の方法しか思い浮かびませんでした。
「上記1で会員新規登録画面を開くタイミングでDBにアクセスして、現在のMAXのIDを取得しておき、その値に1を加算したものを今回登録する会員のIDとしてセットする」

何か他に、EJBやアプリケーションサーバ特有の機能を用いた実装方法があるのでしょうか?

EJBを使わない、直接SQLを書く方法だったらすぐ思いつくのですけど・・・。

私の環境はMySQLとJBossです。
他の環境でも参考になると思いますので、何かありましたらお願いします。

以上、ご指導よろしくお願い致します。

以下追記です。
------
新しいIDの生成タイミングですが、EntityBeanのcreateメソッド内で生成する方がいいのかなと思いました。
定石等ありましたら、ご教授ください。


[ メッセージ編集済み 編集者: taiping 編集日時 2004-09-19 12:50 ]
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-09-19 14:41
EJB デザインパターンに主キー生成方法に関するパターンが3つ紹介されています。

  • Sequence Blocks
  • UUID for EJB
  • Stored Procedures for Autogenerated Keys

参考にしてみて下さい。
英文になりますが、ここで立ち読みできます。
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2004-09-19 17:19
ご返信、ありがとうございます。
英文の方でSequence Blocksを使ってみようと思い、実装がどうなっているのか分からなかったので、本屋へ行って紹介していただいた本を見たら、サンプルコードが載っていました。
ソースを覚えようとしたんですが・・・・・・無理だったんで買ってきました。
これからこの本を参考に実装してみます。
どうもありがとうございました。

(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-09-21 11:18
こんにちわ。

私もEJBを使用した際、その辺で悩みました。

デザパタで挙げられている内容はどれも実装が
めんどくさいですが、なぜわざわざそんなこと
せにゃいかんのかと思っていました。

おそらく、コンポーネント性の確保というのが
原因なんだと思いますが、手間がかかりますよね。

私の場合は、シーケンス作成用EJBを一個作って
DB(Oracle)からシーケンスIDを取得して返すなど
しちゃってましたが、この場合EJBがOracle依存
になります。

また、各種ApServer(WebLogicとか)でもEJBを使用
する際のシーケンス取得機能みたいのが備わって
いるのでそちらを使用することも可能です。
しかし、この場合もまたApServer依存になります。
1

スキルアップ/キャリアアップ(JOB@IT)