トップ » 技術記事 » チャット作成で学ぶWebリモーティング(1) - イントロダクション

チャット作成で学ぶWebリモーティング(1) - イントロダクション

タグ: Ajax DWR Java javascript

「Webリモーティング (インターネット上でHTTPを介して行われるリモーティング)」についての連載を今回から始めたいと思います。今回は、連載を開始するにあたってのイントロダクションです。

はじめに

どうも初めまして。白石といいます。
今回から、八角研究所さんで記事を書くことになりました。
難しい技術をわかりやすく、をモットーに、いろいろ興味のあることを調べて書いていきたいと思います。以後よろしくお願いします。

さて、今回が最初の記事ですが、テーマに迷った挙句、いきなり連載物で行こうかと思います。お題は題名の通り「チャット作成で学ぶWebリモーティング」です。今回は、連載を開始するにあたってのイントロダクションです。

「Webリモーティング」と言う言葉は、半分僕の造語です。ググってもこうした単語は出てきません。
通常「リモーティング」というと、RPCとかRMIとか、分散技術全般で広く用いられる用語です。「Web」を頭につけることによって、インターネット上でHTTPを介して行われるリモーティングに限定したわけです。

なぜWebリモーティングか

僕が最近この分野に注目している理由は、やはりAJAXの存在です。

AJAXが登場した時点から誰もがわかっていたことですが、近年のWebアプリはやはりリッチクライアント化が進みつつあります。Webアプリのことを「AJAXアプリケーション」と呼称することも多くなってきました。
そしてこれも予想できたことですが、古き良き「ページ遷移型」Webアプリで培われたアーキテクチャは、AJAXアプリケーションにはそぐわないものになっている気がしています。
AJAXアプリケーションは、任意のタイミングで非同期HTTPコールを用いてサーバサイドのAPIを呼び出し、その結果を以てリアルタイムにUIを更新します。データベースから得た結果を用いてHTMLを動的に生成する、という以前のアーキテクチャとはだいぶ異なります。

僕はこの変化を、非常に好意的にとらえています。
HTMLを動的に生成していたころのアーキテクチャは、どこか不格好な気がしていました。サーバサイドのリソースにフルアクセスできてしまうのにも関わらず、JSPページを無理やりクライアントに見たててJSPが行う仕事を制限し、データアクセスを伴う業務ロジックをなるべくJSPから遠ざけようと層をいくつも設けている、という気がしてならなかったのです。
その点、AJAXアプリケーションは真の意味で「クライアント」であり「ビュー」です。AJAXアプリはどう転んでもDBに直接アクセスすることはできません。Open Session in Viewパターンがいいかどうかという議論以前に、AJAXアプリはトランザクション境界に入れません。AJAXアプリがロードしたデータは、ユーザが直接操作することができてしまう (Firebugなどを使えば簡単です) ので、クライアントとサーバの間におけるData Transfer Objectを設計する意義があります。そして、クライアントはサーバサイドが公開するサービスなくしては動作しないので、「サービス指向が役に立つかどうか」を議論する余地もなくサービス指向にならざるを得ません
こうしたことから、AJAXに限らずRIA技術に対して、「見た目が美しくて使い勝手が良い」という以上の価値を僕は見出しています。

そしてWebリモーティングは、AJAXアプリのアーキテクチャを実現する上で欠かせない存在だと考えています。
現在多くのWebサイトが、XMLHttpRequestやIFrameなどの低レベルなAPIを直接用いてAJAXを実現しています。低レベルなAPIを用いる場合、サーバとクライアント間でのプロトコルを設計し、さらにプロトコルに準じたパーサを自作する必要があります。
しかし、AJAXアプリケーションはサーバが提供する数多くのサービスを頻繁に呼び出す必要があります。その一つ一つで前述のような設計・実装を行うのは、多くの開発コストを必要とするでしょう。
Webリモーティングの機能を提供するフレームワークやライブラリを用いれば、そうした作業はほとんど必要ありません。サーバはメソッドを定義するだけでサービスの公開を行えますし、クライアントはそうしたメソッドを直接呼び出すような感覚でサービスを利用することができるのです。

というわけで本連載では、Webリモーティングの機能を持つ様々なライブラリ・フレームワークを紹介していきたいと思います。僕自身がJava畑の出身なので、Javaで実装されたものが中心になります。とはいえ、他のプラットフォームでWebリモーティングがどう実装されているかについてもすごく興味があるので、もしかすると手を出すかも知れません。

連載の全体像

連載のスケジュールは以下のように考えています (「○~×回」とあるのは、予定している連載回数です)。

DWR (Direct Web Remoting) … (4~5回)
DWRは、Webリモーティングに特化したJavaライブラリです。「Webリモーティング」という用語も、このフレームワークの名前からとりました。バージョン2からは非常に多彩な機能を提供するようになり、さらに他のフレームワークとの連携も強化されています。
DWRの機能をいくつか検証した後、Springフレームワークとの連携方法を紹介します。他のフレームワークとの連携方法についても軽く触れていきたいと思います。
JBoss Seam … (4~5回)
JBoss Seamは、JavaEE5仕様で規定された様々なAPIを中心として、幅広い機能が一つに統合されたフレームワークです。「JSR 299: Web Beans」という形での標準化も進められています。Seamには、高機能なWebリモーティング機能も統合されています。
Apache Tuscany … (2~3回)
Apache Tuscanyは、SCA (Service Component Archetecture) と呼ばれるSOAに関連した標準仕様の実装です。SCAは徹底したコンポーネント指向をベースに、サービスの公開と呼び出しに関する低レベルな部分を全てアーキテクチャが吸収するということを目的にしています。
Tuscanyは独自の拡張として、サービスをJSON-RPCで呼び出すことのできる機能を有しています。
JAX-RS … (1~2回)
JAX-RSは、Javaで書かれたクラスをRESTfulなサービスとして簡単に公開できるようにするための仕様です。RESTfulなサービスはクライアントからの利用が非常に容易なので、AJAXアプリケーションからも簡単に呼び出せます。

今のところ、取り上げるネタとしてはこれくらいです。他にも、JAX-WSで公開されたWebサービスをJavaScriptから呼び出してみるとか、GWT (Google Web Toolkit) を取り上げて見ても良いかな、と思っています。
以下のようなチャットを作る過程を見ながら、こうしたフレームワークの使い方を紹介していきたいと思います。
chat_s.jpg

今回は、連載初回ということでイントロダクションだけでしたが、いかがだったでしょうか。
ご意見、ご要望お待ちしてます。

Series NavigationDWRの基本»

執筆者紹介

shiraishi

shiraishi

最近書いてばっかりいます。 眠いとおんなじことばかり書きます。 そして、大概眠いです。

TrackBack URL :