ページの先頭行へ戻る
Interstage Studio V12.1.0 ユーザーズガイド
FUJITSU Software

5.3.3 開発手順

以下に、実際にアプリケーションを開発する手順を説明します。

1) JAX-RSアプリケーション用のプロジェクトの作成

2) JAX-RSアプリケーションの作成

3) EARプロジェクトの作成

4) JAX-RSクライアントアプリケーションの作成

5) アプリケーションの動作確認

6) 運用環境へのアプリケーションの配布

1) JAX-RSアプリケーションプロジェクト作成

メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]ウィザードが表示されます。

[新規プロジェクト]ウィザードから[Web] > [動的 Web プロジェクト]を選択して、[次へ]をクリックします。

以下の設定項目を確認、入力してください。以下の情報を設定後、[次へ]をクリックします。

設定項目

設定内容

プロジェクト名

JAXRSSample7

ターゲット・ランタイム

Interstage Application Server V12.1 (Java EE 7)

動的 Web モジュールバージョン

3.1

構成

Interstage Application Server V12.1 (Java EE 7) デフォルト構成

EARにプロジェクトを追加

チェックしない

Javaページが表示されますので、情報を確認後、[次へ]をクリックします。

設定項目

設定内容

ビルド・パス上のソース・フォルダー

src

デフォルト出力フォルダー

build\classes

[Webモジュール]ページが表示されます。

以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックします。

設定項目

設定内容

コンテキスト・ルート

JAXRSSample7

コンテンツ・ディレクトリー

WebContent

web.xmlデプロイメント記述子の生成

チェックする

2) JAX-RSアプリケーションの作成

2-1) データクラスの作成

国名と総人口の情報を保持し、そこから情報を取得するデータクラスを作成します。データクラスの作成は、作成したプロジェクトを選択して、右クリックでコンテキストメニューから[新規] > [クラス]を選択します。[新規Javaクラス]ウィザードが表示されます。

以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックします。

設定項目

設定内容

ソース・フォルダー

JAXRSSample7/src

パッケージ

sample7.jaxrs

名前

CountryData

スーパークラスからのコンストラクター

チェックする

以下のソースファイルが生成されます。

ソースファイル

説明

CountryData.java

データクラス

国名と総人口を保持する処理を実装します。以下のの箇所をソースに追加してください。

データクラスの実装(CountryData.java)

package sample7.jaxrs;

public class CountryData {

    private String countryName;
    private int totalPopulation;

    public CountryData() {
        // TODO 自動生成されたコンストラクタスタブ
    }

    public CountryData(String name, int total) {
        setCountryName(name);
        setTotalPopulation(total);
    }
    
    public String getCountryName() {
        return countryName;
    }
    
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    
    public int getTotalPopulation() {
        return totalPopulation;
    }
    
    public void setTotalPopulation(int totalPopulation) {
        this.totalPopulation = totalPopulation;
    }

}

ポイント

フィールドを追加した後にクラスを選択している状態で、メニューから[ソース] > [getter および setter の生成]を選択することで、getter/setterの追加を行うことができます。

2-2) Applicationサブクラス作成

Applicationサブクラスはjavax.ws.rs.core.Applicationクラスを継承したクラスで、1つのApplicationサブクラスが1つのJAX-RSアプリケーションを表します。配備するモジュールにApplicationサブクラスが存在する場合、モジュール内のリソースクラスが検索され、Webリソースとして公開されます。

Applicationサブクラスを作成するため、プロジェクトを選択して右クリックでコンテキストメニューから[新規] > [クラス]を選択します。[新規Javaクラス]ウィザードが表示されます。

以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックします。

設定項目

設定内容

ソース・フォルダー

JAXRSSample7/src

パッケージ

sample7.jaxrs

名前

JAXRSSampleApplication

スーパークラス

javax.ws.rs.core.Application

スーパークラスからのコンストラクター

チェックしない

作成したJavaクラスにApplicationPathアノテーションを以下のように定義します。

赤字の部分がApplicationPathアノテーションの定義になります。

ApplicationPathアノテーションの定義

package sample7.jaxrs;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("webapi")
public class JAXRSSampleApplication extends Application {

}

2-3) リソースクラスの作成

リソースクラスはWebリソースを表現したJavaクラスです。

リソースクラスを作成するため、プロジェクトを選択して右クリックでコンテキストメニューから[新規] > [クラス]を選択します。[新規Javaクラス]ウィザードが表示されます。

以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックします。

設定項目

設定内容

ソース・フォルダー

