第8回 J2EEのトランザクション処理

丸山不二夫
稚内北星学園大学学長
(http://www.wakhok.ac.jp/)
2002/3/14

 コンピューティングにおける
  トランザクションの必要性


 

 コンピュータに対する意識の変化

 この10年で、これまでコンピュータには無縁だった膨大な数の人たちが、新たにコンピュータとネットワークに日常的に触れるようになりました。マシンのスピードとネットワークのスピードが速くなるにつれて、それまでの「食わず嫌い」から、コンピュータは、あっという間に何でも答を出してくれる便利なものだと、IT技術に好印象を持つ人が増えているのは確かです。われわれ、コンピュータで仕事をしている人種にとっては、こうした意識の変化は歓迎すべきことです。

 一方では、「PCはフリーズすることがある」「ネットワークはつながらないことがある」という経験をだれもが持つようになりました。そしてコンピュータを知らない人の間に根強かった「コンピュータは間違いがない」という「コンピュータ神話」を信じる人は、あまりいなくなりました。これも当然の変化だと思います(皆さんの「仕事」もこうした「認識」に「貢献」してきませんでしたか?)

 

 プログラマのスキル

 こうした議論は、いわば大衆的な意識レベルを問題にしているのですが、問題はコンピュータを仕事にしている人の意識の変化です。この点では、第1に社会的なニーズが広がる中で、いままでになかった規模で多くの人がプログラムを作るようになっていること、第2にこうしたいわば、「プログラマーの大衆化」がマシン性能が飛躍的に向上する中で進んでいることに注意が必要だと思います。

 もちろん、立派なコードを書いている若いプロのプログラマーも、しっかり存在しているのですが、1世代前のプログラマーと比べて、エラーに強い、頑丈なプログラムを作ることへの関心が少し弱くなっているような気がします。正確にいえば、そうしたことを気にしなくてもプログラムが動いてしまうということかもしれません。

 典型的なのは、WebにおけるCGIを使ったプログラムだと思います。だれにでも比較的簡単に作れるのですが、いまのPCのパワーとネットワークのスピードを使えば一昔前のオンライン用の大型機を量的にはるかにしのぐ処理が可能になります。こうして、わずかの経験しか持たないプログラマーでも、1日に数万のアクセス処理を行うプログラムを作ることができてしまうのです。1世代前には、1、2年の経験しか持たないプログラマーが、1日数万規模のトランザクションを処理するプログラムを作ることはなかったと思います。基本的には、マシン性能の量的拡大とプログラミングスキルの質の向上との間に、溝が生まれているのではないでしょうか? ここには、落とし穴はないのでしょうか?

 

 ネットワーク・プログラミングの問題

 これは若い人だけの問題ではないかもしれません。僕たちコンピュータを教える側の問題もあるでしょう。内容的には、いくつかの問題があるのではと考えています。その1つは、現在では、ネットワーク上のプログラムが一般的になっているのですが、ネットワークを利用したプログラムの信頼性にはどのような問題があるのかが、十分に意識されていないことだと思います。

 こうした問題については、僕の知る限りでは、Jim Waldo氏らの1994年の論文、「A Note on Distributed Computing」(http://research.sun.com/techrep/1994/smli_tr-94-29.pdf)が古典的な解明を与えています。そこでの次のような指摘は、現在でも有効だと私は考えています。

「ネットワーク上の分散オブジェクト間の相互作用と、ローカルなマシン内の非分散的なオブジェクト間の相互作用との間には、根本的な違いが存在している。さらに言うなら、こうした違いを無視、ないしは否定するようなモデルに基づいた分散オブジェクト指向の仕事は、失敗するように運命づけられている。こうした失敗は、産業界が全体として分散オブジェクトに基づいたシステムという概念を拒絶するという事態を、容易にもたらしかねない危険がある」

 この論文は、直接には、分散オブジェクト・プログラミングについて論じているのですが、ネットワーク上のプログラムについては、基本的には、同じ問題があるという認識が必要だと私は考えています。

 

 トランザクション処理の必要性

 今回のテーマであるトランザクション処理も、大規模なアプリケーションを開発する際には、ぜひ身に付けておいてほしいプログラミング技術の1つです。残念ながらWeb上のアプリケーションの中には、ほとんどトランザクション処理を考えていないものもあるようです。ローカルなデータベースの読み書きでもトランザクション処理は大事なのですが、先に見た、ネットワーク・プログラミングの問題と結び付くと、トランザクション処理の必要性は、もっと高まります。ネットワーク上の分散トランザクション処理というのは、実は、なかなか面倒で厄介なものなのですが、ここでは、非常に単純化した形でトランザクション処理の必要性を説明してみたいと思います。

 
1/5

J2EEの基礎(第8回)
コンピューティングにおけるトランザクションの必要性
  トランザクションの基礎を知る
  J2EEのトランザクション
  トランザクション属性の特長
  トランザクション属性

連載内容
J2EEの基礎
  第1回 Java Pet Storeで、J2EEを体験する(1)
  第2回 Java Pet Storeで、J2EEを体験する(2)
 

第3回 J2EEアプリケーションと配置(deployment)

  第4回 J2EEアプリケーションを構成するコンポーネント
  第5回 データベースのブラウザを作る
  第6回 EJBにおけるコンテナとコンポーネント
  第7回 J2EEのセキュリティのキホンを知る
第8回 J2EEのトランザクション処理


連載記事一覧




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間