SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

POJOベースのドメインアプリケーションをWebサービスとして公開する

Apache Axis2とSpringを組み合わせたREST/SOAPベースのWebサービス

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

ダウンロード サンプルソース (5.0 MB)

Apache Axis用の次世代WebサービスAPI「Axis2」をSpringと組み合わせると、POJOベースのドメイン層アプリケーションをRESTベースおよびSOAPベースのWebサービスとして公開することができます。本稿ではこの具体的な方法を解説します。

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

はじめに

 エンタープライズアプリケーション開発において結合の緩いサービスが受け入れられるようになったこと、さらにSOA(サービス志向アーキテクチャ)をめぐる以前からの動向を受けて、企業の間では、リモートからの起動と実行が可能なコンシューマブルサービスについての関心が高まっています。またサービスドリブン型アーキテクチャを実現する媒体としてSOAPベースのWebサービスがもつ価値と重要性についても、この数年間で広く認識されるようになりました。

 Webサービスの構築法はさまざまですが、特に企業の場合は、ビジネス機能を実装している既存アプリケーションに既にかなりの投資をしているのが普通です。そのためこうしたケースでは、既存のドメイン機能を安全で簡単かつ効率的な方式でWebサービスとして提供できるデザインが求められています。

 本稿ではAxis2を用いることで、十分なスケーラビリティを維持しつつ、既存のPOJOドリブンJ2EEアプリケーションをWebサービスとして公開する方法について説明します。これらのサービス作成と制御には、現在多くのJ2EEアプリケーションにおいてDI(Dependency Injection:依存性注入)コンテナとして利用されているSpringを利用します。また最後にAxis2エンタープライズWebサービスの配備戦略を解説し、IBM WebSphereなどのアプリケーションサーバに固有の問題についても触れることにします。

アプリケーション

 通常のJ2EEアプリケーションは階層構造を取っており、プレゼンテーション層とビジネス/ドメイン層とが分離しているのが普通です。すべてのコンポーネントを統合するのは、Springなどのフレームワークまたはカスタムファクトリ/コントローラの役割です。本稿では、簡単なWeb層とドメイン層を用いてビジネスロジックをカプセル化するアプリケーションを考えることにします。

 今回のサンプルアプリケーションでは、単純化のためWeb層とドメイン層を共通のプロジェクト構造に統合していますが、本来これらは明確に区別されるものです。図1に、サンプルアプリケーションAccountWebの構成を示します。

図1 既存アプリケーションの構成
図1 既存アプリケーションの構成

 このアプリケーションは、フロントエンドで使われるAccountManagerというドメイン機能を持ちます。AccountManagerはAccountManagerImplとして実装され、ドメインオブジェクトAccountを使用します。ここでも便宜上、ロジックをハードコーディングし、事前定義された各種の入力に基づいた値を返すようにしてあります。実際のアプリケーションであれば、より高度なドメイン/ビジネス層を用意し、データアクセスおよび統合コンポーネントによるデータ入力が行われるはずです。

 ドメインロジックインターフェイスを見ると分かるようにAccountManagerには下記の2つのメソッドが定義されています。

public interface AccountManager {

    public Account getAccount(String accountId);
    public void setStatus(String accountId, Boolean status);
}

 本稿の残りの部分では、Axis2およびSpringを用いてAccountManager機能とその2つのメソッドを公開し、コンシューマブルなWebサービスとして外部から利用させる方法について説明します。

Axis2を用いたWebサービスの構築

 Webサービスを構成するコードのうち、プロバイダサイドのコード部分は「スケルトン」と呼ばれ、コンシューマサイドのコード部分は「スタブ」と呼ばれます。スタブとスケルトンは、マーシャリングおよびアンマーシャリングのリクエストで使用されます。よって、まず目的とするサービスのプロデューササイドのコンポーネントを作成する必要があります。

 Webサービスの構築法には、ボトムアップ形式とトップダウン形式のアプローチがあります。ボトムアップのアプローチでは、最初にJavaクラスを構築しておき、そこからサービス記述子やWSDLを生成します。トップダウン形式のアプローチでは、WSDLを構築しておき、そこからJavaクラスを生成します。今回のサンプルアプリケーションでは、ビジネス機能が既にJavaクラスとして実装されているので、ボトムアップのアプローチを採用します。

 Axis2は同期および非同期サービスをサポートしていますが、今回のサンプルでは同期サービスのみを使用します。Axis2とSpringを用いて既存のドメインクラスからWebサービスを生成するステップを簡単にまとめると次のようになります。

  1. 既存の実装を基にWSDLを生成する。
  2. このWSDLからプロデューササイドのスケルトンおよびクライアントサイドのスタブを生成する。
  3. Springのワイヤリング設定を行い、スケルトン実装を編集して既存クラスにフックする。

 サービスの生成と設定が終わったら、次の作業を行います。

  1. サービスを配備する。
  2. クライアント側からのテストを行う。

 ここから先の手順を実行するには、Axis2バイナリをダウンロードし、アプリケーションクラスパスのライブラリディレクトリにインストールしておく必要があります。WebSphereやWebLogicなど一部のアプリケーションサーバでは、サーバにデフォルトで使われるライブラリとこれらのライブラリが競合する場合があります。この問題については、配備の手順を解説する際に説明します。現段階では、こうした競合はクラスローダおよびその他のクラスパスポリシーを操作することで回避できることを知っておけば十分でしょう。本稿のダウンロードファイルには、すべてのサンプルコードが収録されています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
WSDLの生成

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Ramanujam A. Rao(Ramanujam A. Rao)

ソフトウェア設計者兼エンジニアで、エンタープライズアプリケーションの設計と配備を専門とする。現在は、エンタープライズアプリケーションアーキテクチャの分野におけるコンサルティングおよび、J2EEプラットフォームを用いたスケーラブルな分散型アプリケーションの構築に関するサポートを行っている。連絡先はarrao@acm.org

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1334 2007/05/28 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング