LoginSignup
8
8

More than 5 years have passed since last update.

Bluemix Liberty for Javaの開発環境を整える(2/3)

Last updated at Posted at 2015-11-20

はじめに

BluemixのランタイムとしてLiberty for Javaを使用するための、開発環境の準備について記載します。
ローカルPCでWebSphere Application Server Liberty Profile(WAS Liberty)を稼働させ、ローカルPCで稼働確認したものをBluemixにPushすることを想定して記載します。

本内容は、以下の3回に分けて投稿する予定です。今回は、第2回目の「シンプルなJSPとServletのプログラムの開発」です。

  1. EclipseのセットアップとWAS Libertyの導入
  2. シンプルなJSPとServletのプログラムの開発
  3. データベースサービスを利用するプログラムの開発

前提

以下の内容が完了しているものとして記載します。

作業の流れ

以下の流れで、作業を進めていきます。

  1. EclipseのDynamic Web Projectを作成し、JSPとServletからなるサンプル・アプリケーションを作成します
  2. サンプル・アプリケーションが稼働するように、WAS Libertyの設定を変更します
  3. ローカルPCでサンプル・アプリケーションを稼働させ、稼働を確認します
  4. サンプル・アプリケーションをBluemixにPushし、稼働を確認します

サンプル・アプリケーションの作成

サンプル・アプリケーションとして、所有している本の一覧を表示するアプリケーションを作成します。本稿では、まだデータベースを使用しないため、Servletの中でダミーデータを生成し、JSPで表示するようにします。

本稿では、以下の3つのプログラムを作成します。

  • Book.java : 本の情報を保持するModel用クラスです
  • BookListServlet.java : クライアントからのリクエストを受け、ダミーデータを作成し、result.jspに結果を渡すServletです
  • result.jsp : 所有する本の一覧を表示するJSPです

Dynamic Web Projectの作成

Eclipseのメニューより、「File」→「New」→「Dynamic Web Project」を選択します。「Dynamic Web Project」が見つからない場合は、「Other」をクリックし、表示される一覧から選択してください。
EclipseProject-01.png

「Project name:」に、「BookListApplication」を入力します。続いて、「Target runtime」に、「WebSphere Application Server Liberty」が選択され、「Add project an EAR」のチェックボックスが外れていることを確認し、「Finish」をクリックします。
EclipseProject-02.png

「BookListApplication」プロジェクトが作成されていることと、Java EEパースペクティブを開いていることを確認してください。別のパースペクティブになっている場合は、下図の青色の枠内のボタンをクリックして、Java EEパースペクティブを開きます。
EclipseProject-03.png

Beanの作成

本の情報を保持するModel用クラスであるBook.javaを作成します。
Book.javaを格納するための、パッケージを作成します。「BookListApplication」の「Java Resources」の下にある「src」を右クリックし、「New」→「Package」を選択します。
EclipseProject-04.png

「Name:」に「booklist.bean」と入力し、「Finish」をクリックします。
EclipseProject-05.png

「booklist.bean」を右クリックし、「New」→「Class」を選択します。
EclipseProject-06.png

「Name:」に「Book」と入力し、「Finish」をクリックしてください。
EclipseProject-07.png

Book.javaの内容として、以下を入力してください。

Book.java
package booklist.bean;

public class Book {
    private String title;
    private String type;
    private int price;
    private String isbn;

    public Book(String title, String type, int price, String isbn) {
        this.title = title;
        this.type = type;
        this.price = price;
        this.isbn = isbn;
    }

    public String getTitle() {
        return title;
    }

    public String getType() {
        return type;
    }

    public int getPrice() {
        return price;
    }

    public String getIsbn() {
        return isbn;
    }

    @Override
    public int hashCode() {
        return title.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Book) {
            return this.equals((Book)obj);
        } else {
            return false;
        }
    }

    public boolean equals(Book obj) {
        if (this == obj) {
            return true;
        } else {
            if ((this.title.equals(obj.title)) && (this.type.equals(obj.type)) &&
                (this.price == obj.price) && (this.isbn.equals(obj.isbn))) {
                return true;
            } else {
                return false;
            }
        }
    }
}

Servletの作成

クライアントからのリクエストを受け、ダミーデータを作成し、result.jspに結果を渡すServletであるBookListServlet.javaを作成します。
Beanの作成の冒頭と同じ要領で、BookListServlet.javaを格納するパッケージ「booklist.servlet」を作成してください。

「booklist.servlet」を右クリックし、「New」→「Servlet」を選択します。
EclipseProject-08.png

「Class name:」に「BookListServlet」と入力し、「Finish」をクリックします。
EclipseProject-09.png

BookListServlet.javaの内容として、以下を入力してください。

BookListServlet.java
package booklist.servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import booklist.bean.Book;

@WebServlet("/BookList")
public class BookListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public BookListServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");

        Book book1 = new Book("WebSphere Application Server 構築・運用バイブル", "WebSphere", 4800, "978-4774153193");
        Book book2 = new Book("DB2 10 エバリュエーション・ガイドブック", "DB2", 3200, "978-4798131894");
        Book book3 = new Book("スマートマシンがやってくる", "Cognitive", 1600, "978-4822250324");

        ArrayList<Book> bookList = new ArrayList<Book>();
        bookList.add(book1);
        bookList.add(book2);
        bookList.add(book3);

        request.setAttribute("bookList", bookList);

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

JSPの作成

所有する本の一覧を表示するJSPであるresult.jspを作成します。
「WebContent」を右クリックし、「New」→「JSP File」を選択します。
EclipseProject-10.png

「File name:」に「result.jsp」を入力し、「Finish」をクリックします。
EclipseProject-11.png

result.jspの文字コードが「ISO-8859-1」になっているため「UTF-8」に修正します。
result.jspを右クリックし、「Properties」を選択します。「Text file encoding」の「Other」にチェックを入れ、「UTF-8」を選択し、「OK」をクリックします。
EclipseProject-12.png

result.jspの内容として、以下を入力します。

result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="booklist.bean.Book" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Book List</title>
  </head>

  <body>
    <h1>蔵書一覧</h1>

    <table border="1">
      <thead>
        <tr><th>タイトル</th><th>種類</th><th>価格</th><th>ISBN</th></tr>
      </thead>
      <tbody>
        <%
          ArrayList<Book> bookList = (ArrayList<Book>)request.getAttribute("bookList");
          for (int i = 0; i < bookList.size(); i++) {
            Book book = bookList.get(i);
            out.println("<tr>");
            out.println("<td>" + book.getTitle() + "</td>");
            out.println("<td>" + book.getType() + "</td>");
            out.println("<td>" + book.getPrice() + "</td>");
            out.println("<td>" + book.getIsbn() + "</td>");
            out.println("</tr>");
          }
        %>
      </tbody>
    </table>
  </body>
</html>

WAS Libertyの設定変更

Bluemix Liberty for Javaの開発環境を整える(1/3)」のWAS Libertyの際に、Eclipse上でのサーバー作成が完了しています。この状態でもサンプル・アプリケーションを稼働させることができるのですが、実際にサーバーを起動させようとすると、基本ユーザー認証の構成やSSLの構成を求められます。これらを構成しないと正しくサーバーが起動しません。これは、デフォルトのサーバー構成では、「Java EE 7 Full Platform」と呼ばれる、Java EE 7のすべての仕様を使える構成になっているためです。このまま、基本ユーザー認証やSSLを構成しても良いのですが、どうせなら使わない機能は無効化し、サンプル・アプリケーション稼働に必要なWeb Profileのみを利用するように設定します。このように、必要な仕様のみを利用するように構成することで、アプリケーション・サーバー起動時のオーバヘッドを軽減することが、WAS Libetyでは可能です。
(今回は、Web Profileを利用するように構成しますが、サンプル・アプリケーションの稼働には、JSP-2.1とServerlet-3.1の仕様さえあれば稼働可能です。この2つの仕様のみを構成することも可能です。)

