悲観もあれば楽観もある「トランザクション」の常識企業システムの常識をJBossで身につける(8)(4/4 ページ)

» 2010年04月22日 00時00分 公開
[上川伸彦, 出島宣寿, 原田壮士株式会社ビーブレイクシステムズ]
前のページへ 1|2|3|4       

データソースの設定を記述

 次に、データソースの設定を記述します。[XML]を選択し、[次へ]をクリックします(図10)。そして、「WebContent/WEB-INF」フォルダを選択し、以下のように設定して[次へ]をクリックします(図11)。

図10 サーバ起動中 図10 [新規XMLファイルの作成](左)と図11 新規XMLファイルの設定(右)
  • [フォルダ]sampleJTA/WebContent/WEB-INF
  • [ファイル名]sampleJTA-ds.xml

 [DTDファイルからXMLファイルを作成]を選択し、[次へ]をクリックします(図12)。そして、[XMLカタログ・エントリーの選択]を選択し、「jboss-ds_1_5.dtd」を選び、[次へ]をクリックします(図13)。

図10 サーバ起動中 図12 [DTDファイルからXMLファイルを作成]を選択(左)と図13 [DTDファイルの選択](右)

 特に変更はないので、そのまま[完了]をクリックします。

 作成されたsampleJTA-ds.xmlに下記の記述を追加します(サンプルでは、Oracleデータベースを使用していますが、必要に応じて赤枠内をお使いのDB環境設定に修正してください)。

 このサンプルは分散環境ではないため、データソースを1つしか設定していないので、ローカルトランザクションでも処理可能です(その場合は、JTAを使う必要はありません)。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources
    PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
   <local-tx-datasource>
      <jndi-name>sampleJTADatasource</jndi-name>
      <connection-url>jdbc:oracle:thin:@localhost:1521:XE</connection-url>
      <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
      <user-name>scott</user-name>
      <password>tiger</password>
   </local-tx-datasource>
</datasources>
コード3 sampleJ2EE-ds.xml

テーブルを作成

 データベースには、下記のSQLを実行して、テーブルを作成してください。

CREATE TABLE ITEM
(
 ITEM_ID NUMBER(14,0) PRIMARY KEY,
 ITEM_NAME VARCHAR2(20)
)
コード4 作成したテーブル(ITEMテーブル)
CREATE TABLE ITEM
(
 ITEM_ID NUMBER(14,0) PRIMARY KEY,
 ITEM_NAME VARCHAR2(20)
)
コード5 作成したテーブル(ITEM_ORDERテーブル)

JBoss Transactionsサンプルアプリの実行

 それでは実行してみましょう。サーバにプロジェクトを追加します。サーバを選択して右クリックして、[プロジェクトの追加および除去]を選択します。

図14 サーバから[プロジェクトの追加および除去]を選択 図14 サーバから[プロジェクトの追加および除去]を選択

 「sampleJTA」を選択して[追加]ボタンを押し、[完了]ボタンをクリックします。

図15 「sampleJTA」を選択して[追加] 図15 「sampleJTA」を選択して[追加]

 最後に、サーバを開始して、Webブラウザから「http://localhost:8080/sampleJTA/SampleServlet」にアクセスしてみてください。処理時間が表示されたらデータベースを確認してみてください。トランザクションが成功し、データが保存されているはずです。

図16 サーバを開始して、Webブラウザを起動 図16 サーバを開始して、Webブラウザを起動

 次に、トランザクションを失敗させてみましょう。2つあるINSERT処理のうち、最初のSQLのデータをデータベースから消してください(コード6)。その後、再び上記のURLを再表示してみてください。

DELETE FROM ITEM WHERE ITEM_ID = 1;
commit;
コード6

 先ほどと同じくITEMテーブルにはデータがない状態です。そのため、最初のINSERT処理は成功しますが、2つ目のINSERT処理は先ほど登録されたデータが存在するため一意制約違反でエラーになります。しかし、トランザクションでロールバックされ、どちらのテーブルにも新しいデータは登録されていないはずです。

フレームワークに頼りすぎずに

 以上、今回の連載ではトランザクションについて説明しました。

 フレームワークなどを使用すると、あまりトランザクションを意識しないでもシステム開発を進めることができる場合もありますが、必ずどのプロジェクトでもフレームワークを使用しているわけではありません。

 ここでの内容を知っておくことでデータベースやシステム開発に対する理解が深まると思います。読者の皆さんがシステム構築を行う際の助けになればと思います。

筆者紹介

株式会社ビーブレイクシステムズ技術担当取締役。

上川 伸彦(かみかわ のぶひこ)

RDB製品の開発、各種業界団体におけるXML/EDI標準の策定やSOA基盤の設計などに従事。最近は、ITコンサル業よりも、業務システムの構築に携わることが多く、お客さまからの無理難題と向き合う日々を送っている。


筆者紹介

2008年4月、株式会社ビーブレイクシステムズに入社。

出島 宣寿(でじま のりひさ)

専門分野:Webシステム開発・保守

入社以来、業務システムの開発・保守に従事し、購買業務に関しては、すでにスペシャリストの領域。社内では新入社員の研修を担当し、後輩社員から頼られる存在。


筆者紹介

2009年より、株式会社ビーブレイクシステムズに在籍

原田 壮士(はらだ そうし)

就職活動時にビーブレイクシステムズの説明会でJavaの世界に感銘を受け、入社を決意する。最近ようやく社会人としての生活にも慣れ、仕事面でもJavaやWebアプリケーションへの理解が深まってきた。

しばらくすると、次の新入社員が入ってくるため、先輩風を吹かせる練習中



前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。