| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
| --> |
| <html> |
| <head><link rel="stylesheet" href="../../../print.css" type="text/css" media="print"> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| <title>SaaS: Zillow - NetBeans IDEのチュートリアル</title> |
| <meta name="KEYWORDS" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION, WEB SERVICE, WEB SERVICES, REST, SAAS, ZILLOW, API-KEY"> |
| <meta name="description" |
| content="This tutorial shows how to use NetBeans IDE |
| to work with api-key authenticated SaaS (Software as a Service) RESTful services. The Zillow real estate service is used as an example."> |
| <link rel="stylesheet" href="../../../netbeans.css"> |
| </head> |
| |
| <body> |
| <h1>SaaS (Software as a Service): Zillowのチュートリアル</h1> |
| <p>NetBeans IDEでは、SaaS (Software as a Service)アプリケーションをサポートするWebサービス・マネージャが提供されています。SaaSはソフトウェア・アプリケーション配布モデルの1つであり、このモデルは、ソフトウェア・ベンダーがWeb固有のソフトウェア・アプリケーションを開発し、そのアプリケーションを顧客がインターネット上で使用できるようにホストして運用する環境を実現します。SaaSモデルは、コストと顧客のハードウェア・リソースの両面から、ソフトウェアの機能を経済的に提供できるモデルとして普及しつつあります。IDEでは、Web上のすべてのポピュラなSaaSサービスにJava開発者が簡単にアクセスできるようになりました。</p> |
| <p>このチュートリアルでは、<a href="http://www.zillow.com/" target="_blank">zillow.com</a>で提供される単純なSaaSの使用方法を説明します。Zillow.comはワシントン州シアトルを拠点とするオンライン不動産サービス会社であり、2005年に元Microsoftの役員とExpediaの創設者であるRich BartonとLloyd Frinkによって設立されました。Zillowでは、ユーザーは、売出し中の物件のみでなく米国全土の何百万という住宅の価値を閲覧できます。住宅の価値の見積もりに加え、同社では1年、5年、10年などの所定の時間枠における各住宅の価値の変化、住宅の航空写真、および地域の住宅価格を含む独自の機能をいくつか提供しています。適切なデータにアクセスでき、面積、寝室数、浴室数などの所定の住宅に関する基本情報も参照できます。また、大幅な変更が行われた場合、ユーザーは住宅の現在の見積もりを入手できます。</p> |
| <p>このチュートリアルでは、12か月間の米国地域の平均住宅価格のチャートを表示します。これを設定するには、まずサービス・マネージャを使用して、ZillowRealEstateService.GetRegionChart操作をサーブレットに挿入します。IDEで基本インフラストラクチャが処理されますが、地域チャートのURLを抽出するため、このサーブレットのコードを変更する必要があります。このチュートリアルでは、JAXBオブジェクトを使用してURLを抽出する方法を説明します。この方法が最も簡易です。 </p> |
| <p><b>目次</b></p> |
| <img alt="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="このページの内容は、NetBeans IDE 7.2、7.3、7.4および8.0に適用されます"> |
| <ul> |
| <li><a href="#get-api-key">Zillow APIキーの受信のための登録</a></li> |
| <li><a href="#create-servlet">サーブレットの作成</a></li> |
| <li><a href="#drop-zillow-op">Zillow GetRegionChart操作のサーブレットへの追加</a></li> |
| <li><a href="#adding-api-key">APIキーのプロジェクトへの追加</a></li> |
| <li><a href="#modify-servlet-code">チャート画像を返すためのサーブレットの変更</a></li> |
| <li><a href="#running">Zillow地域チャート・サーブレットの実行</a></li> |
| </ul> |
| |
| |
| |
| <p><b>このチュートリアルに従うには、次のソフトウェアとリソースが必要です。</b></p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">ソフトウェアまたはリソース</th> |
| <th class="tblheader" scope="col">必須バージョン</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">NetBeans IDE</a></td> |
| <td class="tbltd1"> |
| Java EEダウンロード・バンドル |
| </td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank">Java Development Kit (JDK)</a></td> |
| <td class="tbltd1">バージョン7または8</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">Java EE互換のWebサーバーまたはアプリケーション・サーバー</td> |
| <td class="tbltd1">Tomcat Webサーバー7.x、8.x、GlassFish Server Open Source Edition 3.1x、4.xまたは<a href="http://www.oracle.com/technetwork/middleware/weblogic/overview/index.html" target="_blank">Oracle WebLogic Server 11g-12c</a><br><b>重要:</b> このチュートリアルでTomcatを使用する場合は次を参照してください。<br><a href="http://wiki.netbeans.org/DeployREST2Tomcat55" target="_blank">RESTによるTomcatに関するNetBeansのWiki</a> |
| </td> |
| </tr> |
| |
| </tbody> |
| </table> |
| <h2><a name="get-api-key"></a>Zillow APIキーの受信のための登録</h2> |
| <p>Zillowサービスでは、APIキー認証を使用します。<a href="http://www.zillow.com/webservice/Registration.htm" target="_blank">ここからZillowにサイン・アップ</a>してAPIキーを受け取ります。登録フォームに入力する必要がありますが、登録は無料です。 </p> |
| <p>他のサービスでは、認証にHTTP認証、ヘッダー署名またはユーザー・ログインを使用します。これらの機構は、今後のチュートリアルで取り上げます。 </p> |
| <h2><a name="create-servlet"></a>サーブレットの作成</h2> |
| <p>IDEを使用すると、SaaS操作をサーブレット、既存のRESTfulサービス、JSPページまたはプレーンJavaオブジェクト(POJO)に挿入できます。このチュートリアルで、サーブレットを使用したWebアプリケーションを作成します。</p> |
| <p><strong>サーブレットを作成するには:</strong></p> |
| <ol> |
| <li>「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」から「Java Web」を選択します。「プロジェクト」で「Webアプリケーション」を選択して、「次」をクリックします。</li> |
| <li>「プロジェクト名」フィールドに「<tt>ZillowRegionChart</tt>」と入力します。</li> |
| <li>GlassFishサーバーまたはTomcatサーバーを選択し、「Java EE 6」または「Java EE 7」を選択します。残りのオプションもクリックして進み、「終了」をクリックします。</li> |
| <li>「ZillowRegionChart」プロジェクト・ノードを右クリックし、コンテキスト・ウィンドウから「プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログが開きます。</li> |
| <li>プロジェクト・ノードを右クリックし、「新規」>「サーブレット」を選択します。新規サーブレット・ウィザードが開きます。<br><img alt="クラス名ZillowRegionChartServletと任意のパッケージ名が表示された新規サーブレット・ウィザード" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/new-zillow-servlet.png" title="ZillowRegionChartServletに関する新規サーブレット・ウィザード"></li> |
| <li>サーブレットにZillowRegionChartServletという名前を付けます。これにzillow.regionchartなどの任意のパッケージを作成します。他はすべてデフォルト値のままにし、「終了」をクリックします。 </li> |
| </ol> |
| |
| <p>サーブレットがエディタ・タブで開き、サーブレットとその親パッケージが「プロジェクト」ビュー内のこのプロジェクトの「ソース・パッケージ」ノードに表示されます。 </p> |
| <img alt="ZillowRegionChartプロジェクト内のサーブレットとその親パッケージを示すIDEの「プロジェクト」タブ" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/zillow-project-new.png" title="新規サーブレットが表示されたIDEの「プロジェクト」タブ"> |
| <h2><a name="drop-zillow-op"></a>Zillow GetRegionChart操作のサーブレットへの追加</h2> |
| <p>サービス・マネージャを使用してZillowのSaaS機能をサーブレットに追加します。IDEですべてのインフラストラクチャが処理されます。</p> |
| <p><strong>GetRegionChart操作を追加するには:</strong></p> |
| <ol> |
| <li>IDEで「サービス」タブを開きます。「Webサービス」ノードを展開します。Zillow GetRegionChart操作に移動します。<br><img alt="展開された「Webサービスノードが表示され、Zillow GetRegionChartサービスが表示された「サービス」タブ" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/z-llow-getregionchart.png" title="展開された「Webサービスノードと「Zillow」ノードが表示された「サービス」タブ"></li> |
| <li>このエディタでZillowRegionChartServlet.javaにprocessRequestメソッドを配置します。tryブロックの始めに空の行を追加します。getRegionChart操作をprocessRequest()のtryブロックにドラッグ・アンド・ドロップします。 </li> |
| <li>「GET SaaSをカスタマイズ」ダイアログ・ボックスが開きます。実在の米国の市、州および郵便番号の値を入力するか、これらをnullのままにします。値をnullのままにした場合、国全体の平均住宅価格のチャートになります。「OK」をクリックします。</li> |
| </ol> |
| <p>IDEでGET SaaSサービスのコードが生成されます。この処理が完了すると、processRequest()メソッドは次のようになります。</p> |
| <p><br> <img alt="変更前のgetRegionChartのtryブロックが挿入されているサービスのコード" class="margin-around b-all" src="../../../images_www/articles/72/websvc/zillow/droppedcode.png" title="挿入されたgetRegionChartのtryブロックを示すサービスのコード"> </p> |
| <p>また、IDEでは<tt>org.netbeans.saas</tt>および<tt>org.netbeans.saas.zillow</tt>の2つの新しいパッケージが作成され、RESTful接続とZillow固有のクラスがそれぞれ格納されます。パッケージ構造全体を次に示します。IDEは、<tt>RestConnection</tt>クラスおよび<tt>ZillowRealEstateService</tt>クラスもサーブレットにインポートします。 </p> |
| <img alt="getRegionChart操作のドラッグ・アンド・ドロップ後にIDEによって作成されたパッケージを表示するZillow地域チャート・プロジェクトの構造" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/zillow-project-complete.png" title="ZillowRegionChartプロジェクトの全体構造"> |
| <h2><a name="adding-api-key"></a>APIキーのプロジェクトへの追加</h2> |
| <p>プロジェクトからZillowサービスにアクセスするため、<a href="#get-api-key">登録</a>時に取得したAPIキーを渡す必要があります。<tt>zillowrealestateserviceauthenticator.properties</tt>ファイルを開いてコピーし、登録を通知するZillowからの電子メールで受信したAPIキーに貼り付けます。 </p> |
| <h2><a name="modify-servlet-code"></a>チャート画像を返すためのサーブレットの変更</h2> |
| <p>作成したサーブレットは、有用な出力を生成しません。地域チャート画像を取得してブラウザに表示するためには、ZillowサービスからXMLファイル形式で返される文字列からチャートのURLを抽出する必要があります。この方法の1つは、XMLファイルを解析し、URLをJSPページに渡すことです。この方法は、Adam Myattが著述したNetBeans Zoneの記事である、<a href="http://netbeans.dzone.com/news/consuming-zillow-web-services-" target="_blank">Consuming Zillow Web Services</a>で説明されています。このチュートリアルでは、JAXBオブジェクトを含む、より単純な方法を使用します。</p> |
| <p><strong>チャート画像を返すには:</strong></p> |
| <ol><li>出力行<tt><span class="Code">//out.println("The SaasService returned: "+result.getDataAsString());</span></tt>を変更します。行のコメントを解除し、テキストのかわりにHTMLの<img> タグを生成するように変更します。URLを囲む引用符には、必ずエスケープ文字を付加してください。これで、行は次のようになります。 |
| <pre class="examplecode">out.println("<img src=\""+result.getDataAsString() + "\" />");</pre></li> |
| <li>出力行を末尾の<tt>if</tt>ブロックの内部に移動します。これで、<tt>if</tt>ブロックは次のようになります。 |
| <pre class="examplecode">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() + "\" />"); |
| }</pre></li> |
| <li>この出力の<tt>result.getDataAsString()</tt>メソッドを<tt>resultObj.getResponse().getUrl()</tt>に置き換えます。次に示すように、コード補完を使用して<tt>getResponse()</tt>を別の<tt>resultObj</tt>メソッドから選択し、コード補完を使用して<tt>getUrl()</tt>を<tt>getResponse</tt>メソッドから選択します。<br> <img alt="resultObjメソッドのコード補完" class="margin-around b-all" src="../../../images_www/articles/72/websvc/zillow/zillow-getresponse-cc.png" title="resultObjメソッドのコード補完が表示されているエディタ"></li> |
| <li>catchブロックを<tt>Exception</tt>から<tt>JAXBException</tt>に変更します。スタック・トレースを出力するかわりに、<tt>Logger.getLogger(...)</tt>メソッドを使用することもできます。関連クラスをインポートします。コード補完と「インポートを修正」コンテキスト・メニュー・アクションを使用し、次のcatchブロックを再生成できるかどうかを確認します。 <pre class="examplecode">} catch (JAXBException ex) { |
| Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex); |
| }</pre> |
| </li> |
| <li>サーブレット・コードの親tryブロックから、出力セクションのコメントを解除します。</li> |
| </ol> |
| <p>これで、コードの変更が完了しました。最終的なサーブレット・コードは、次のようになります。</p> |
| <pre class="examplecode">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 { |
| |
| /** |
| * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. |
| * @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 - Uncomment the print Statement below to print result. |
| |
| } catch (JAXBException ex) { |
| Logger.getLogger(ZillowRegionChartServlet.class.getName()).log(Level.SEVERE, null, ex); |
| } |
| } finally { |
| out.close(); |
| } |
| }</pre> |
| <h2><a name="running"></a>Zillow地域チャート・サーブレットの実行</h2> |
| <p>サーブレットを実行する最も簡易な方法は、サーブレットを「プロジェクト」ビューで右クリックし、「ファイルを実行」を選択することです。または、プロジェクト・ノードを右クリックし、「プロパティ」を選択します。「プロパティ」ツリーで「実行」を選択します。次に示すように、「相対URL」フィールドに「/ZillowRegionChartServlet」と入力します。「OK」をクリックし、プロジェクトを実行します。 </p> |
| <img alt="相対URLが表示されたZillowRegionChartプロジェクトの「プロジェクト」ダイアログ" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/zillow-run-properties.png" title="ZillowRegionChartプロジェクトの「プロジェクト」ダイアログ"> |
| <p>プロジェクトの実行に成功すると、地域チャートが表示されたブラウザ・ウィンドウが開きます。</p> |
| <img alt="ブラウザでのZillow地域チャート" class="margin-around" src="../../../images_www/articles/72/websvc/zillow/zillow-chart.png" title="Zillow地域チャート"> |
| <h2><a name="more-exercises"></a>その他の課題</h2> |
| <p>有益なアイデアをいくつか紹介します。</p> |
| <ul> |
| <li>実在する別の市、州および郵便番号の値を試します。サーブレットを再実行します。</li> |
| <li>市、州および郵便番号をサービスに渡し、一致する地域のチャートを返すクライアントを記述します。</li> |
| <li>この<a href="http://netbeans.dzone.com/news/consuming-zillow-web-services-" target="_blank">NetBeans Zoneの記事</a>に示すように、JAXBオブジェクトのかわりにJSPページを使用してチャートを返します。 </li> |
| </ul> |
| <br> |
| <div class="feedback-box" ><a href="/about/contact_form.html?to=3&subject=Feedback:%20Using%20SaaS%20Zillow">このチュートリアルに関するご意見をお寄せください</a></div> |
| <br style="clear:both;" > |
| <!-- ======================================================================================= --> |
| <h2><a name="seealso"></a>関連項目</h2> |
| |
| <p>NetBeans IDEを使用してRESTful Webサービス、SaaS、およびその他のJava EEアプリケーションを開発する方法の詳細は、次のリソースを参照してください。 |
| </p> |
| |
| <ul> |
| <li><a href="./rest.html">RESTful Webサービスについて</a></li> |
| <li><a href="http://wiki.netbeans.org/JavaClientForDeliciousUsingNetBeans" target="_blank">Creating a Java Client for del.icio.us RESTful Web Services</a>、Amit Kumar Saha著</li> |
| |
| <li><a href="http://wiki.netbeans.org/RESTRemoting" target="_blank">NetBeans Wiki: RESTful Webサービス・クライアント・スタブ</a> |
| </li> |
| |
| <li><a href="../../trails/web.html">Webサービスの学習</a></li> |
| <li>YouTube: <a href="http://www.youtube.com/watch?v=cDdfVMro99s" target="_blank" title="RESTful Web Services, Building and Deploying (Part 1)">RESTful Web Services, Building and Deploying (Part 1)</a></li> |
| <li>YouTube: <a href="http://www.youtube.com/watch?v=_c-CCVy4_Eo" target="_blank" title="NetBeans RESTful Testing and Invoking RESTful Resources (Part 2)">NetBeans RESTful Testing and Invoking RESTful Resources (Part 2)</a></li> |
| |
| </ul> |
| <p><a href="../../../community/lists/top.html">nbj2ee@netbeans.orgメーリング・リスト</a>に登録することによって、NetBeans IDE Java EE開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。</p> |
| </body> |
| </html> |