WebSphere Liberty for Windows 開発環境整備手順

# はじめに
Windows上にWebSphere Libertyの開発/テスト環境を作る必要があったので、その時実施した手順をまとめておきます。とりあえず簡単なWebアプリを作ってテストできる環境があればよいという想定です。
Windows単体で、Eclipseで開発したWebアプリをLiberty上で動かして動作確認する、という所までを目標にします。

参考:
基本的な作業の流れは、以下の記事を参考にしています。
[WebSphere LibertyのJava EEローカル開発環境のインストール](https://www.ibm.com/developerworks/jp/websphere/library/was/liberty_devenv_install/)

# Libertyの導入
ターゲットとなるLibertyサーバーのバージョンが、16.0.0.3のようなので、同じバージョンのものを入手することにします。

Libertyとかバージョンとかdownloadとかのキーワードでググると以下のサイトがひっかかりました。
[16.0.0.3: WebSphere Application Server Liberty 16.0.0.3](http://www-01.ibm.com/support/docview.wss?uid=swg24042657)

インストールの仕方によって提供形態もいろいろあるようで、さらにいろんなエディション(?)のようなものがあって何をどうすればよいのか分かりにくい！
zipファイルが手っ取り早そうなので、上のリンクから「wlp-javaee7-16.0.0.3.zip」を選択してダウンロード。(IBMのfix centralというFix入手するサイトに飛ばされて、そこからダウンロードすることになる。IBM IDがあれば入手できるっぽい。)

で、zipを展開すればOK。
![image01.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/84dcbc8d-fd89-7989-0615-9ff120e7df27.jpeg)

ちなみにこういうのもあるようです。こちらは試してませんけど。
[無償版: WebSphere Application Server for Developers V8.5](https://www.ibm.com/developerworks/jp/websphere/downloads/wasdev/)

# Liberty開発環境としてのEclipseを整備

## Eclipse導入
[Eclipse IDE for Java EE Developers](http://www.eclipse.org/downloads/eclipse-packages/)
上のサイトから最新のEclipse Neon.3 (4.6.3)を入手。
これもzipを展開するだけ。
そんで、eclipse.exe実行して適当なworkspaceフォルダ指定すれば起動！

## WebSphere Developer Toolsのインストール
WebSphere Developer ToolsなるものをEclipseにインストールすると、LibertyサーバーをEclipseから管理しやすくなるらしい。

こういうサイト(↓)があるのね。Liberty用のAssetとかツールが提供されています。
[IBM WebSphere Liberty Repository](https://developer.ibm.com/assets/wasdev/#filter/sortby=relevance;q=developer%20tools)

このサイトから、Neon用のDeveloper Tools (↓)を選択します。
https://developer.ibm.com/assets/wasdev/#asset/tools-WebSphere_Developer_Tools_for_Eclipse_Neon

このサイトのInstallボタンをEclipseのウィンドウにドラッグ&ドロップします。
![image02.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/df83fa00-61ee-3ea0-b155-7a98a2669703.jpeg)

そうすると、Eclipse上へWebSphere Developer Toolsをインストールするためのウィザードが起動するので、ウィザードに従ってインストールを進めればOKです。
![image03.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/48e1a568-76ce-27c0-03a0-c14677cdb002.jpeg)

インストール後、Eclipseを再起動します。

## Eclipse上にLibertyランタイム環境の作成

Window - Show Viewを選択し、Runtime Explorerビューを表示させます。
![image04.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/06d2d531-43c7-70a6-1456-854edb176a4b.jpeg)

Runtime Explorerビューを右クリック - New - Runtime Environment...
![image05.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/b71e714f-e300-242a-6c09-baaf7b054999.jpeg)

名前を指定して、先ほど入手して展開したLibertyのディレクトリ(wlpディレクトリ)を指定し、ランタイム環境を作成します。
![image06.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/c473c189-9670-f061-ba0f-45c395bf2ce6.jpeg)

## Libertyサーバーの作成

上で作成されたエントリーを右クリック - New - Liberty Server
![image07.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/b505e966-b0c2-e44a-9c32-08aa5ac614d0.jpeg)

サーバー名を指定してLibertyサーバーを作成
![image08.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/55643882-d391-b585-af8b-5bb36c40918c.jpeg)

作成されたLibertyサーバーをEclipseから認識させるために、サーバーの定義を作成します。
サーバー・ビューで右クリック - New - Server
![image09.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/5641e407-38a4-84c1-95c7-f012e597072e.jpeg)

先ほど作成したLibertyサーバーを指定して、サーバー定義を作成！
![image10.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/6c2693e3-b80a-bb2d-5ae8-517884c7ba38.jpeg)

![image11.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/9e4c6811-f14b-12d7-1463-8735175a3f1e.jpeg)

これで、Eclipseからserver.xmlを編集したり、Libertyサーバーを起動/停止したり、Eclipse上で開発したアプリをデプロイ/テストする環境ができました！

# 操作例

## サーバー定義の変更
Enterprise Explorerビューで、作成したサーバーの定義を展開し、server.xmlをダブルクリック。
構成用のエディターが開くので、適宜フィーチャーの追加などを実施。(ソースを直接編集することも可)
![image11_01.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/8ec8a9d4-4ca9-538d-94bf-18ac0811cd23.jpeg)

## Webアプリ開発
単純なWebアプリを作成してみたいと思います。MVCモデルを想定して、Servlet, JavaBean, JSPを使う単純なものを作ってみます。

###プロジェクト作成
EclipseのWebパースペクティブ、Project Explorerビューで、右クリック - New - Projectから、Dynamic Web Projectを選択
![image13.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/ce196b47-b293-76b8-d1b7-bcea53fd2189.jpeg)

プロジェクト名、その他必要なパラメーターを設定してプロジェクトを作成。
![image14.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/f56d8bc4-49a6-2ee6-ae61-53cf56c49e3c.jpeg)

こんな感じでプロジェクトのガラが作成される。
![image15.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/3e953688-2325-1424-2056-84a5af29e233.jpeg)

###JavaBean作成

Java Resourcesのsrcを右クリック - New - Packageを選択し、パッケージを作成。
![image16.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/a3178afc-2ae7-6485-d48f-82ba9f08dff3.jpeg)

作成されたパッケージを右クリック - New - Classを選択
Class名を指定し、それ以外はとりあえずデフォルトのまま作成。
![image17.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/109915a5-c1b3-e157-ed19-1b70fd6c2525.jpeg)

雛形が作成されるので、以下のようにコードを作成。

```java:JavaBean01.java
package sample.test01;

public class JavaBean01 {
	private String strData01="InitialData";

	public String getStrData01() {
		return strData01;
	}

	public void setStrData01(String strData01) {
		this.strData01 = strData01;
	}

}
```

![image18.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/757625fc-47bc-af3f-1ee2-2c83c6ae1716.jpeg)


###サーブレット作成

上と同じパッケージを右クリック - New - Servletを選択
サーブレット名を指定し、それ以外はデフォルトのまま作成。
![image17.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/84cd39db-6349-231d-0ee6-1e51424d8ed3.jpeg)

こんな感じでServletの雛形が作成される。
![image20.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/d8b0279b-e754-06d9-dd5d-b60b095dd063.jpeg)


以下のようにコードを作成。

```java:Servlet01.java
package sample.test01;

import java.io.IOException;

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 javax.servlet.http.HttpSession;


/**
 * Servlet implementation class Server01
 */
@WebServlet("/Servlet01")
public class Servlet01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Servlet01() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
        //Query Stringからパラメータを取得
        String strQueryData01 = request.getParameter("Data01");
        
        //JavaBeanオブジェクトの変数宣言
        JavaBean01 javaBean01 = null;
        
        //SessionオブジェクトからJavaBean取得。無ければ生成。
        HttpSession session = request.getSession();
        javaBean01 = (JavaBean01)session.getAttribute("sessionObject_JavaBean01");
        if (javaBean01 == null){
        	javaBean01 = new JavaBean01();
        	session.setAttribute("sessionObject_JavaBean01", javaBean01);
        }
               
        //JavaBeanに、パラメータとして受け取ったデータをセット
        if (strQueryData01 != null) {
        	javaBean01.setStrData01(strQueryData01);
        }

        //JSP呼び出し
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("./JSP01.jsp");
        requestDispatcher.forward(request, response);
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
```

###JSP作成

WebContentを右クリック - New - JSP Fileを選択。
JSP名を指定し、それ以外はデフォルトのまま作成。
![image21.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/47154ce1-94bf-2902-48fe-2665c591fff7.jpeg)

こんな感じでJSPの雛形が作成される。
![image22.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/0c96d283-1f00-7742-db42-0ad38be280f7.jpeg)

以下のようにコードを作成。

```jsp:JSP01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    import="sample.test01.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%-- JavaBean生成 --%>
<jsp:useBean id="sessionObject_JavaBean01" class="sample.test01.JavaBean01"
    scope="session" />


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple Web Application</title>
</head>
<body>
<h1>Simple Web Application</h1>
<br>
Data01: <jsp:getProperty name="sessionObject_JavaBean01" property="strData01" />
<br>

</body>
</html>
```

## テスト

上で作成されたアプリをLibertyサーバーにデプロイしてテストしてみます。

### デプロイ
ServersビューでLibertyサーバーを右クリック - Add and Removeを選択。
![image23.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/8b7881cf-f69c-9e46-e991-61f330ab37c9.jpeg)

デプロイ対象のプロジェクト"Sample02"を選択してAddを押す。(右側の欄に移動します)
![image24.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/546f84bc-2106-e065-1221-6b491ce5f562.jpeg)

Sample02がデプロイされた状態。
![image25.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/8e613222-b7a1-2198-65b0-095e07f9f479.jpeg)

サーバーを右クリック - Start を選択し、サーバーを起動します。

### テスト実行

実行したいサーブレット"Servlet01.java"を右クリック - Run As - Run on Server を選択。
![image26.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/462c7ae2-5d22-7c46-c5d1-b5d9a8569fa9.jpeg)


実行するサーバーを選択。
![image27.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/19b5982d-8751-3efd-2b6f-26151dd74bfd.jpeg)

Eclipseのブラウザ機能でServlet実行結果が表示される。
![image28.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/ca95ca15-fd0f-9188-3eb4-6b8bbca31d47.jpeg)

Query Stringを指定してみる。(URLの末尾に"?Data01=AAAAA"を追記)
![image29.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/5509ddeb-7f7b-1a42-233b-0f6f3ca7a190.jpeg)


うまく動いたっぽい！

## エクスポート

おまけ。
別のLibertyサーバーにこのアプリを持っていく場合、WARファイルとしてエクスポートしてあげればよい。
エクスポートしたいプロジェクトを右クリック - Export - WAR fileを選択。
![image30.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/3387b610-5cbd-4398-7864-6fe210e4865d.jpeg)

ファイル名等を指定してエクスポート。
![image31.JPG](https://qiita-image-store.s3.amazonaws.com/0/132331/1edf7207-a17d-f026-7548-a43b668f445e.jpeg)

これでWARファイルとして作成されるので、デプロイしたいLibertyサーバーに持っていけばよい。(ここから先は本稿の意図する範囲ではないので割愛。)