XMLDB.jp

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

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

 

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

 

 

Cyber LuxeonとJavaアプリケーションが連携する方法について、簡単なWebアプリケーションのサンプルを用いて説明します。サンプルアプリケーションは、Cyber Luxeon上の基本的なデータ操作(CRUD:新規作成・読み取り・更新・削除)について理解をすることを目的としています。

 

はじめに

前回までに、XML DBの概論、Cyber Luxeonの基本アーキテクチャ、Cyber Luxeonの管理ツール「DXE Manager」の基本的な操作方法、XPath、XQuery、Xmlupdategram(XUG:Cyber LuxeonのXML更新言語、以下XUG)などについて説明を進めてきました。

 

今回からはいよいよ、簡単なWebアプリケーションを題材として、Cyber LuxeonとJavaアプリケーションが連携する方法について説明していきます。本稿で紹介するサンプルアプリケーションは、Cyber Luxeon上のXMLドキュメントの基本的な操作(新規作成・読み取り・更新・削除)について理解することを主な目的としています。

 

「XML DBアプリケーションの開発」の前編となる本稿では、サンプルアプリケーションの仕様、アプリケーション全体の設計方針について主に説明します。またそれに加えて、Cyber Luxeonを使用したアプリケーションの開発時に把握しておくべき事項である、DBへの接続形態(セッション)の種類と特徴、DBトランザクション、バインダドキュメントについて説明していきます。後編では前編の説明を踏まえ、具体的なクラス設計、そしてそれぞれのソースコードについて説明します。

 

またサンプルアプリケーションでは、Java SE 6から標準APIとなったJAXB(Java Architecture for XML Binding)も使用しています。本サンプルで、Cyber Luxeonで用意している接続用のJava APIとJAXBを連携させる方法についても説明します。

 

 

対象読者

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

 

 

必要な環境

  • Windows XP(OS)
  • Cyber Luxeon Ver2.0 Developer Edition(データベース)
  • Java SE 6
  • Tomcat 6.0.10

 

 

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

概要

サンプルアプリケーションは、あるECサイトの商品データを管理するためのアプリケーションで、商品データの新規登録・検索・更新・削除処理を行います。1つの商品は1つのitem要素としてXMLに格納されます。商品データを格納したXMLの例を以下に示します。

 

 

 

画面遷移

サンプルのアプリケーションの画面遷移を下図に示します。商品の検索機能、新規登録画面、更新画面、削除機能が用意されています。

 

■画面遷移

 

 

 

 

各機能

  • 商品検索機能
    商品を商品名で検索します。商品名の部分一致で検索できる検索機能を提供します。

 

  • 商品データ新規登録
    商品データを新規に登録します。

 

  • 商品データ更新
    商品データを更新します。商品コードは変更できません。

 

  • 商品削除
    商品一覧上で選択した商品を削除します。

 

 

パーティション、XMLStore、ディレクトリの作成

サンプルアプリケーションの仕様について説明したところで、環境の準備としてDXE ManagerでCyber Luxeon上に、XMLを格納する場所(パーティション、XMLStore、ディレクトリ)を作成します。作成方法は『第1回 XML DBとCyber Luxeonの基本』の「パーティション、XMLStore、ディレクトリの作成」を参照してください。作成物とそれぞれの名前を以下の表に示します。

 

■作成物とそれぞれの名前

 

 

パーティション、XMLStore、ディレクトリをDXE Managerで作成した画面を以下の図に示します。itemsディレクトリ内に商品データを格納したXMLドキュメントを保存します。

 

 

■サンプルアプリケーションのDB上のXML格納場所

 

 

 

 

 

開発に必要なJARファイル

Javaから、Cyber Luxeonに接続するには、Cyber Luxeonが用意しているJava APIを使用します。このAPIはRDBでいうJDBC APIと考えて良いでしょう。クラスファイルを格納したJARファイルは、Cyber Luxeonをインストールしたフォルダの直下にある「classes」フォルダに格納されています(デフォルトでは、「C:\Program Files\CyberTech\Luxeon\classes」)。このディレクトリ内に格納されているJARファイルは次のとおりです。開発をする際には、EclipseなどのIDEで、これらのJARファイルへの参照を設定してください。

 

  • dxebind.jar
  • dxeclient.jar
  • dxeconnector.jar
  • dxeserver.jar

 

 

設計基本方針(アーキテクチャ)