JAXRSSample7/src

パッケージ

sample7.jaxrs

名前

PopulationRanking

スーパークラスからのコンストラクター

チェックしない

@javax.ws.rs.Pathアノテーションをクラスに宣言し、JAX-RSアプリケーションのルートパスからの相対パスを指定します。

次に、HTTPリクエストの処理を行うリソースメソッドの実装を行います。今回はHTTPメソッドのGETから呼び出される処理を作成するため、@javax.ws.rs.GETアノテーションを使用します。

以下の赤字の箇所をソースに追加してください。

リソースクラス(PopulationRanking.java)

package sample7.jaxrs;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/population")
public class PopulationRanking {
    private CountryData[] countries;

    public PopulationRanking() {
        countries = new CountryData[] {
             new CountryData("中国", 1373490000),
             new CountryData("インド", 1292710000),
             new CountryData("アメリカ", 321600000),
             new CountryData("インドネシア", 255460000),
             new CountryData("ブラジル", 204460000),
             new CountryData("パキスタン", 189870000),
             new CountryData("ナイジェリア", 178720000),
             new CountryData("バングラデシュ", 159860000),
             new CountryData("ロシア", 143460000),
             new CountryData("日本", 126980000)
        };
    }

    @GET
    @Path("{rank}")
    @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
    public CountryData getRankingInfo(@PathParam("rank") int rank) {
        --rank;
        if (9 < rank || rank < 0 ){
            return null;
        }

        return countries[rank];
    }
}

このJAX-RSアプリケーションを配備して"http://localhost/JAXRSSample7/webapi/population/1"にアクセスすると、次のように国名と総人口がJSONで返却されます。

{"countryName":"中国","totalPopulation":1373490000}

3) EARプロジェクトの作成

メニューバーから[ファイル] > [新規] > [プロジェクト]を選択すると、[新規プロジェクト]ウィザードが表示されます。

新規プロジェクトウィザードから[Java EE] > [エンタープライズ・アプリケーション・プロジェクト]を選択して、[次へ]をクリックします。

以下の設定項目を確認、入力してください。情報を設定後、[次へ]をクリックします。

設定項目

設定内容

プロジェクト名

JAXRSEARSample7

ターゲット・ランタイム

Interstage Application Server V12.1 (Java EE 7)

EARバージョン

7.0

構成

Interstage Application Server V12.1 (Java EE 7) デフォルト構成

[エンタープライズ・アプリケーション]ページが表示されます。

以下の設定項目を確認、入力後、[完了]をクリックします。

設定項目

設定内容

Java EE モジュール依存関係

JAXRSSample7をチェックする

コンテンツ・ディレクトリー

EarContent

application.xmlデプロイメント記述子の生成

チェックしない

4) JAX-RSクライアントアプリケーションの作成

本来であればWebアプリケーションをクライアントとして作成するための手順が必要ですが、ここではサンプルをインポートしてJAX-RSクライアントとして重要なポイントを確認していきます。Webアプリケーションの作成についての詳細な手順を知りたい場合は、Webアプリケーションの"2.2 入門"を参照してください。

サンプルのインポートは次の手順で行います。

メニューから[ファイル] > [インポート]を選択します。表示されたインポートウィザードで[一般] > [既存プロジェクトをワークスペースへ]を選択します。[アーカイブ・ファイルの選択]をチェックし、[参照]ボタンを押して、以下のファイルを選択します。

<ワークベンチのインストールフォルダ>\sample\JAXRSSample7.zip

[プロジェクト]から[JAXRSClientSample7]を選択し、[完了]をクリックします。

JAXRSClientSample7プロジェクトのインポート後に、JAXRSEARSample7プロジェクトを選択して、右クリックでコンテキストメニューから[プロパティー]を選択します。

プロパティダイアログボックスの[デプロイメント・アセンブリー]を選択し、[追加]ボタンを押します。

[プロジェクト]を選択して[次へ]をクリックし、JAXRSClientSample7を選択して[完了]をクリックします。

4-1) クライアントプロジェクト作成

JAX-RSクライアントとして動的Webプロジェクトを作成します。サンプルのインポートで代替済みのため、詳細は省略します。設定項目は以下を参考にしてください。

設定項目

設定内容

プロジェクト名

JAXRSClientSample7

ターゲット・ランタイム

Interstage Application Server V12.1 (Java EE 7)

動的 Web モジュールバージョン

3.1

構成

Interstage Application Server V12.1 (Java EE 7) デフォルト構成

EARにプロジェクトを追加

チェックする

