SaaS (Software as a Service): Zillow のチュートリアル
NetBeans IDE では、SaaS (Software as a Service) アプリケーションをサポートする Web サービスマネージャーが提供されています。SaaS はソフトウェアアプリケーション配布モデルの 1 つであり、このモデルは、ソフトウェアベンダーが Web 固有のソフトウェアアプリケーションを開発し、そのアプリケーションを顧客がインターネット上で使用できるようにホストして運用する環境を実現します。SaaS モデルは、コストと顧客のハードウェアリソースの両面から、ソフトウェアの機能を経済的に提供できるモデルとして普及しつつあります。IDE では、Web でよく知られているすべての SaaS サービスに Java 開発者が簡単にアクセスできるようになりました。
このチュートリアルでは、zillow.com で提供される単純な SaaS の使用方法を説明します。Zillow.com はワシントン州シアトルを拠点とするオンライン不動産サービス会社であり、2005 年に元 Microsoft の役員と Expedia の創設者である Rich Barton と Lloyd Frink によって設立されました。Zillow では、ユーザーは、売り出し中の物件のみでなく米国全土の何百万という住宅の価値を閲覧できます。住宅の価値の見積もりに加え、同社では 1 年、5 年、10 年などの所定の時間枠における各住宅の価値の変化、住宅の航空写真、および地域の住宅価格を含む独自の機能をいくつか提供しています。適切なデータにアクセスできるほか、面積、寝室数、浴室数などの住宅に関する所定の基本情報も参照できます。また、大幅な変更が行われた場合、ユーザーは住宅の現在の見積もりを入手できます。
このチュートリアルでは、12 か月間の米国地域の平均住宅価格のグラフを表示します。これを設定するには、まずサービスマネージャーを使用して、ZillowRealEstateService.GetRegionChart 操作をサーブレットに挿入します。IDE で基本インフラストラクチャーが処理されますが、地域グラフの URL を抽出するため、このサーブレットのコードを変更します。このチュートリアルでは、JAXB オブジェクトを使用して URL を抽出する方法を説明します。この方法がもっとも簡単です。
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
重要: Java EE 6 プロジェクトには、Tomcat 7.x、GlassFish Server 3.x、または Oracle WebLogic Server 12c が必要です。
Zillow API キーの受信のための登録
Zillow サービスでは、API キー認証を使用します。ここから Zillow にサインアップ して API キーを受け取ります。登録フォームに入力しなければなりませんが、登録は無料です。
ほかのサービスでは、認証に HTTP 認証、ヘッダー署名、またはユーザーログインを使用します。これらの機構は、今後のチュートリアルで取り上げます。
サーブレットの作成
IDE を使用すると、SaaS 操作をサーブレット、既存の RESTful サービス、JSP ページ、またはプレーン Java オブジェクト (POJO) に挿入できます。このチュートリアルで、サーブレットを使用した Web アプリケーションを作成します。
サーブレットを作成するには、次の手順に従います。
「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Java Web」を選択します。「プロジェクト」で「Web アプリケーション」を選択して、「次へ」をクリックします。
「プロジェクト名」フィールドに「ZillowRegionChart 」と入力します。
GlassFish サーバーまたは Tomcat サーバー、および Java EE 5 を選択します。残りのオプションもクリックして進み、「完了」をクリックします。
「ZillowRegionChart」プロジェクトノードを右クリックし、コンテキストウィンドウから「プロパティー」を選択します。「プロジェクトプロパティー」ダイアログが開きます。
プロジェクトノードを右クリックし、「新規」>「サーブレット」を選択します。「新規サーブレット」ウィザードが開きます。
サーブレットに ZillowRegionChartServlet という名前を付けます。これに zillow.regionchart などの任意のパッケージを作成します。ほかはすべてデフォルト値のままにし、「完了」をクリックします。
サーブレットがエディタタブで開き、サーブレットとその親パッケージが「プロジェクト」ビュー内のこのプロジェクトの「ソースパッケージ」ノードに表示されます。
Zillow GetRegionChart 操作のサーブレットへの追加
サービスマネージャーを使用して Zillow の SaaS 機能をサーブレットに追加します。IDE ですべてのインフラストラクチャーが処理されます。
GetRegionChart 操作を追加するには、次の手順に従います。
IDE で「サービス」タブを開きます。「Web サービス」ノードを展開します。Zillow GetRegionChart 操作に移動します。
このエディタで ZillowRegionChartServlet.java に processRequest メソッドを配置します。try ブロックの始めに空の行を追加します。getRegionChart 操作を processRequest() の try ブロックにドラッグ&ドロップします。
「GET SaaS をカスタマイズ」ダイアログが開きます。実在の米国の市、州、および郵便番号の値を入力するか、これらを空欄のままにします。値を空欄のままにした場合、国全体の平均住宅価格のグラフになります。「了解」をクリックします。
IDE で GET SaaS サービスのコードが生成されます。この処理が完了すると、processRequest() メソッドは次のようになります。
また、IDE では org.netbeans.saas および org.netbeans.saas.zillow の 2 つの新しいパッケージが作成され、RESTful 接続と Zillow 固有のクラスがそれぞれ格納されます。パッケージ構造全体を次に示します。IDE は、RestConnection クラスおよび ZillowRealEstateService クラスもサーブレットにインポートします。
API キーのプロジェクトへの追加
プロジェクトから Zillow サービスにアクセスするため、登録 時に取得した API キーを渡します。zillowrealestateserviceauthenticator.properties ファイルを開いてコピーし、登録を通知する Zillow からの電子メールで受信した API キーにペーストします。
グラフ画像を返すためのサーブレットの変更
作成したサーブレットは、有用な出力を作り出しません。地域グラフ画像を取得してブラウザに表示するためには、Zillow サービスから XML ファイル形式で返される文字列のうち、グラフの URL を抽出しなければなりません。この方法の 1 つは、XML ファイルを解析し、URL を JSP ページに渡すことです。この方法は、Adam Myatt が著述した NetBeans Zone の記事「Consuming Zillow Web Services 」で説明されています。このチュートリアルでは、JAXB オブジェクトを含む、より単純な方法を採用します。
グラフ画像を返すには、次の手順に従います。
出力行 //out.println("The SaasService returned: "+result.getDataAsString()); を変更します。行のコメントを解除し、テキストの代わりに HTML の <img> タグを生成するように変更します。URL を囲む引用符には、必ずエスケープ文字を付加してください。これで、行は次のようになります。
out.println("<img src=\""+result.getDataAsString() + "\" />");
出力行を末尾の if ブロックの内部に移動します。これで、if ブロックは次のようになります。
if (result.getDataAsObject(zillow.realestateservice.regionchart.Regionchart.class) instanceof
zillow.realestateservice.regionchart.Regionchart) {
zillow.realestateservice.regionchart.Regionchart resultObj = result.getDataAsObject(zillow.realestateservice.regionchart.Regionchart.class);
out.println("<img src=\"" + result.getDataAsString() + "\" />");
}
この出力の result.getDataAsString() メソッドを resultObj.getResponse().getUrl() に置き換えます。次に示すように、コード補完を使用して getResponse() を別の resultObj メソッドから選択し、コード補完を使用して getUrl() を getResponse メソッドから選択します。
catch ブロックを catch Exception から JAXBException に変更します。スタックトレースを出力する代わりに、Logger.getLogger(...) メソッドを使用することもできます。関連クラスをインポートします。コード補完と「インポートを修正」コンテキストメニューアクションを使用し、次の catch ブロックを再生成できるかどうかを確認します。 } catch (JAXBException ex) {
Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex);
}
サーブレットコードの親 try ブロックから、出力セクションのコメントを解除します。
これで、コードの変更が完了しました。最終的なサーブレットコードは、次のようになります。
package zillow.regionchart;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBException;
import org.netbeans.saas.zillow.ZillowRealEstateService;
import org.netbeans.saas.RestResponse;
/**
*
* @author jeff
*/
public class ZillowRegionChartServlet extends HttpServlet {
/**
* HTTP GET メソッドと POST メソッドの両方の要求を処理します。
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
try {
String unittype = "dollar";
String city = null;
String state = null;
String zIP = null;
String width = null;
String height = null;
String chartduration = null;
RestResponse result = ZillowRealEstateService.getRegionChart(
unittype, city, state, zIP, width, height, chartduration);
if (result.getDataAsObject(
zillow.realestateservice.regionchart.Regionchart.class) instanceof zillow.realestateservice.regionchart.Regionchart) {
zillow.realestateservice.regionchart.Regionchart resultObj =
result.getDataAsObject(
zillow.realestateservice.regionchart.Regionchart.class);
out.println("<img src=\"" + resultObj.getResponse().getUrl() + "\" />");
}
//TODO - 結果を出力する場合は次の出力文のコメントを解除します。
} catch (JAXBException ex) {
Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex);
}
} finally {
out.close();
}
}
Zillow 地域グラフサーブレットの実行
サーブレットを実行するもっとも簡単な方法は、サーブレットを「プロジェクト」ビューで右クリックし、「ファイルを実行」を選択することです。または、プロジェクトノードを右クリックし、「プロパティー」を選択します。「プロパティー」ツリーで「実行」を選択します。次に示すように、「相対 URL」フィールドに「/ZillowRegionChartServlet」と入力します。「了解」をクリックし、プロジェクトを実行します。
プロジェクトの実行に成功すると、地域グラフが表示されたブラウザウィンドウが開きます。
その他の課題
有益なアイデアをいくつか紹介します。
実在する別の市、州、および郵便番号の値を試します。サーブレットを再実行します。
市、州、および郵便番号をサービスに渡し、一致する地域のグラフを返すクライアントを記述します。
この NetBeans Zone の記事 に示すように、JAXB オブジェクトの代わりに JSP ページを使用してグラフを返します。
関連項目
NetBeans IDE を使用して RESTful Web サービス、SaaS、およびその他の Java EE アプリケーションを開発する方法の詳細については、次のリソースを参照してください。
nbj2ee
@
netbeans.org
メーリングリスト に登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。