XMLDB.jp

XMLDB開発支援
HOME  >  XMLDB開発支援  >  Cyber Luxeonで学ぶXML DB入門 第6回:XML DBとJavaAPI、JAXB2.0を活用したWebアプリケーション開発(実装編)

Cyber Luxeonで学ぶXML DB入門 第6回:XML DBとJavaAPI、JAXB2.0を活用したWebアプリケーション開発(実装編)

 WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド) [著], 山田 祥寛 [監修]
出典:開発者のための実装Webマガジン「Codezine」(株式会社翔泳社)

 

 

 

 

はじめに

前回は、APIチュートリアル編として、サンプルアプリケーションで主に使用するJAXB API(クラス・アノテーション)とCyber Luxeon Java APIについて説明しました。実装編となる本稿では前回説明したAPIを用いて、XML DBのCRUD(生成・抽出・更新・削除)処理を中心としたサンプルアプリケーションを実装していきます。

 

対象読者

XMLに触れたことがある方、RDBなどデータベースを操作したことがある方、Javaでプログラミングしたことがある方を対象とします。

必要な環境

  • OS:Windows XP
  • DB:Cyber Luxeon ver2.0 Developer Edition
  • Java SE 6
  • Tomcat 6.0.10

サンプルアプリケーションの仕様

サンプルアプリケーションは、あるECサイトの商品データを管理するためのアプリケーションで、商品データの新規登録・検索・更新・削除処理を行います。仕様の全体像については、Cyber Luxeonで学ぶXML DB入門 第4回を参照してください。

サンプルアプリケーションのディレクトリ・ファイル構成

本稿のサンプルアプリケーションは、JavaのWebアプリケーションです。以下にサンプルアプリケーションのファイル構成を示します。

    * $TOMCAT_HOME/lib/
          o dxeclient.jar(Luxeon API JARファイル)
          o dxebind.jar
          o dxeconnector.jar
          o dxeserver.jar
    * ecitem/ (WebアプリケーションHome)
          o WEB-INF
                + classes/
                      # jp.beproud.sample.ecitemパッケージ
                        (オブジェクトレイヤーのクラスを格納)
                      # jp.beproud.sample.ecitem.luxeonパッケージ
                        (オブジェクト/XML変換レイヤーのクラスを格納)
                      # jp.beproud.sample.ecitem.dao.template
                         パッケージ XQuery、XUGのテンプレートファイル(Velocity)
                      # velocity.properties Velocity用のプロパティファイル
                + jsp/(JSPを格納する)
                      # list.jsp
                      # editform.jsp
                + lib/(ライブラリを格納する)
                      # jstl.jar(JSTL API Reference Implementation)
                      # standard.jar(jakarta-taglibs 'standard')
                      # velocity-1.5.jar(Velocity)
                      # velocity-dep-1.5.jar(Velocity依存ライブラリ)
                + web.xml(J2EE WEBアプリケーション定義ファイル)

クラスの構成

クラスの全体像

まずは、サンプルアプリケーションを構成するJavaクラスの全体像を以下のクラス図に示します。

 

 

 

 

 

 

上記のうち、XML DBレイヤーはCyber Luxeonで用意されているJava APIですので、実際にサンプルアプリケーションで実装するのは「オブジェクトレイヤー」と「オブジェクト/XML変換レイヤー」になります。

各レイヤーの関係を示した図を以下に示します。

 

 

 

コントローラクラス

処理全体のフローを制御するコントローラは、サーブレット(ItemCRUDServlet)で実装します。「action="処理名"」という形式でHTMLのhiddenに埋め込まれた処理名をもとに、if文で分岐し、該当する処理を実行します。実業務のアプリケーションでは、StrutsなどのWebアプリケーションフレームワークを用いて制御するところですが、サンプルアプリケーションを極力シンプルな構造にするために、本稿ではコントローラとして、サーブレットを用いています。

 

 

 

 

エンティティクラス

次に、各処理で共通で使用する商品エンティティクラス(Itemクラス)について説明します。サンプルではJAXB2.0のアノテーションを使用して、JavaクラスとXMLを関連付けして、オブジェクトとXMLデータの相互変換を行います。JavaクラスとXMLのマッピングの関係を以下の図に示します。

■オブジェクト、XMLの関連

 

 

 

XMLのitem要素には、Itemクラスが対応します。そしてitem要素の子要素であるitem_code、item_name、price、description、options、reg_dateはItemクラスのインスタンス変数とマッピングし、それぞれにアクセッサメソッド(publicのインスタンス変数も可)を用意しています。またitem要素の子要素であるdescriptionにはDescriptionクラスが対応し、別クラスとして定義しています。以下に、JAXBのアノテーションを記述したItemクラスのソースの抜粋を示します。

 

 

 

Daoクラス

Daoクラスは、ItemDaoImplクラスとLuxeonDaoクラスに実際の処理が実装されています。

ItemDaoインターフェイスとItemDaoImplクラス

ItemDaoImplクラスはItemDaoインターフェイスを実装しており、Daoクラスを呼び出す側がバックエンドのデータソースに依存しないようになっています。

以下にItemDaoインターフェイスのソースを示します。

 

 

 

ItemDaoImplクラスには、アプリケーションに依存した商品データの操作処理が実装されています。またItemDaoImplクラスでは、LuxeonDaoクラスを呼び出すことによって、Cyber Luxeonに依存した実装になっています。バックエンドに異なるデータソースを採用するような場合には、別の実装(Impl)クラスを作成します。 ItemDaoImplクラスの実装詳細は後述のアプリケーションの各処理の説明で説明します。