Eclipseより、「Server」ビューを開き、作成したWAS Libetyのサーバーの「Server Configuration」をダブルクリックします。
Liberty-01.png

WAS Libertyの設定変更ツールが起動します。「フィーチャー・マネージャー」をクリックし、右側に表示されるフィーチャーから「javaee-7.0」を選択し、「Remove」をクリックします。
Liberty-02.png

続いて、同じ「フィーチャー・マネージャー」から「Add」をクリックし、表示されるフィーチャー選択画面の検索バーに「Webprofile」と入力します。表示される「webProfile-7.0」を選択し、「OK」をクリックしてください。
Liberty-03.png

Liberty-04.png

この作業で、WebProfileのみを使用するように構成できました。Ctrl-sで変更したファイルを保存します。
Liberty-05.png

最後に、WAS Libertyのサーバーとサンプル・アプリケーションを関連付けます。
WAS Libertyのサーバーを右クリックし、「Add and Remove...」をクリックします。
Liberty-06.png

「Available:」にある「BookListApplication」を選択し、「Add >」をクリックして「Configured:」に移動させます。
Liberty-07.png

最後に「Finish」をクリックすれば、関連付けは完了です。
Liberty-08.png

ローカルPCでの稼働確認

EclipseのServerビューで、WAS Libertyのサーバーを選択し、Serverビューの右上の実行ボタン(再生マークの絵)をクリックします。
Local-01.png

以下のようなログが出力され、エラーコード(CWで始まる10桁のコード)がInfoレベル(10桁目がI)のみとなっていれば、エラーなく正常にWAS Libertyのサーバーとアプリケーションを起動できています。

Java HotSpot(TM) 64-Bit Server VM バージョン 1.8.0_102-b14 (ja_JP) で、server1 (WebSphere Application Server 16.0.0.3/wlp-1.0.14.cl160320160831-1555) を起動しています
[AUDIT   ] CWWKE0001I: サーバー server1 が起動されました。
[AUDIT   ] CWWKE0100I: この製品は、開発使用向け、および限定的な実動使用向けにライセンスが交付されています。 全ライセンス条項は以下で表示可能です: https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/license/base_ilan/ilan/16.0.0.3/lafiles/ja.html
[警告      ] CWWKS3103W: ID com.ibm.ws.security.registry.basic.config[basic] の BasicRegistry 構成に定義されたユーザーがありません。
[AUDIT   ] CWWKZ0058I: アプリケーションの dropins をモニター中です。 
[AUDIT   ] CWWKS4104A: LTPA 鍵が 0.523 秒で作成されました。 LTPA 鍵ファイル: C:/IBM/WebSphere/Liberty/usr/servers/server1/resources/security/ltpa.keys
[AUDIT   ] CWWKT0016I: Web アプリケーションが使用可能です (default_host): http://localhost:9080/BookListApplication/
[AUDIT   ] CWWKZ0001I: アプリケーション BookListApplication が 0.387 秒で開始しました。
[AUDIT   ] CWWKF0012I: サーバーは次のフィーチャーをインストールしました。[jsp-2.3, ejbLite-3.2, managedBeans-1.0, jsf-2.2, beanValidation-1.1, servlet-3.1, ssl-1.0, jndi-1.0, localConnector-1.0, jsonp-1.0, appSecurity-2.0, jdbc-4.1, jaxrs-2.0, jaxrsClient-2.0, el-3.0, json-1.0, cdi-1.2, distributedMap-1.0, webProfile-7.0, websocket-1.1, jpa-2.1]。
[AUDIT   ] CWWKF0011I: サーバー server1 は、Smarter Planet に対応する準備ができました。

ブラウザを起動し、「http://localhost:9080/BookListApplication/BookList」にアクセスします。以下の通り、サンプルデータが表示されれば、稼働確認は完了です。
Local-02.png

