連載
» 2008年06月06日 00時00分 公開

Javaバッチ処理は本当に業務で“使える”の?(3):Eclipseで作る! DBを使った実践的なJavaバッチ (1/3)

[倉元貴一,株式会社NTTデータ]

今回はデータベースを利用した実践的アプリケーション

 連載第2回の「OSSのJavaバッチフレームワークでHello World!」では、オープンソースJavaバッチフレームワークの1つである「TERASOLUNA Batch Framework for Java」(以下、TERAバッチ)のアーキテクチャと機能を簡単に紹介し、HelloWorld!アプリケーションの実装を通してTERAバッチの特徴とアプリケーション作成時に必要な作業を確認しました。

編集部注:Batch Framework for Java」を含むTERASOLUNAフレームワーク全体について詳しく知りたい読者は、特集「Java、.NET、Ajax開発の“銀の弾丸”オープンソース?」をご覧ください。

 今回はデータベース(以下、DB)を利用したバッチアプリケーションの実装を通して、前回は触れなかったTERAバッチの特徴や機能について紹介します。HelloWorld!から一歩進んでTERAバッチの実践的な利用方法を学んでいきましょう。

 なお、2008年5月9日にTERAバッチのVer2.0.0.2がリリースされました。今回はVer2.0.0.2を基にアプリケーションの実装を行っていきます。

今回作成するJavaバッチ・アプリケーションの仕様

 今回作成する、DBを利用したアプリケーションの仕様は以下のとおりとします。

 1.入金テーブルから処理対象となるデータを読み込み、ビジネスロジックに渡す

表1 入金テーブルの形式
フィールド名 データ型 サイズ
ID 数値 -
顧客ID 文字列 20
入金金額 整数値 -

 2.渡された入力データの顧客IDにひも付く残高を、残高テーブルを基に算出し更新する。その際に、残高テーブルに入力データの顧客IDがない場合は新規に追加する

表2 残高テーブルの形式
フィールド名 データ型 サイズ
顧客ID 文字列 20
残高金額 整数値 -

 3.残高テーブルに対して更新した件数、新規に追加した件数をそれぞれコンソールに出力する

 処理フローを図示すると、以下のとおりとなります。

図1 今回のアプリケーションの仕様概要 図1 今回のアプリケーションの仕様概要

 また、処理前後でのテーブルの変化のイメージ、コンソール出力のイメージは以下のとおりです。

図2 処理前後でのテーブルの変化のイメージ 図2 処理前後でのテーブルの変化のイメージ
コンソール出力のイメージ
……
[INFO ] 更新件数は2です。
[INFO ] 新規追加件数は1です。
……

EclipseにJavaバッチのプロジェクトを準備

 では早速ですが、DBを利用したバッチアプリケーション作成の準備をしていきましょう。なお、開発環境の構築の際に必要となるEclipseJDKのセットアップについては、前回の「OSSのJavaバッチフレームワークでHello World!」を参考にしてください。この説明では、Windows上での開発を想定しています。

プロジェクトのインポート

 SourceForgeのサイトから、今回のアプリケーション開発の基となるブランクプロジェクトをダウンロードします。こちらからZIPファイルをダウンロードし、Eclipseの「Workspace」フォルダ配下に展開してください。このブランクプロジェクトは、通常のブランクプロジェクトに今回利用するデータベースを追加したものです。

 ブランクプロジェクトを、Eclipseにインポートします。Eclipseメニューの[ファイル]→[インポート]から、[インポート]ウィザードを開き、[一般]→[既存プロジェクトをワークスペースへ]から、[ルートディレクトリの選択]を選んで、[参照]ダイアログから、先ほど展開したブランクプロジェクトがあるWorkspaceフォルダを選択してください。プロジェクト欄に「terasoluna-batch-blank-foratmarkit03」があることを確認し、[終了]を押下します。

接続するDBの起動・確認

 次に、接続するDB(純正JavaのDBであるHSQLDBを使う)の起動・確認をします。プロジェクトに入っている「hsqldb.zip」をデスクトップなど任意のフォルダにコピー・展開し、「(任意のフォルダ)\hsqldb\terasoluna\startDBManager.bat」を実行してDBを起動します。

 続いて、正しく起動しているか確認します。「(任意のディレクトリ)\hsqldb\terasoluna\startDBManager.bat」を実行します。DBManagerが起動し、connect画面が表示されるので、以下のように入力します。

