- PR -

連番取得・データ登録方法について

1
投稿者投稿内容
shimtes
常連さん
会議室デビュー日: 2004/09/09
投稿数: 40
投稿日時: 2004-11-18 15:17
Tomcat4.1.27を利用してWebプログラミングを行っております。

現在、JavaBeansにてあるメソッドの中で以下の処理を行っています。
1.DBにアクセス
2.NOカラムより連番取得のためNOカラムの最大値を取得
3.最大値+1で新データを登録

プログラム内でスレッドは利用していないのですが、2-3の処理の間に他の
クライアントよりデータ更新されるようなことはあるのでしょうか。
synchronizedを利用してブロックする等の処理が必要でしょうか。

JavaBeansが同時に利用される際の動作を理解出来ておりません。
初歩的な質問で申し訳ありませんがアドバイスを頂ければありがたいです。
よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-11-18 15:26
特別スレッドを使わなくても、サーブレットはマルチスレッドで動きますので排他処理は
必要ですね。Javaの機構を使うかDBの機構を使うかは設計しだいです。
影フリー
常連さん
会議室デビュー日: 2004/11/12
投稿数: 39
お住まい・勤務地: 東京都
投稿日時: 2004-11-18 15:33
多分、DB側で処理したほうがよいですね。(上記の条件なら)
NOカラムをAUTO_INCREMENTに指定すれば(最大値+1)は要らなくなります。
例)Mysqlの場合
no int(10) AUTO_INCREMENT default '0',

[ メッセージ編集済み 編集者: 影フリー 編集日時 2004-11-18 15:34 ]
shimtes
常連さん
会議室デビュー日: 2004/09/09
投稿数: 40
投稿日時: 2004-11-18 16:03
ukさん、影フリーさん、アドバイスありがとうございます。

疑問点が解消されました。

現在利用しているDBはオラクルです。
なので、
・sequenceを利用
・プログラム上でsynchronizedブロックを利用

辺りでしょうか。
複数クライアントより更新・登録を行う処理は多々あるので、ちょっと検討してみます。
ありがとうございました。
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-11-18 16:31
Oracleのsequenceを利用するのであれば
synchronizedは必要ないのではないでしょうか。

一発で更新+採番取得ができますし。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-11-18 16:42
一般的にはデータベースのシーケンスを使いますね。
スレッドセーフであるかどうか気にする必要もないし、APサーバのクラスタ化にも対応できます。
shimtes
常連さん
会議室デビュー日: 2004/09/09
投稿数: 40
投稿日時: 2004-11-18 18:31
(株)ぽちさん、インギさんアドバイスありがとうございます。

sequenceについて出来る限り利用していきたいと思います。
採番ルールが複雑な物についてはちょっと考えてみたいと思います。
1

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