EARプロジェクト名

JAXRSEARSample7

設定項目

設定内容

ビルド・パス上のソース・フォルダー

src

デフォルト出力フォルダー

build\classes

設定項目

設定内容

コンテキスト・ルート

JAXRSClientSample7

コンテンツ・ディレクトリー

WebContent

web.xmlデプロイメント記述子の生成

チェックする

4-2) データクラスの作成

データクラスを作成します。インポートしたサンプルプロジェクトでは作成済みですが、JAXRSSample7プロジェクトで作成したCountryDataクラス(CountryData.java)をJAXRSClientSample7プロジェクトにも作成します(またはコピー&貼り付けします)。

4-3) サーブレットクラスの作成

サーブレットクラスを作成します。インポートしたサンプルプロジェクトでは以下のような設定項目で作成済みです。

設定項目

設定内容

Java パッケージ

sample7.jaxrs

クラス名

ServletController

スーパークラス

javax.servlet.http.HttpServlet

設定項目

設定内容

名前

ServletController

URL マッピング

/ServletController

設定項目

設定内容

修飾子

public

どのメソッド・スタブを作成しますか?

スーパークラスからのコンストラクター
継承された抽象メソッド
doPost(doGetのチェックを外す)

JAX-RSアプリケーションの呼出しの実装を行ったサーブレットクラスは以下のようになります。(インポートしたプロジェクトのサーブレットソースは、この形式になっています。)

赤字の部分が実際には追加、変更する箇所になります。

サーブレットクラス(ServletController.java)

package sample7.jaxrs;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;

/**
 * Servlet implementation class ServletController
 */
@WebServlet("/ServletController")
public class ServletController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletController() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("UTF-8");
        ServletContext sc = getServletContext();

        // 呼び出すファイル種別取得
        String mode = request.getParameter("mode");
        if (mode != null && mode.equals("top")) {
            // 入力画面のHTMLファイル呼出し
            RequestDispatcher inRd = getServletContext().getRequestDispatcher("/default.jsp");
            inRd.forward(request, response);
            return;
        }

        int rank;

        // 入力チェック
        try{
            rank = Integer.parseInt(request.getParameter("rank"));
        } catch (NumberFormatException e){
            RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp");
            errRd.forward(request, response);
            return;
        }

        CountryData country = ClientBuilder.newClient()
            .target("http://localhost/JAXRSSample7/webapi/").path("population/" + rank)
            .request(MediaType.APPLICATION_JSON + ";charset=utf-8").get(CountryData.class);

        //取得した値の確認
        if (country == null){
            RequestDispatcher errRd = sc.getRequestDispatcher("/error.jsp");
            errRd.forward(request, response);
            return;
        }

        sc.setAttribute("ranking", country);

        RequestDispatcher outRd = sc.getRequestDispatcher("/result.jsp");
        outRd.forward(request, response);
    }
}

このサンプルではJAX-RSアプリケーションのルートパスのURLを、"http://localhost/JAXRSSample7/webapi/"としています。Java EE 7 DASサービスに配備した場合は"https://localhost:28585/JAXRSSample7/webapi/"となります。

4-4) 入出力画面の作成

入出力画面のJSPを作成します。インポートしたサンプルプロジェクトでは以下のようなファイルを作成済みです。

入力画面(default.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>世界総人口ランキング</title>
</head>
<body>
<h1>入力画面</h1>
<p>1~10の間で順位を入力してください。</p>
<p></p>
<form action="ServletController" method="post">
    順位:<br>
    <input name="rank" type="text" size="10">位<br>
    <p></p>
    <input type="submit" value="OK">
    <input type="reset" value="クリア">
</form>

</body>
</html>

出力画面(result.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>世界総人口ランキング</title>
</head>
<body>
<h1>出力画面</h1>
総人口ランキング${param.rank}位は「${applicationScope.ranking.countryName}」です。<br>
総人口は${applicationScope.ranking.totalPopulation}人です。
<br>
<hr>
<form action="ServletController" method="post">
    <input type="submit" value="入り口に戻る">
    <input type="hidden" name="mode" value="top">
</form>

</body>
</html>

エラー画面(error.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>世界総人口ランキング</title>
</head>
<body>
<h1>エラー画面</h1>
指定された範囲内の順位が入力されていないか、またはサーバエラーです。<br>
<br>
<hr>
<form action="ServletController" method="post">
    <input type="submit" value="入り口に戻る">
    <input type="hidden" name="mode" value="top">
</form>

</body>
</html>

5) アプリケーションの動作確認

5-1) プロジェクトとサーバの関連付け

サーバビューでサーバを選択し、コンテキストメニューから[追加および除去]を選択します。

使用可能から作成したEARプロジェクトを選択し、[追加]をクリックします。

以下の情報を確認後、[完了]をクリックします。

設定項目

設定内容

構成済み

JAXRSEARSample7

ポイント

サーバビューに配備先となるサーバが登録されていない場合は、サーバを追加する必要があります。サーバを追加する方法については、"6.2.7 アプリケーションの動作確認"を参照してください。

5-2) ブレークポイントの設定