表3 入力パラメータと値
Type HSQL Database Engine Server
Driver org.hsqldb.jdbcDriver
URL jdbc:hsqldb:hsql://localhost/terasoluna
User sa
Password なし

 DBの接続後、画面左のテーブル一覧に以下があること、入金テーブル・残高テーブルの内容を確認します。

  • テーブル"NYUKINTABLE"カラム"ID"、"KOKYAKUID"、"NYUKIN"
  • テーブル"ZANDAKATABLE”、カラム"KOKYAKUID"、"ZANDAKA"
図3 処理前の残高テーブルの確認例 図3 処理前の残高テーブルの確認例

 DBは起動したままにしておいてください。ここまでで、TERAバッチを利用したアプリケーションを開発するための準備完了です。

TERAバッチ・アプリケーションの作成開始!

 では、アプリケーションを作成していきましょう。TERAバッチで必要な実装については前回ご紹介しましたが、以下に再掲します。

表4 TERAバッチで必要なソースコード(再掲)
名称/主な呼び方 概要 必須
業務入力クラス 業務処理の入力になるクラス(JavaBean) 必須
ビジネスロジッククラス 業務処理を行うクラス 必須
ジョブBean定義
ファイル
ジョブの定義を書くSpring Framework用定義ファイル 必須
iBATIS用設定
ファイル
実際のSQLを書く「SqlMap」ファイルと、利用する「SqlMap」ファイルの情報を記述する「SqlMapConfig」ファイルがある DB利用時に必須
ファイル行オブジェクト
クラス
ファイル入出力に利用。アノテーションでファイルと業務入力クラスのマッピングを記述 ファイル利用時に必須(今回は作成しない)
ジョブコンテキスト
クラス
1つのジョブの複数の処理で共通する情報を格納するクラス 任意
前処理・後処理クラス 1つのジョブの複数の処理で共通する情報を格納するクラス 任意
入力チェック定義
ファイル
ファイル・DBなどの入力データに対する入力チェックを行うときに利用 任意

 また、プロジェクトのディレクトリ構成は前回を参考にしてください。

ジョブBean定義ファイルの作成

 「ジョブBean定義ファイル」を格納するフォルダを作成します。Eclipseの[パッケージエクスプローラ]ビューで、「terasoluna-batch-blank-foratmarkit03\batchapps」フォルダを右クリックし、[新規]→[フォルダ]から「sample\UC0002」フォルダを作成してください。

 ジョブBean定義ファイルを作成します。「batchapps\sample\UC0002」フォルダ配下に、「JB0001.xml」を作成し、以下のとおり入力します。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:util="http://www.springframework.org/schema/util"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://www.springframework.org/schema/util
  
http://www.springframework.org/schema/util/spring-util-2.0.xsd">
</beans>

 ここまでは、前回と同様です。

iBATIS定義ファイルの作成

 「iBATIS定義ファイル」を作成します。iBATIS定義ファイルはデータベースを利用する際に必須となるファイルで「sqlMapファイル」「sqlMapConfigコンフィグファイル」の2つからなります。sqlMapファイルにはSQL文の定義を、sqlMapConfigファイルにはどのsqlMapファイルを利用するかについて、それぞれ記述します。

 今回は「batchapps\sample\UC0002」フォルダ配下に、「UC0002_sqlMap.xml」「UC0002_sqlMapConfig.xml」をそれぞれ作成し、以下のとおり記述します。

UC0002_sqlMap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  <sqlMap namespace="UC0002">

  </sqlMap>

UC0002_sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
  PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
  "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
  <!-- Always ensure to use the correct XML header as above! -->
  <!-- iBatisの定義 -->
  <sqlMapConfig>

    <settings useStatementNamespaces="true"/>

    <!-- サンプル用sqlMapの定義-->
    <sqlMap resource="sample/UC0002/UC0002_sqlMap.xml"/>

  </sqlMapConfig>

 次ページ以降では引き続き、実践的Javaバッチ・アプリケーションを作りこんでいきます。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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