アプリケーションの仕様説明、開発環境の構築が終わったところで、次はいよいよサンプルアプリケーションの設計方針について説明します。以下の図にアプリケーション全体のアーキテクチャを示しました。

 

■アーキテクチャ

 

 

 

 

 

 

XMLドキュメントの新規作成、抽出、削除

XMLDocument(com.exln.dxe.filesystem)インターフェイスを使用します。XMLDocumentインターフェイスは、Cyber LuxeonのAPI上で、1つのXMLドキュメントを表現するためのインターフェイスです。サンプルアプリケーションでは、XMLの新規作成(図上の赤線)、抽出(図上の青線)、削除(図上の水色線)の際に使用します。

 

 

XMLドキュメントの更新

Update(com.exln.dxe)インターフェイスを使用します。Updateインターフェイスは、XUGを表現するためのインターフェイスです。本サンプルでは、XMLを更新する際には、このインターフェイスを使用します(図上の緑線)。

XMLドキュメントを更新する別の方法としては、XMLDocumentインターフェイスを使用する(上書き保存)という方法も考えられますが、 XUGを使用することによって、ある1要素の値のみを更新することが可能で、処理もより効率的になるため、本サンプルでは、XUGを使用する方法を用いました。

 

 

JAXBの採用

システムのバックエンドに保存されているXMLドキュメントを最終的にユーザーに見えるような形で表示したり、ユーザーの入力データをXMLドキュメントして保存するためには、HTMLの入力値からXMLデータ、その逆にXMLデータからHTML上の表示値という相互変換をする必要があります。

 

この変換の方法としては、XSLTを用いて変換する方法や、DOM APIを直接記述して変換する方法が、XMLがシステムで使用され始めた当初からよく採用されています。しかし、XSLTはHTMLを記述するデザイナにとっては敷居が高い技術であり、文法を憶え、使いこなすのにも時間がかかります。またDOM APIをJavaプログラマが直接扱う場合、決まりきったコーディングを何度もする必要があり、プログラミングも必要以上に冗長になってしまい、直感的でなくなってしまう傾向があります。

 

本稿では、これらの問題を解決する方法として、JAXB(Java Architecture for XML Binding)を採用しました。JAXBは、XMLデータを読み込んでJavaオブジェクトに変換したり、その逆としてJavaオブジェクトを変換して、XMLデータとして出力することができます。このような技術を「XMLバインディング」といいます。JAXBもその実装のうちの1つとなります。「XMLバインディング」はRDBでいう「O/Rマッピング」に相当する技術と考えてよいでしょう。JAXBの概要については、次のコラムで説明しています。JAXBの具体的なコーディング方法(アノテーション記述方法)については、後編の実装編で説明します。

 

 

JAXB(Java Architecture for XML Binding)

JAXBは、XMLデータとJavaオブジェクトの相互変換の仕組みを実現するためのAPIで、Java SE6から標準API(javax.xml.bind)となりました。JAXBの仕組みの概要を以下の図に示しました。

 

 

■JAXBの概要

 

 

 

 

本文でも触れましたが、JAXBは「XMLバインディング」という技術の実装技術の1つです。XMLは階層構造のデータを記述したものであり、Javaも階層構造を容易に表現できるというJavaとXMLの親和性の高さから生まれたのが「XMLバインディング」です。

 

JAXBを最終的に実行するためには、XMLデータのツリー構造にマッピングしたJavaクラスを用意する必要がありますが、JAXB2.0ではJavaクラスを作成する方法として、以下の2つを用意しています。

 

 

  1. XMLスキーマファイルを入力として、ツール(xjc)でJavaクラスを自動生成する方法(図の青矢印)
  2. Javaクラスをコーディングして、アノテーションによって要素、属性などクラスに直接定義する方法<JAXB2.0から>(図の赤矢印)

 

 

 

XMLスキーマファイル→Javaクラス自動生成

この方法では、ツール(xjc)がXMLスキーマファイルに定義されたXMLの構造を解析し、XMLの階層構造にマッピングしたJavaクラスを自動生成します。業界標準のXMLを使用するなどで、XMLSchemaファイルが事前に用意されている場合には、有効な方法となるでしょう。

 

 

JavaクラスにJAXBアノテーションを定義

