SHOEISHA iD

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

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

japan.internet.com翻訳記事

エンタープライズJavaアプリケーションのサーバーレスポンスを圧縮する

圧縮技術を実装し、ネットワークの遅延を避ける

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

ダウンロード サンプルソース (55.6 KB)

 今日のエンタープライズJava開発でクライアント/サーバ間通信を実現する手段は数多く存在します。本稿では、Javaエンタープライズアプリケーションでサーバレスポンスを圧縮する方法、ならびにそのメリットとデメリットについて述べるとともに、圧縮によるメリットがある技術デザインの選択について解説します。

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

はじめに

 今日のエンタープライズJava開発でクライアント/サーバ間通信を実現する手段は数多く存在します。下層レベルの通信では、主としてHTTPが利用されます。しかし上層レベルでは、さまざまな技術やAPIを利用してクライアント/サーバ間通信を実現できます。例えば、サーブレット、AJAXコール、RPC、各種のWebサービスツールキットやAPI(例:Axis、WebLogic、Apache CXF、Xfire)などが利用できます。

 これらの技術を利用する場合、クライアント/サーバ間通信の一部(あるいはすべて)においてXMLも利用する可能性があります。XMLはネットワーク上で伝送されるデータの構造を定義するのに非常に便利です(人間同士の通信ではなく、2つのソフトウェアシステム間で通信が行われる場合)。すべてのWebサービスは、XMLをSOAPエンベロープでラッピングして使用します(SOAPエンベロープ自体もXMLで記述されます)。AJAXおよびサーブレットでもXMLを使用できますが、使用しなくても構いません。

 今日使われている多数のフレームワークやツールキット、例えばJava Springフレームワーク、HibernateやiBATISといったORMツールなども、内部の機能コンポーネントの構成や接続の部分でXMLに大きく依存しています。標準のJava EEコンテナも、配備記述子ファイルの解決とロードにXMLを利用しています。

 エンタープライズプロジェクトでB2BあるいはP2B通信を実現するのにXMLを使用する場合、個々の定義あるいはスキーマごとにサーバのリクエストとレスポンスの検査が行われる可能性が高いと思われます。XSDスキーマは、XMLリクエスト/レスポンスの形式、それに含まれるべき要素、そしてどの要素が省略可能であるかをサーバに通知します。最近のツールの多くは、JavaオブジェクトモデルからスキーマとXMLを自動生成でき(その逆も可能)、レスポンスとリクエストの検査を自動的に実行する機能も備えています。

 本稿では、Javaエンタープライズアプリケーションでサーバレスポンスを圧縮する方法、ならびにそのメリットとデメリットについて述べるとともに、圧縮によるメリットがある技術デザインの選択について解説します。また、2種類の圧縮実装方式を紹介し、soapUIを使って結果をテストする方法について説明します。本稿はJava EEベースのアプリケーションサーバだけを対象としており、読者がJava EEプロジェクトの構造および技術全般に関する知識を持っていることを前提としています。

メリットとデメリット

 なぜクライアント/サーバ間通信でデータを圧縮する必要があるのでしょうか。仮に、あるプロジェクトの通信でXMLを多用しているとします。ここで注意してほしいのは、XSDスキーマはできる限り詳しい記述ができるように設計されたもののため、長い要素名と非常に複雑な構造を使用するという点です。

 このプロジェクトのXMLスキーマの例を以下に示します。このスキーマは他のスキーマファイルを参照し、OAGIS標準に準拠しています。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema XMLns:xsd="http://www.w3.org/2001/XMLSchema" 
XMLns:sp="http://integration.standardandpoors.com/ServiceSchema/v3"
targetNamespace="http://some.com/ServiceSchema/v3" elementFormDefault="qualified"
 attributeFormDefault="unqualified">
   <xsd:include schemaLocation="BOD.xsd"/>
   <xsd:include schemaLocation="../Components/PersonSchemaType.xsd"/>
   <xsd:complexType name="PersonBODSchemaType">
      <xsd:complexContent>
         <xsd:extension base="sp:BusinessObjectDocumentSchemaType">
            <xsd:sequence>
               <xsd:element name="DataArea" type="sp:PersonDataAreaType"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
   <xsd:complexType name="PersonDataAreaType">
      <xsd:sequence>
         <xsd:element ref="sp:Name"/>
         <xsd:element ref="sp:Phone" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
   </xsd:complexType>
   <xsd:element name="PersonBOD" type="sp:PersonBODSchemaType"/>
</xsd:schema>

 また、このプロジェクトはWebサービスを採用しているため、SOAPという形でさらにXMLを追加します。これはグローバルなプロジェクトであり、このデータ(つまりXMLとSOAPでラッピングされたデータ)は全世界を駆け巡ります。その大きなXMLペイロードは、アプリケーションやクライアントに対してパフォーマンス問題とトラフィックのボトルネックをもたらします。ネットワークの遅延を避けるには、データを圧縮する必要があります。

 これは想定可能なシナリオの1つにすぎませんが、一般に、サーバレスポンスに大量のテキスト出力あるいはバイナリ出力が含まれる場合は、圧縮してからネットワークに送出した方がパフォーマンス向上につながります。データ量が少ないレスポンスの場合は、圧縮のメリットはあまり期待できません。サーバ側とクライアント側の双方で展開処理を行うため、そのぶんだけパフォーマンスが低下するからです。同様に、長距離間の通信ではない場合も、圧縮をすべきかどうかは慎重に検討した方がよいでしょう。展開処理の負荷によって圧縮のメリットがほとんど相殺されてしまうケースも考えられるからです。

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

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

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

メールバックナンバー

次のページ
圧縮の実装

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

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

もっと読む

この記事の著者

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

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

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

Vlad Kofman(Vlad Kofman)

ウォールストリート有数の企業でエンタープライズレベルのプロジェクトに携わる。また、米国政府の防衛関連の仕事も手がけている。特に関心を寄せているのは、オブジェクト指向プログラミング方法論、UI、デザインパターン。

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4396 2009/09/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング