XMLBean技術を利用すると、JavaBeanを扱う場合と同じようにXML構造を扱うことができます。またXMLBeanのようなツールを使うと、サービスの開発やテストに必要な時間を短縮でき、SOA開発を単純化できるため、迅速にサービスを実現できるようになります。
この記事では、XMLBeanを書くための開発コンテナーとして、Apache Geronimoを使用します(ただし、実際には任意のサーバーを使用することができます)。この記事を読む前提として、これまでXMLを扱ったことがあり、XMLスキーマやXQuery、XPathなどの概念に慣れている必要があります。ただし、エキスパートである必要はありません。XMLBeanは、そうした技術の詳細を見えなくしてくれるのです。
XMLBeanは、BEAがWebLogic Workshop製品の一部として導入したものです。2003年の9月、BEAは、Page FlowやXMLBean、その他の技術をオープンソース・コミュニティーに寄贈しました。その結果、Apache BeehiveとApache XMLBeanという、2つのプロジェクトが開始されました。
XMLBeanはOR(object-relational)マッパーと考えることができます(ただし相手はリレーショナル・データベースではなく、XMLファイルです)。XMLBeanを使用すると、JavaオブジェクトやJavaBeanにアクセスする場合と同じようにXMLファイルにアクセスすることができます。つまりXMLBeanは、XMLとJavaのバインディング・ツールなのです。
同じようなXML-Javaバインディングを行う他の技術として、よく知られたものに、CastorとJAXB(Java Architecture for XML Binding)があります。Castorは興味深い技術です。CastorはXMLとJavaのデータ・バインディングの他にも、通常のORマッピング・ツールのようにJavaとSQLのバインディングも行うことができるのです。またCastorは、ランタイム・イントロスペクション(introspection)機能もサポートしており、XMLの要素や属性を、クラスやJavaクラスのフィールドと一致比較することができます。またJAXBはSunの技術であり、幾つかの基本的な機能を持っています。
皆さんは恐らく、これまでORツールを評価する際の基準として、そのツールがオブジェクトをXMLで表現できるかどうかなど、考えもしなかったでしょう。今日ではSOAが前面に出てきたため、そうした機能の有無はツールを評価する上で重要な基準となりました。XMLとJavaのバインディング技術としてXMLBeanは最新ですが、恐らく最も進んだ技術です。また、これまでの経験から、XMLBeanは最も使いやすく、しかも最高の機能とパフォーマンスを誇ることが分かっています。(XMLとJavaのバインディング技術相互の詳細な比較は、この記事の範囲外です。)
図1は、XMLBeanが何をするものかを示しています。XMLファイルは、常に背後でbean表現と同期されています。何らかのXMLスキーマに準拠するファイルであれば、JavaBeanの場合と同じように、ゲッターとセッターを使って処理することができます。XML文書は『ファーストクラス・データ・オブジェクト』として扱われ(つまり、つまり制約なしに使うことができます)、JavaBean風の要領でアクセスされます。
図1. XMLとJavaのバインディング
ここで一例を挙げましょう。XMLスキーマと、それに対応して、ある本を表現するXMLファイルがあると考えてください。このファイルにはAuthorという要素が含まれ、bookと1対多の関係を持っています。この関係は珍しいものではありません。1冊の本に複数の著者がいることは、実際にもよくあるものです。リスト1はこれを示しています。
リスト1. bookオブジェクトに対するXMLファイル
<mybook>
<title>Pro Apache Beehive</title>
<authors>
<author>Kunal Mittal</author>
<author>Srinivas Kanchanvally</author>
</authors>
<isbn>1590595157</isbn>
</mybook>
|
このファイルをXMLBeanを使って処理する場合、このファイルに対応するJavaクラスは、この関係を維持します。リスト2は、このXMLファイルから得られるXMLBeanを処理するための疑似Javaコードを示しています。
リスト2. XMLBeanを処理するための疑似Javaコード
MyBook doc = MyBook.Factory.newInstance();
Book book = doc.addNewBook();
book.setTitle("Pro Apache Beehive");
book.setIsbn("1590595157");
String[] authors = new String[2];
authors[0] = new String("Kunal Mittal");
authors[1] = new String("Srinivas Kanchanavally");
book.setAuthors(authors);
|
XMLBeanとSOAベースの開発との関係は、容易に推測することができます。大部分のSOA技術にとって(そのSOA技術がWebサービスを使うか否かに関わらず)、XMLは心臓部分です。SOAとWebサービスが等価であると考えるにしても(少なくとも今日では、言うまでもなく等価です)、恐らく皆さんはSOAプロジェクトに従事した開発者として、XMLを使って何らかの作業を行ったことがあるでしょう。皆さんは実際の経験として、XMLパーサーを使ってXMLコンテンツを操作した後、より扱いやすいように手動でXMLファイルをオブジェクト構造に変換したことがあるはずです。また、XMLを構文解析し、そうしたファイルの中で特定なデータを探したかも知れません。あるいは、1つのXML構造を別のXML構造に変換したことがあるかも知れません。XMLBeanは、SOAの世界の、この問題を解決します。つまり、皆さんがWebサービスや他のSOAサービスを書くことに集中できるように、面倒な大仕事を行ってくれるのです。
SOAあるいはWebサービスに関して作業する場合には、アプリケーション・サーバーを書いたりXMLパーサーを書いたりはしません。通常は、ベンダーが構築した何か、あるいはオープンソースとして提供されているものを使います(それらは広く採用され、テストされ、また独自のライフサイクルに従っています)。ではなぜ、XMLをJavaオブジェクトに変換するコードを書き、管理する必要があるのでしょう。XMLBeanを使用することによって、サービスの開発やテストのための時間を削減でき、サービスの実現が、より迅速になるのです。
先ほど触れた通り、この記事で取り上げる例では、開発コンテナーとしてApache Geronimoを使っています。このセクションでは、単純なXMLBeanを書き、それをGeronimoにデプロイします。
最初に、XMLスキーマが必要です。そのためには、ある1つのXMLスキーマから始めるか、あるいはXMLスキーマを生成します。これは、幾つかのXMLツール(XMLSpyや<oXygen/> XMLなど)を使えば簡単です。あるいは、XMLBeanスキーマの生成サイト(この記事の最後にある参考文献のセクションにリンクがあります)で、オンラインでXMLスキーマを生成することもできます。
サンプルのXMLファイルをリスト3に示します。(この記事ではサンプル・コードは示しません。これまで皆さんが作業したXMLファイルを使ってスキーマを生成し、そこからXMLBeanを生成してください。そうすれば、この記事を読みながらXMLBeanの実際を理解できると思います。)
リスト3. bookに対するXMLの例
<?xml version="1.0" encoding="UTF-8"?>
<bookDetail xmlns="http://beehive.apress.com/bookstore/vo"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://beehive.apress.com/bookstore/vo
file:/C:/ /code/chapter8/bookdetails.xsd">
<book_Id>1</book_Id>
<title>Pro Apache Beehive</title>
<book_type>Book</book_type>
<author>Kunal Mittal, Srinivas Kanchanvally</author>
<publication>Apress</publication>
<publication_Date>2005-08-31</publication_Date>
<catalogNo>123</catalogNo>
<isbn>1590595157</isbn>
<price>49.99</price>
<comments>The 1st book on Apache Beehive</comments>
<pages>300</pages>
<available>false</available>
</bookDetail> |
また、XMLBeanのWebサイトでXMLBeanを直接生成することもできます(何かをダウンロードしたり、ユーティリティーを実行したりする必要はありません)。そのためにはXMLBeans Schema Validatorサイト(参考文献にリンクがあります)に行き、そこにあるリンクをたどります。図2は、そのスクリーン・ショットです。あるいは、XMLBeanのディストリビューションをダウンロードすることもできます。このディストリビューションにはコマンドライン・ユーティリティーとAntタスクが含まれており、XMLBeanを生成してくれます。
図2. XMLスキーマの妥当性検証サイト
XMLBeanを生成すると、必要な全コードを含んだJAR(Java Archive)ファイルが得られます。ただし、やはりApacheのXMLBeans Webサイト(参考文献にリンクがあります)からXMLBean実行可能JARをダウンロードし、作成したXMLBeanを扱うためにコンテナー(この場合はApache Geronimo)をイネーブルにする必要があります。
Apache Geronimoをまだダウンロードしてインストールしていなかったら、ダウンロードしてインストールします(参考文献にダウンロードへのリンクがあります)。ここでは仮に、Apache Geronimoをc:\java\geronimo-1.0にインストールし、XMLBeanをc:\java\xmlbeans-2.1.0にインストールしたとします。この記事のこれから先では、これらのディレクトリーを、GERONIMO_HOMEと XMLBEANS_HOMEと呼ぶことにします。別のディレクトリー構造を使用する場合には、これらのディレクトリー名も適切に修正する必要があります。
訳註:円マーク(¥)は原文ではバックスラッシュです。
XMLBeanを使うためにアプリケーション・サーバーは必要ありませんが、(Geronimoを含めて)任意のアプリケーション・サーバーにデプロイされたJ2EE(Java 2 Platform, Enterprise Edition)アプリケーションでXMLBeanを使うことができます。この記事では、上位レベルの概念を説明し、使い方を示すための擬似コードを示すことにします。しかし最大の効果を上げるためには、実際のファイルを使いながら読んだ方が効果的です。
ここで、本に関する情報を、Webサービスを通して図書館あるいはAmazon.comと交換するための、単純なアプリケーションを構築することを考えてみてください。古典的なシナリオとしては、AmazonのWebサービスを利用します。皆さんは、この記事で説明したシナリオの1つを試みるか、あるいは先ほど説明したステップで作成したXMLBeanを使うことができます。
最初のステップは、XMLBEANS_HOME\libディレクトリーの中の .jarファイルを、EAR(Enterprise Archive)にコピーすることです。どこで、どのようにXMLBeanを使用するかによって、こうしたファイルをAPP-INF/libあるいはWEB-INF/libに置く必要があるかも知れません。あるいはさらに、こうしたファイルをGERONIMO_HOME\libディレクトリーに置き、このサーバー・インスタンス上にデプロイされた任意のJ2EEアプリケーションから利用できるようにすることもできます。
次に、J2EEアプリケーションをApache Geronimoにデプロイします。デプロイの方法については、developerWorksの記事、「Apache GeronimoにJ2EEアプリケーションをデプロイする」(developerWorks, 2006年1月)に説明されています。これで、XMLBeanの機能を動作させる準備が整いました。
XMLBean用に(XMLBeanディストリビューションの一部として提供されているユーティリティー、あるいはXMLBeansのWebサイトを使って)ビルドした .jarファイルを、APP-INF/libあるいはWEB-INF/libに置きます。これで、あとはXMLBeanに対するコードを書くだけになりました。この例では、XMLBeanを処理するためのJavaコードを含む、単純なJSP(JavaServer Page)を書きます。
リスト2のコード使うと、新しいXML文書を作成することができます。このコードは、基本的なJavaBean型のゲッターとセッターを使ってXMLBeanを使用するXML文書を作成します。リスト4は、XMLBeanの中にXMLファイルをインポートするためのコードを含んでいます。
リスト4. XMLBeanの中にXMLファイルを読み込む
BookDocument book = null; try { book =
BookDocument.Factory.parse(pathtobookxmlfile); } catch (XmlException e) {
e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } |
このタイプのコードをJSPの中で試し、そのJSPをGeronimoにデプロイして結果を見ます。
developerWorksの記事「Apache GeronimoにWebサービスをデプロイする」(developerWorks, 2005年4月)は、AmazonのWebサービスを利用する方法と、そのサービスをApache Geronimoの中で使用する方法について説明しています。皆さんの練習として、これをXMLBeanを使うように修正してみてください。
この短い記事では、XMLBeanと、その扱い方の基本の実際を学びました。また、Apache GeronimoでXMLBeanを扱うための基本的なステップについても学びました。これらの方法は、IBM® WebSphere® Application ServerやApache Tomcat、JBossあるいはBEA WebLogicなどの中でXMLBeanを扱う場合でもまったく同じです。この記事で取り上げた項目は、これらの製品にもそのまま適用することができます。
またこの記事では、SOAプロジェクトを進めるための時間がXMLBeanを使うことによって節約できることも示しました。XMLBeanは、機能や柔軟性、そして最も重要な、パフォーマンスの面からも、最も進んだJava-XMLバインディング技術と言うことができます。
学ぶために
- 「Apache GeronimoにJ2EEアプリケーションをデプロイする」(developerWorks, 2006年1月)と、「Apache GeronimoにWebサービスをデプロイする」(developerWorks, 2005年4月)を読んで、Apache GeronimoでJ2EEアプリケーションを扱う方法を学んでください。
- 「ApacheのBeehive入門」(developerWorks, 2005年4月)を読んで、Apache Beehiveプロジェクトの概要を学んでください。
- XMLBeanを詳細に紹介した本、『Pro Apache Beehive』を読んでください。
-
developerWorksのOpen sourceゾーンをご覧ください。オープンソース技術を使った開発や、IBM製品でオープンソース技術を使用するためのハウ・ツー情報やツール、プロジェクトの更新情報など、豊富な情報が用意されています。
- developerWorksのApache Geronimo prsoject areaを調べてください。今日からでもGeronimoを使っての開発を始めるための記事やチュートリアル、その他の資料が豊富に用意されています。
-
IBM Support for Apache Geronimoの提供するサービスについて調べてください。このサービスを利用すると、世界クラスのIBMサポートを受けながらGeronimoアプリケーションを開発することができます。
- developerWorksのGet started now with Apache Geronimoセクションには、初心者から上級者まで利用できる様々な資料が用意されています。
- developerWorksのOpen sourceゾーンには、Apacheに関する記事や、無料のApacheチュートリアルが用意されています。
- これらの話題や、その他の技術に関する書籍がSafari bookstoreに取り揃えられていますので、ぜひご覧ください。
-
developerWorks technical events and Webcastsを利用して最新技術を学んでください。
製品や技術を入手するために
-
Apache Geronimoをダウンロードしてください。
-
Apache XMLBeansをダウンロードしてください。
- XMLBeanスキーマ生成サイトでXMLスキーマを作成してください。
- XMLBeans Schema ValidatorサイトでXMLBeanを生成してください。
- 皆さんの次期オープンソース・プロジェクトをIBM trial softwareを使って革新してください。ダウンロードで、あるいはDVDで入手することができます。
-
IBM WebSphere® Application Server Community Edition V1.0の無料コピーをダウンロードしてください。Apache Geronimoオープンソース技術の上に構築された軽量のJ2EEアプリケーション・サーバーとして、皆さんの開発やデプロイ作業の加速に役立つはずです。
議論するために
-
ディスカッション・フォーラムに参加してください。
-
Apache Geronimo blogでGeronimo開発の最新状況を知ってください。
-
developerWorks blogsからdeveloperWorksのコミュニティーに参加してください。

Kunal MittalはJava技術やJ2EE、Webサービス技術などを専門とするコンサルタントであり、これらの話題に関する何冊かの本を共同執筆しています。彼はソニー・ピクチャーズ・エンターテインメントのDomestic TV ITグループのディレクターとして、部門のアプリケーションに関する技術的なアーキテクチャーや管理に責任を持っています。詳しくは彼のWebサイトをご覧ください。