- - PR -
連番取得・データ登録方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-11-18 15:17
Tomcat4.1.27を利用してWebプログラミングを行っております。
現在、JavaBeansにてあるメソッドの中で以下の処理を行っています。 1.DBにアクセス 2.NOカラムより連番取得のためNOカラムの最大値を取得 3.最大値+1で新データを登録 プログラム内でスレッドは利用していないのですが、2-3の処理の間に他の クライアントよりデータ更新されるようなことはあるのでしょうか。 synchronizedを利用してブロックする等の処理が必要でしょうか。 JavaBeansが同時に利用される際の動作を理解出来ておりません。 初歩的な質問で申し訳ありませんがアドバイスを頂ければありがたいです。 よろしくお願いします。 |
|
投稿日時: 2004-11-18 15:26
特別スレッドを使わなくても、サーブレットはマルチスレッドで動きますので排他処理は
必要ですね。Javaの機構を使うかDBの機構を使うかは設計しだいです。 |
|
投稿日時: 2004-11-18 15:33
多分、DB側で処理したほうがよいですね。(上記の条件なら)
NOカラムをAUTO_INCREMENTに指定すれば(最大値+1)は要らなくなります。 例)Mysqlの場合 no int(10) AUTO_INCREMENT default '0', [ メッセージ編集済み 編集者: 影フリー 編集日時 2004-11-18 15:34 ] |
|
投稿日時: 2004-11-18 16:03
ukさん、影フリーさん、アドバイスありがとうございます。
疑問点が解消されました。 現在利用しているDBはオラクルです。 なので、 ・sequenceを利用 ・プログラム上でsynchronizedブロックを利用 辺りでしょうか。 複数クライアントより更新・登録を行う処理は多々あるので、ちょっと検討してみます。 ありがとうございました。 |
|
投稿日時: 2004-11-18 16:31
Oracleのsequenceを利用するのであれば
synchronizedは必要ないのではないでしょうか。 一発で更新+採番取得ができますし。 |
|
投稿日時: 2004-11-18 16:42
一般的にはデータベースのシーケンスを使いますね。
スレッドセーフであるかどうか気にする必要もないし、APサーバのクラスタ化にも対応できます。 |
|
投稿日時: 2004-11-18 18:31
(株)ぽちさん、インギさんアドバイスありがとうございます。
sequenceについて出来る限り利用していきたいと思います。 採番ルールが複雑な物についてはちょっと考えてみたいと思います。 |
1