ItemDaoFactoryクラス

ItemDaoFactoryには、ItemDaoのファクトリメソッドが実装されており(createDaoメソッド)、インスタンスを返す処理が記述されています。以下にItemDaoFactoryクラスのソースを示します。

 

 

 

 

LuxeonDaoクラス

Cyber Luxeonのデータを操作するための汎用的な処理が実装されています。例えば、XML新規作成処理(createXMLメソッド)、XQuery実行処理(executeXQueryメソッド)、XUG実行処理(updateXMLメソッド)、XML削除処理(deleteXMLメソッド)などです。これらの処理はアプリケーションの仕様に関係なく使用することができる汎用メソッドです。

アプリケーション各処理の説明

クラスの全体的な構成の説明が終わったところで、アプリケーションの仕様に従って、商品データ(商品XML)のデータ処理について説明していきます。

商品データ(商品XML)新規作成処理

まずはXMLの新規作成処理について説明します。

画面遷移

商品情報 新規登録の画面遷移を以下の図に示します。

■商品情報 新規登録の画面遷移

 

 

 

「商品情報 新規登録」画面は、商品一覧の新規登録ボタンを押下すると表示されます。「商品情報 新規登録」画面で商品情報を入力し「新規登録」ボタンを押下すると、XML DBに商品データが新規XMLとして作成されます。

「商品情報 新規登録」画面の表示処理は、ただ単にJSPを表示するだけですので、説明は割愛し「新規登録」ボタンが押下された場合のXMLデータ保存処理について説明します。

コントローラ(ItemCRUDServlet)

コントローラとなるサーブレットでは、HTMLから「action="create"」というパラメータを受け取り、以下の順で、XMLデータ新規作成処理を実行します。

  1. 画面入力されたリクエストパラメータを元にItemクラスを生成し値を格納する(createItemメソッド)
  2. ItemDaoのcreateメソッドを呼び出す
  3. 商品一覧画面(list.jsp)にForwardする

以下にItemCRUDServletのソースを示します。

 

 

以下のItemCRUDServletのソースでは、サーブレットのクラス定義、インスタンス変数、initメソッド、doServiceの記述は省略します。


注 以下のItemCRUDServletのソースでは、サーブレットのクラス定義、インスタンス変数、initメソッド、doServiceの記述は省略します。

Daoクラス

ItemDaoImplクラス

ItemDaoImplクラスのcreateメソッドでは、以下の2つの処理を行っています。

  1. LuxeonDaoクラスのcreateXMLを呼び出しXMLを新規作成
  2. LuxeonDaoクラスのaddDocumentToBinderを呼び出し新規に作成したXMLをバインダドキュメントに追加

以下にItemDaoImplクラスのcreateメソッドのソースを示します。

 

 

 

LuxeonDaoクラスのcreateXMLメソッドの第1引数には、サーブレットで画面入力値を元に生成したItemクラスのインスタンス、第2引数には、Cyber Luxeon上のXMLのファイル名を渡しています。XMLを保存するパス名のルールは「XMLStoreのルートディレクトリからのパス(/items)/商品コード(Cen001).xml」です。また、XML作成後、バインダドキュメントにXMLへのリンクを設定しています。こうすることにより、複数のXMLを束ねて1つのXMLとして検索する処理を実現しています。

以下の図は、新規登録処理後に作成したXMLをDXE Managerで参照した画面です。

■XML新規登録後をDXE Managerで参照

 

 

 

 

新規に作成したXML(items/Cen001.xml)とバインダドキュメント(item_container.bnd)とバインダドキュメント上に作成されたリンクが確認できます。

LuxeonDaoクラス

次にItemDaoImplクラスのcreateメソッドから呼ばれるLuxeonDaoクラスのcreateXMLメソッドの説明をします。LuxeonDaoクラスはCyber LuxeonのJava APIとJAXB2.0を使用して実際にXMLをDBに保存する処理を以下の順で実行しています。

  1. セッション、XMLStore、ルートディレクトリを順に取得
  2. XMLをDB上に新規作成し、XMLへの出力ストリームを取得
  3. JAXBでItemクラスのインスタンスをXMLに変換しXMLの出力ストリームに出力
  4. XMLの出力ストリーム、セッションを閉じる

以下にLuxeonDaoクラスのcreateXMLメソッドのソースを示します。

 

 

著者紹介
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド) (サトウ ハルオ)

WINGSプロジェクトについて

有限会社 WINGSプロジェクトが運営する、テクニカルライティング・プロジェクト。海外記事の翻訳から、主にサーバサイド分野の書籍・雑誌/Web記事の執筆、講演、アプリケーション開発等を幅広く手がける。2005年9月時点での登録メンバは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募頂きたい。CodeZine記事は、WINGSプロジェクト執筆/山田祥寛監修で今後も続々公開予定。


山田 祥寛 (ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「入門シリーズ(サーバサイドAjax/XML DB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数。

 

▲このページのTOPへ

  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

  • ▲NeoCoreについて記載されています!

  • ▲XMLマスター教則本です。試験対策はこれでばっちり!
Copyright (c) CyberTech corporation ltd. All ights Reserved. | サイバーテックについて | ご利用ガイド