Libertyの始め方

IBMの開発しているJava EEランタイム，[WebSphere Liberty](https://www.ibm.com/jp-ja/cloud/websphere-liberty)は，オープンソース[Open Liberty](https://www.openliberty.io/)として開発され，どなたでも無償で利用できるようになっています。また，製品版のWebSphere Libertyも，開発者個人で利用する場合は無償で利用できます[^1]。

この記事では，Windows 10環境にLibertyを導入し，Eclipseで開発をはじめるまでの手順を紹介します。

[^1]: 開発用途であっても，複数の開発者が利用するサーバーとして利用する場合には，ライセンスの購入が必要になります。

# Liberty

## WebSphere Libertyの導入

導入イメージは，こちらからダウンロードできます。
* https://www.ibm.com/support/pages/websphere-liberty-developers

Windows様にJava SE 8実行環境を含んだWebProfile8のZIPファイルが公開されてるのでこれをダウンロードします。ダウンロードしたら適当なディレクトリに展開します。ここでは，`C:\OPT`に展開します。

## Open Libertyの導入

Open Libertyは，Java実行環境を含んだ導入ファイルは公開されていないので，別途Java実行環境を[IBM Semeru](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/)などからダウンロードして導入しておきます。2022年11月現在，Open LibertyではOpenJDK 8や11，17が使用できます。

導入イメージは，こちらからダウンロードできます。
* https://www.openliberty.io/downloads/

パッケージは，全部を含んだ「All GA Features」をダウンロードしておきましょう。こちらも，`C:\OPT`に展開することにします。

## Libertyのディレクトリ構成

```
C:\OPT
 + wlp
   + bin
   + clients
   + dev
   + lafile
   + lib
   + temlates
   + usr 
     + servers
     | + <server name>
     |   + apps
     |   + dropins
     |   + logs
     |   + workarea
     + shared
       + apps
       + config
       + resources
```
主なディレクトリの用途は以下の通りです。
<dl>
<dt>wlp/bin</dt>
<dd>Libertyを操作するコマンド</dd>
<dt>wlp/dev</dt>
<dd>Liberty上で稼働するアプリケーションのビルドに必要なJARファイル</dd>
<dt>wlp/lib</dt>
<dd>Libertyのランタイム自体を構成するJARファイルや構成ファイル</dd>
<dt>wlp/usr</dt>
<dd>ユーザーの作成したサーバー定義やアプリケーション，リソースなど</dd>
<dt>wlp/usr/servers/<サーバー名></dt>
<dd>特定のサーバーで利用される構成やアプリケーション，リソースなど</dd>
<dt>wlp/usr/shared</dt>
<dd>複数のサーバーで共有される構成やアプリケーション，リソースなど</dd>
</dl>

## serverコマンド

binディレクトリにあるserverコマンドが，サーバーの管理に使うメインのコマンドです。以下の書式で利用します。

```
server アクション <サーバー名> <オプション>
```

サーバー名を省略すると「defaultServer」というサーバーをターゲットサーバーに指定したことになります。アクションには以下のようなものがあります。
<dl>
<dt>help</dt><dd>ヘルプを表示します。`server help <アクション名>`とすると，アクションごとに利用可能なオプションの説明が出ます。</dd>
<dt>create</dt><dd>サーバーの構成を新規に作成します。</dd>
<dt>run</dt><dd>サーバーをコンソールのフォアグラウンドで起動します。実行中にキーボードからCtrl+Cを入力すると，サーバーが停止してコマンドラインに戻ります。</dd>
<dt>start</dt><dd>サーバーをバックグラウンドで起動します。</dd>
<dt>status</dt><dd>指定されたサーバーの稼働状況を表示します。</dd>
<dt>stop</dt><dd>サーバーを停止します。</dd>
</dl>

## サーバー構成の作成と起動・停止

コマンドラインを起動して一連の流れを実行してみます。`server`コマンドが格納されている`C:\OPT\wlp\bin`ディレクトリに移動しましょう。システムに既に他にJavaが入っている場合にも，WebSphere Liberty同梱のJavaが使われるように環境変数`JAVA_HOME`を設定しておきます。

```
C:\> cd C:\OPT\wlp\bin
C:\OPT\wlp\bin> set JAVA_HOME=C:\OPT\wlp\java\java
```
OpenLibertyを使用していて，別途JDKを導入した場合には，その導入ディレクトリを指定します。


サーバーの構成を作成してみましょう。ここでは`Server01`という名前のサーバーを作成します。

```terminal
C:\OPT\wlp\bin> server create Server01
サーバー Server01 が作成されました。
```

`C:\OPT\wlp\usr\servers\Server01`というディレクトリが作成され，必要な構成ファイルが配置されます。メインとなる構成ファイルは`server.xml`というファイルです。Java EE 8.0 Web ProfileのAPIが使用できるように構成されています。

```server.xml
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <!-- Enable features -->
    <featureManager>
        <feature>webProfile-8.0</feature>
    </featureManager>

    <!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443" />
                  
    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>

</server>
```

ダウンロードしたパッケージによっては，ことなるサーバー構成ファイルが作成されている場合があります。その場合は，`C:\OPT\wlp\usr\servers\Server01`を消去した上で，以下のようにテンプレートを明示的に指定してサーバー構成を作成してください。テンプレートは，`C:\OPT\wlp\template`ディレクトリのしたにある名前のどれかを指定します。

```terminal
C:\OPT\wlp\bin> server create Server01 --template=webProfile8
サーバー Server01 が作成されました。
```

サーバーをフォアグラウンドで起動してみましょう。

```terminal
C:\OPT\wlp\bin> server run Server01
IBM J9 VM バージョン 8.0.6.25 - pwa6480sr6fp25-20210115_01(SR6 FP25) (ja_JP) で、Server01 (WebSphere Application Server 21.0.0.5/wlp-1.0.52.cl210520210510-1231) を起動しています
[AUDIT   ] CWWKE0001I: サーバー Server01 が起動されました。
[AUDIT   ] CWWKE0100I: この製品は、開発使用向け、および限定的な実動使用向けにライセンスが交付されています。 全ライセンス条項は以下で表示可能です: https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/license/base_ilan/ilan/21.0.0.5/lafiles/ja.html
[AUDIT   ] CWWKZ0058I: アプリケーションの dropins をモニター中です。
[AUDIT   ] CWWKF0012I: サーバーは次のフィーチャーをインストールしました。[appSecurity-2.0, appSecurity-3.0, beanValidation-2.0, cdi-2.0, distributedMap-1.0, ejbLite-3.2, el-3.0, jaspic-1.1, jaxrs-2.1, jaxrsClient-2.1, jdbc-4.2, jndi-1.0, jpa-2.2, jpaContainer-2.2, jsf-2.3, jsonb-1.0, jsonp-1.1, jsp-2.3, managedBeans-1.0, servlet-4.0, ssl-1.0, webProfile-8.0, websocket-1.1]。
[AUDIT   ] CWWKF0011I: Server01 サーバーは、Smarter Planet に対応する準備ができました。Server01 サーバーは 2.123 秒で始 動しました。
[AUDIT   ] CWPKI0820A: デフォルトの鍵ストアは'keystore_password' 環境変数を使用して作成されました。
```

この状態でブラウザで`http://localhost:9080`にアクセスすると，Libertyが起動していることを確認できます。

起動メッセージに「アプリケーションの dropins をモニター中です」と表示されています。サーバー名のディレクトリにあるdropinsディレクトリに，EARやWARの拡張子を持つJava EEのアプリケーションのファイルを配置すると，自動的にアプリケーションとして認識され，導入と起動がおこなわれます。アプリケーションはEAR/WARのアーカイブファイルをそのまま配置してもいいですし，同名のディレクトリを作成して展開したファイルをおこなうこともできます。

ここで，もう一つコマンドプロンプトを開いて，dropinsの下にディレクトリを作ってみましょう。

```
C:\> cd C:\OPT\wlp\usr\servers\Server01\dropins

C:\OPT\wlp\usr\servers\Server01\dropins> mkdir test.war
```

もとのコマンドラインのウィンドウを見ると，以下のようなログが表示されていると思います。ディレクトリをモニターしているLibertyが作成したディレクトリを認識し，アプリケーションとして導入がおこなわれました。

```
[AUDIT   ] CWWKT0016I: Web アプリケーションが使用可能です (default_host): http://localhost:9080/test/
[AUDIT   ] CWWKZ0001I: アプリケーション test が 3.309 秒で開始しました。
```
このディレクトリの中にJSPファイルを作ってみましょう。「^Z」の入力は，Ctrl＋Zをおした後Enterを入力します。

```
C:\OPT\wlp\usr\servers\Server01\dropins> cd test.war

C:\OPT\wlp\usr\servers\Server01\dropins\test.war> copy con index.jsp
<html>
<head><title>test page</title></head>
<body>It is <%= new java.util.Date() %> now.</body>
</html>
^Z
        1 個のファイルをコピーしました。
```

ブラウザで`http://localhost:9080/test/index.jsp`にアクセスすると，現在時刻が表示されると思います。

サーバーを停止するには，`server run`を実行したウィンドウでCtrl+Cを入力します。

```
[AUDIT   ] CWWKE0085I: JVM が終了するため、サーバー Server01 が停止しています。
[AUDIT   ] CWWKE1100I: サーバーが静止するまで最大 30 秒間待機します。
[AUDIT   ] CWWKT0017I: Web アプリケーションが削除されました (default_host): http://localhost:9080/test/
[AUDIT   ] CWWKZ0009I: アプリケーション test は正常に停止しました。
[AUDIT   ] CWWKE0036I: 6 分, 40.5 秒後にサーバー Server01 が停止しました。
バッチ ジョブを終了しますか (Y/N)? y

C:\OPT\wlp\bin>
```


# Eclipse

EclipseにIBM Liberty Developer Tools（以下LDT）を導入し，IDEで開発作業をおこなう環境を構築します。サポートされているEclipseとLDTのバージョンの組み合わせは，[こちらのページ](https://www.ibm.com/support/pages/node/6589483)を参照して確認します。2022年12月現在では，Eclipse 2022-03(4.23)とLDT 22．2の組み合わせがサポートされています。

OSSのJavaのIDE，Eclipseを[ダウンロードサイト](https://www.eclipse.org/downloads/packages/)からダウンロードして導入します。まずページ左の「MORE DOWNLOADS」から対応しているEclipseのバージョンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/3c298c25-2658-5617-a02b-06f93cf23b58.png)

いろいろな種類のパッケージがありますが，Java EEのアプリケーションを開発するので「Eclipse IDE for Enterprise Java and Web Developers」をダウンロードします。
![Eclipse01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/52772cea-08cf-d767-4067-eeed673b2638.png)

Eclipseは，2021年3月版から自身を実行するJDKを同梱するようになりました。そのため導入や設定が容易になっています。ダウンロードしたZIPファイルを`C:\OPT\eclipse`ディレクトリなどに展開します。展開してできたeclipse.exeを開くとEclipseが起動します。ワークスペースを保存するディレクトリなどを指定して起動が完了すると，Welcome画面が表示されます。Homeボタンを押して通常の画面，ワークベンチにうつります。![Eclipse02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/a0f8ff54-a332-f0cd-fa99-30fdc160c069.png)

Eclipseで，Libertyをつかった開発をおこなうためには，開発者ツールをEclipseのプラグインとして追加する必要があります。プラグインは，Eclipse Marketplaceからダウンロードし導入することができます。メニューのHelpからEclipse Marketplace...を選んでMarketplaceを起動しましょう。![Eclipse03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/d6e93d36-c9fa-9445-6639-baed856f26b0.png)

Find欄に「liberty」といれて検索します。IBM Liberty Developer Toolsが見つかるので，バージョンを確認してInstallボタンを押して導入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/d5e62130-c61a-4b82-70c2-bcb785aaeaf3.png)

導入するコンポーネントはデフォルトのままで構いません。
![Eclipse06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/f1686d32-257e-70d7-d611-03a7a8b6c5b3.png)

使用条件などが表示されるのでAcceptを選ぶと導入がおこなわれます。またバージョンによってはコードの署名を信頼するかの確認が表示されることがありますので確認して署名を受け入れてください。導入後はEclipseを再起動するように要求されます。再起動すると，Libertyの開発者情報などを含んだWelcomeページが表示されます。閉じてワークベンチに移動します。
![Eclipse09.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/a1366f2d-47ee-5dac-7a58-62cfa4274081.png)

開発者ツールを導入すると，Eclipse上にLibertyサーバーを定義できるようになります。Serverのビューからリンクをクリックして新規作成を選びます。
![Eclipse10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/abc463f9-15f9-3361-266c-7cbce3b87f3f.png)

サーバーの種類としてIBMのLibertyが選択できるようになっています。
![Eclipse11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/33b4195a-f60f-3e0c-fc94-57a387b99295.png)

登録するLibertyは，導入済みのものを指定することもできますし，開発者ツールを使ってWebサイトからダウンロードすることもできます。ここでは，前半で導入したLibertyの環境を利用しましょう。Choose an existing installationを選び，PathにLibertyを導入したディレクトリを指定します。またLibertyの実行に使用するJREを，Libertyに同梱していたものをつかう場合には画面のConfigure JREｓ...のリンクをクリックします。
![Eclipse13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/e3771cca-12df-3ca8-9aa1-e6683c8ee5c2.png)


Add...を選んでStandard VMを選びます。![Eclipse14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/c5f87691-8795-2eb3-1366-a5df43df55d2.png)

JRE homeに，Libertyに同梱されていたJDKのディレクトリを指定し，JRE nameにIBM Java 8などの名前を指定します。
![Eclipse17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/70c46756-17a5-7aff-2cd0-3db8aeb12ca3.png)

FinishでJREの登録を完了し，PreferencesのページをApply and Closeで閉じます。もとのNew Serverのダイアログボックスにもどったら，Use a specific JREにいま登録したJREを指定してNextボタンを押します。
![Eclipse19.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/09ac6138-5870-d549-8dc2-1c28e9ff46e0.png)

つぎの画面でLibertyのサーバー構成を選択します。前半で作成したServer01が表示されていると思います。Eclipseの中と外では使うサーバー構成を分けた方が混乱が少ないのでNew...ボタンで新規のサーバー構成を作成します。なまえはEclipse01など適当な名前をつけます。
![Eclipse20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/4d295e85-4640-82ff-251a-8883f5c3b417.png)

Finishをおすと，Serverビューに作成したLibertyがあらわれ，操作ができるようになります。右クリックしてStartを選ぶとサーバーが起動します。初回は，Windowsのファイヤーウォールが通信を許可するか尋ねるダイアログボックスが出るかもしれませんので，適宜，アクセスを許可します。
![Eclipse23.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/6e413035-9388-7f41-40c0-3c16ef16971a.png)

サーバーが正常に起動したことを確認します。
![Eclipse25.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60041/37c49091-826c-7bdc-8f6e-2c91a54a8447.png)

これで，Eclipse上でJava EEのWebプロジェクトやEJBプロジェクトを作成し，Run on ServerでLibertyを選択すれば，Liberty上で実行やテスト，デバッグなどができるようになります。

# まとめ

WebSphere LibertyやOpen Libertyをダウンロードし，導入実行するまで。Eclipseを導入し，Libertyのテスト環境を構築するまでをご紹介しました。次回は，Eclipse上でのLibertyの構成のしかたなどについて解説しようかと思います。