PopulationRankingクラスのgetRankingInfo()メソッドの先頭行にブレークポイントを設定します。ブレークポイントは、エディタの左側のルーラー部分をダブルクリックして、設定または解除します。

5-3) サーバの起動

サーバビューでサーバを選択し、コンテキストメニューから[デバッグ]または[デバッグで再始動]または[接続(デバッグ始動)/ログイン]を選択します。

ポイント

  • デバッガを使用せず単純にアプリケーションを起動したい場合には、コンテキストメニューから[開始]を選択します。

  • サーバビューに配備先となるサーバが登録されていない場合は、サーバを追加する必要があります。サーバを追加する方法については、"6.2.7 アプリケーションの動作確認"を参照してください。

サーバが始動する際に自動的にEARファイルが配備されます。

サーバビューで以下の情報を確認してください。

確認項目

確認内容

サーバの状態

デバッグ

サーバの状況

同期済み

EARファイル(JAXRSEARSample7)の状況

同期済み

EARファイル配下のWARファイル(JAXRSSample7)の状況

同期済み

EARファイル配下のWARファイル(JAXRSClientSample7)の状況

同期済み

5-4) アプリケーションの実行

サーバビューで、配備されているWebプロジェクト(JAXRSClientSample7)を選択して、コンテキストメニューから[Webブラウザ]を選択します。Webブラウザが起動されて、入力画面が開きます。

設定項目

設定内容(例)

入力画面のURL

http://localhost/JAXRSClientSample7/

[順位:]の入力フィールドに人口ランキングの順位を入力して、[OK]をクリックします。

注意

接続確認のURLに指定されるポート番号については、"6.2.7 アプリケーションの動作確認"のHTTPポート番号を参照してください。

ポイント

プロジェクトを選択し、コンテキストメニューから[実行] > [サーバーで実行]または[デバッグ] > [サーバーでデバッグ]を選択することで、サーバの追加、プロジェクトの追加、サーバの起動、クライアントの起動をまとめて行うことができます。
また、クライアントとして使用するWebブラウザは、メニュー [ウィンドウ] > [Web ブラウザ] から変更することができます。

5-5) アプリケーションのデバッグ

アプリケーションが動作し、ブレークポイントで中断されます。変数ビューの表示を確認します。メニューから[実行] > [ステップ・オーバー]を選択し、変数ビューでプログラムの状況を確認します。
デバッグについては、"6.2.7.1 デバッグする"を参照してください。

ポイント

変数ビューでは値の確認だけでなく、変更も行うことができます。

デバッガで中断している処理は、メニューから[実行] > [再開]を選択することで再開され、サーバ側での処理が終了し、Webブラウザに出力画面が表示されます。入力した順位の国名と総人口が表示されることを確認してください。

6) 運用環境へのアプリケーションの配布

このアプリケーションを運用環境に配布するには、EARファイルを作成する必要があります。作成したEARファイルは、サーバの配備機能を利用して、サーバに配備します。

6-1) アプリケーションエクスポート

EARファイルの作成は、エクスポートウィザードから行います。エクスポートウィザードを起動するには、[ファイル] > [エクスポート]を選択します。[エクスポート]ウィザードから[Java EE] > [EARファイル]を選択し、[次へ]をクリックします。

[EARエクスポート]ページが表示されます。

以下の設定項目を確認、入力してください。以下の情報を設定後、[完了]をクリックします。

設定項目

設定内容

EAR プロジェクト

エンタープライズアプリケーションプロジェクトを指定します。

宛先

EARファイルの作成先を指定します。

"Interstage Application Server V12.1 (Java EE 7)"の場合、[エクスポート]ウィザードの[特定のサーバー・ランタイムに最適化]の指定は、エクスポート結果に影響しません。

6-2) 運用環境への配布

開発環境から運用環境のInterstage Java EE 7管理コンソールにログインし、開発環境にあるEARファイルを指定することにより、開発環境から運用環境に配備を行うことができます。