Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

XMLDBとJavaAPI、JAXB2.0を活用したWebアプリケーション開発(設計編)

Cyber Luxeonで学ぶXMLDB入門 第4回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

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

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

アーキテクチャ
アーキテクチャ

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の概要
本文でも触れましたが、JAXBは「XMLバインディング」という技術の実装技術の1つです。XMLは階層構造のデータを記述したものであり、Javaも階層構造を容易に表現できるというJavaとXMLの親和性の高さから生まれたのが「XMLバインディング」です。
JAXBを最終的に実行するためには、XMLデータのツリー構造にマッピングしたJavaクラスを用意する必要がありますが、JAXB2.0ではJavaクラスを作成する方法として、以下の2つを用意しています。
  1. XMLスキーマファイルを入力として、ツール(xjc)でJavaクラスを自動生成する方法(図の青矢印)
  2.  
  3. 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ファイルはアプリケーションの実行においては必要ありませんが、アノテーション定義が正しく行われているかを確認するためにも出力しておくとよいでしょう。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2007/05/21 04:19 XMLのサンプルを修正。item_codeを要素から属性に変更。

  • 2007/05/17 14:04 excelrent.jar を必要なJARファイルから削除

著者プロフィール

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

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

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

バックナンバー

連載:Cyber Luxeonで学ぶXMLDB入門
All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5