この方法では、まずXMLデータにマッピングするJavaクラスをコーディングします。そして、そのクラスの属性のアクセッサーメソッド(public の属性も可)にJAXBのアノテーションを定義し、XMLとJavaクラスを関連付けます。このクラスを用意するだけでアプリケーションを実行することができます。また、このJavaクラスをもとにしてJava SDKで用意されたツール(schemagen)でXML Schemaファイルを自動生成することもできます。このXML Schemaファイルはアプリケーションの実行においては必要ありませんが、アノテーション定義が正しく行われているかを確認するためにも出力しておくとよいでしょう。


 

Cyber LuxeonのDBアクセス制御

本章では、Cyber Luxeonへの接続形態の種類、そしてDBトランザクションについて説明します。アプリケーション開発時には、これらのCyber Luxeonの特徴をよくおさえておく必要があるでしょう。

 

Cyber Luxeonとの接続形態(セッション)

Cyber Luxeonでは、接続を表す概念としてセッション(Session)が使用されます。セッションは、クライアントセッションとローカルセッションの2種類が用意されています。Java APIでは、Sessionインターフェイス(com.exln.dxe)で表現されます。SessionインターフェイスはRDBアクセスに用いる JDBCのjava.sql.Connectionインターフェイスに相当します。2種類のセッションの概念を以下の図に示します。

 

■クライアントセッションとローカルセッション

 

 

 

 

 

クライアントセッションとローカルセッションの特徴を以下の表にまとめました。

 

 

 

 

 

 

本稿のサンプルアプリケーションは、クライアントセッションを使用します。クライアントセッションを使用する理由としては、本稿のサンプルがWebアプリケーションであるためです。 Cyber Luxeonの大きな特徴として、XMLキャッシュの分散配置(分散キャッシュ)が可能なことがあげられます(『第1回 XML DBとCyber Luxeonの基本』の「XMLキャッシュ」参照)。分散キャッシュは、XMLキャッシュを複数のサーバーに分散して配置することによって、システム全体のパフォーマンス・可用性を向上することを目的とした機能です。ローカルセッションは、ローカルホストのDXE ObjectStoreサーバに直接接続しますので、Webアプリケーションのように並列にサーバーを配置してシステム全体のパフォーマンス向上を図るアプリケーション向けの用途ではありません。

 

 

DBトランザクション

Cyber LuxeonのDBトランザクションは、使用するセッションによって以下の表のような相違点があります。

 

 

 

 

■セッション別のトランザクションの違い

 

 

 

 

 

クライアントセッションのトランザクション

クライアントセッションのトランザクションは、XML更新センテンスごとのオートコミットになります。従って、クライアントセッションによる接続時のXML更新は、XUGを使用しての更新が有効な手段となります。XUGは、1つのXUG実行文内(xlnupdate要素内)で1トランザクションとなりますので、複数の更新文でトランザクションの整合性を保ちたい場合は、XUGの1つのXUG実行文内に複数の更新文を記述すれば要件を満たすことができます。

 

 

ローカルセッションのトランザクション

ローカルセッションのトランザクションは、プログラム内で明示的なトランザクション制御(開始・コミット・アボート)が可能です。またメソッド単位でのトランザクション定義も用意されています。またローカルセッションから取得したDOMオブジェクトを更新すると、Cyber Luxeon内のXMLデータに直接反映されます。

 

 

複数XMLドキュメントの検索

Cyber Luxeonでは「バインダドキュメント」という機能が用意されています。この機能を用いることによって複数のドキュメントをあたかも1つのXMLファイルであるかのように検索することができます。1つのバインダドキュメントとしてまとめられたXMLの仮想的なルート要素は「MultiDoc_Container」という名前の要素です。各XMLは、その子要素として結合されます。これにより、XMLを検索するプログラムは 1つのXMLドキュメントに対しての検索として記述できるようになり、簡潔な検索文が記述できるようになります。本サンプルアプリケーションでは、この「バインダドキュメント」の機能を活用して、複数XMLドキュメントにまたがった商品名検索機能を実装します。

 

 

まとめ

本稿では、サンプルアプリーションの仕様・基本アーキテクチャについて主に説明しました。また、Cyber Luxeonのアプリケーション開発時に必要な知識である接続形態(セッション)の種類・特徴、DBトランザクション、バインダドキュメントの使用などについても説明しました。後編では、今回の説明を踏まえて、実装編としてCyber LuxeonのJava API、JAXBを用いた実際のソースコードの説明をしていきます。

 

 

参考資料

  1. 『Cyber Luxeon ハンドブック』 サイバーテック社
  2. TECHSCORE 『XMLサポートJava SE 6 Mustang』

著者紹介
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. | サイバーテックについて | ご利用ガイド