Bluemixへのデプロイと稼働確認

BluemixへのデプロイをEclipseから実施します。WAS Libertyのサーバーと同じように、Eclipse上にBluemixのサーバーを作成することで、EclipseからBluemixに対してアプリケーションをデプロイできるようになります。

EclipseのServerの空白のスペースの部分を右クリックし、「New」→「Server」と選択します。
作成するサーバーの種類を、「Select the server type:」から選択します。「IBM」フォルダにある「Bluemix」を選択し、「Next」をクリックしてください。
Bluemix-01.png

Bluemixにログインする際に利用するメールアドレスを「Email:」に、パスワードを「Password:」に入力し、「Next」をクリックしてください。
「URL:」の部分は、Bluemixのデプロイ先の「地域(Region)」です。デフォルトで米国南部に相当するhttps://api.ng.bluemix.netが選択されています。デフォルトのままでよいですが、英国を利用したい方は、プルダウンより「IBM Bluemix (United Kingdom)」を、シドニーを利用したい方は、プルダウンより「IBM Bluemix (Sydney)」を選択してください。
Bluemix-02.png

デプロイ先のスペースの選択画面が表示されます。複数のスペースを作成されている方は、デプロイしたいスペースを選択し「Finish」をクリックします。1つしかスペースがない方は、そのまま「Finish」をクリックします。
Bluemix-03.png

EclipseにBluemixのサーバーが登録されました。
Bluemix-04.png

サンプル・アプリケーションをBluemixに関連付けます。WAS Libertyでの関連付けと同様に、サーバーを右クリックし、「Add and Remove...」より、サンプル・アプリケーションを関連付けしてください。

関連付けを実施すると、Bluemixが必要とする情報の入力を求められます。
まず最初に、Bluemix上のアプリケーション名を入力します。Bluemix上ですでに同じ名前のアプリケーションを使っていなければ、変更する必要はありません。「Next」をクリックします。
Bluemix-05.png

続いてホスト名を指定します。デフォルトでアプリケーション名が使用されますが、このままでは他のユーザーの方とURLが同じになってしまい、デプロイに失敗します。ユーザー名や適当な文字列を追加するなどして、一意の名前となるように変更してください。入力後、「Finish」をクリックします。
なお、ここで表示されている「Deployed URL:」の値が、アプリケーションのURLとなります。後ほどの稼働確認で利用しますので、確認しておいてください。
Bluemix-06.png

Bluemixへのデプロイとアプリケーションの起動が始まりますので、しばらく待ちます。Serverビューに切り替わり、サンプル・アプリケーションが「Deployed [started, Synchronized]」と表示されていれば、Bluemixへのデプロイとアプリケーションの起動が正常終了しています。
Bluemix-07.png

アプリケーションの稼働を確認します。
ブラウザを起動し、先ほど確認した「Deployed URL:」の後ろに、「/BookList」をつけたURLにアクセスします。
今回の例ですと「http://booklistapplication-20151120.mybluemix.net/BookList」となります。
WAS Libertyの稼働確認の際は、「/BookListApplication」というコンテキスト・ルートになっていましたが、Bluemixの稼働確認の際には不要です。これは、WAS Libertyの設定として、プロジェクト名がコンテキスト・ルートになるように、デフォルトで自動設定されるためです。

WAS Libertyでの稼働確認と同じ画面が表示されれば、稼働確認は完了です。

最後に

以上で、シンプルなJSPとServletのプログラムの開発と確認は完了です。
今回は、テスト・データをプログラムに記載ましたが、次回は、このテスト・データをBluemix上のSQL Databaseより取得するように修正します。

(2016/01/08 追記)
第3回目のデータベースサービスを利用するプログラムの開発を投稿しました。

(2016/09/22 追記)
Libertyの最新版リリースに合わせて一部表現と画面キャプチャを修正しました。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8