IBM Developer Japan Webサイトは2021年3月15日をもって終了となり、日本語コンテンツの一部は、オープンソースとして、提供予定です。 URLはこちら

WebSphere Liberty をオープン化

前編では Open Liberty の概要について、製品版の WebSphere Liberty との違いを含めて説明しました。後編では Open Liberty と Eclipse Open J9 を実際に動かしてみるところをご紹介します。

Open Liberty の稼働には、Zip ファイルを直接展開して稼働する方法と、Docker イメージ内で稼働する方法があります。今回はその 2 つを、以下の図のようなユースケースを想定して見ていきます。まずは開発環境を用意し、サンプル・アプリケーションを作成して、テスト環境で稼働確認をします。それから Docker Hub から取得した Open Liberty イメージに、サンプル・アプリケーションを入れた Docker イメージを作成して Docker 環境向けにポータビリティを実現します。

alt

今回使用した環境は以下の通りです。

  • 開発環境:
    • OS: OS X El Capitan
    • Java: Oracle Java 1.8.0_151
    • Eclipse: Oxygen.1a Release (4.7.1a)
    • Docker 17.09
  • テスト環境:
    • OS: Red Hat Enterprise Linux 7.1
    • Java: Eclipse OpenJ9 9_181

まずはローカル・マシン上に開発環境を作ります。ここでははじめに Open Liberty を導入してデフォルトの構成情報や試しに起動を確認してから Eclipse と連携していきます。なお Eclipse 自体はインストール済みとします。Zip ファイル展開で簡単に導入できるのは Open Liberty も製品版と同じです。ちなみに製品版では IBM Installation Manager (IIM) を使った導入方法もあります。IIM はフィックス適用やバージョン管理にも対応しており、IBM Java や IBM HTTP Server など関連サプリメントもまとめて導入することができますが、OSS 版の Open Liberty の導入には対応していません。

  1. 前提となる Java の確認をしておきます。ここではローカル・マシンの開発環境として OS X を使用しているため、Oracle Java 8 が入れてあります (IBM JDK は現時点 Mac をサポートしていません)。
  2. OpenLiberty.io から Zip ファイル (ここでは openliberty-17.0.0.3.zip) を任意のディレクトリにダウンロードし展開します。 alt
  3. 展開のディレクトリを確認すると、wlp というディレクトリができ、その中に展開されていることがわかります。いくつかのディレクトリを確認してみます。bin には、サーバーを管理するメインのコマンドである server コマンドや各種のユーティリティコマンドが置かれています。ただ、製品版には存在している featureManager と installUtility といったフィーチャーを追加拡張するためのコマンドが存在しません。このため、前編で注意点として記載したように、WebSphere Liberty Repository にアクセスして機能拡張することは Open Liberty ではできないことがわかります。他にも configUtility コマンドもないため、WebSphere Liberty Repository から構成スニペットをダウンロードすることができません。ただし構成ファイルのサンプル自体は WebSphere Liberty Repository のサイトで見ることができるので、サンプルに従って手動編集すれば特に問題ありません。またクラスター構成をとるための collective コマンドや、IBM Cloud との連携のための bluemixUtility コマンドも入っていません。ただし IBM Cloud との連携は、後述する Eclipse プラグインの開発者ツールを入れることで可能になります。 このように、高度な管理機能を必要とする場合、API を拡張したい場合には製品版を使うことを検討します。 alt 続いて lib ディレクトリを見てみます。ここに入っているライブラリは内部的に使用しているもので、ユーザーが直接使えるものではないことにご注意ください。下記のように便利そうなオープンソースの実装コードも含まれていますが、このディレクトリにあるクラスは、アプリケーションからは不可視に設定されていて利用することはできなくなっています。 alt アプリケーションから参照してもかまわないクラスはで dev ディレクトリ以下にまとめられています。ここには Java EE 使用で定義されている API のクラスや、Open Liberty を拡張するための SPI クラスなどが格納されています。
  4. それでは実際のランタイムとなるサーバーを作成していきます。bin ディレクトリで以下のコマンドを実行することでほぼ瞬時に作成が完了します。 ./server create server1
  5. サーバーごとの構成情報を格納する usr/servers ディレクトリに server1 というディレクトリが作成されるので中身を見て行きます。まずはサーバー構成情報を記載する server.xml を確認します。デフォルトでは JSP 2.3 に対応した jsp-2.3 フィーチャーが有効化されていることがわかります。なおフィーチャーには server.xml に記述したものだけでなく、その前提となるフィーチャーも自動的に有効化され、サーバー起動時のログ (messages.log 及び console.log)、または後述する Eclipse の GUI から確認することができます。 また、エンドポイントのポートとして http は 9080、https は 9443 が指定されています。その他、war/ear ファイルを自動展開機能も有効化されていることがわかります。このようにデフォルトの最低限の設定だけでも JSP を動かすことができますし、必要に応じてフィーチャーを追加し、構成を変更していけばよい柔軟さが Liberty の利点です。 alt
  6. それでは以下のコマンドで server1 を起動しておきます。現時点は最低限の設定のため、起動には数秒程度で非常に早いです。なおサーバー名を指定せずにサーバーを起動すると、defaultServer という名前のサーバーが作成・起動されます。 ./server start server1 次にサンプル・アプリケーションを動かしていきます。まず dropins ディレクトリに test.war ディレクトリを作成し、test.war ディレクトリに移動してから、サンプルとして test.jsp を作成します。dropins ディレクトリは一定間隔でモニターされており、このディレクトリにアプリケーションを追加・更新・削除などの変更が行われると、自動的に反映されます。開発・テスト環境で活用するのに最適です。今回はお決まりの Hello World サンプルを手書きしています。 alt
  7. それではサンプル・アプリケーションの JSP が動いているか、ブラウザでアクセスして確認します。ローカルホストの 9080 ポートにて作成した JSP が動いていることがわかります。 alt
  8. 以上で開発環境における Open Liberty の稼動確認が終わったので以下のコマンドで server1 を停止します。 ./server stop server1
  9. 続いて開発ツールを用意します。Eclipse に Liberty の開発者ツールである WebSphere Developer Tool をインストールし構成を確認します。メニューの Help から Eclipse Marketplace を開いて「liberty」で検索すると以下のような結果となります。「IBM Liberty Developer Tools for Oxygen」をインストールします (Oxygen 以外の Eclipse をつかっている場合、for 以下の名前は異なっている可能性があります)。 alt
  10. 必要なフィーチャーを選択して Confirm をクリックしてインストールを進めます。最低限「WebSphere Application Server Liberty Tools」があれば事足りますが、ここでは全部チェックし、ライセンスに同意してインストールしたら Eclipse を再起動して完了です。
  11. それでは Eclipse 上でサーバーを構成します。手順 4 で作成した server1 を使います。まずサーバーView で右クリックし新規サーバー作成画面に進み、新しいサーバーを定義します。サーバー・タイプとして IBM WebSphere Application Server Liberty を選択し、ホスト名、サーバー名を入力し、サーバー・ランタイム環境の追加をクリックします。 alt
  12. 名前に Open Liberty、手順 2 で導入したインストール・パスを入力し、JRE はデフォルトのままで Finish をクリックします。 alt
  13. 元の画面に戻り、サーバー・ランタイム環境に追加した Open Liberty がセットされていることを確認して Next をクリックして進み、手順 4 で作成した server1 を選択して Finish をクリックして完了です。サーバー一覧に Open Liberty が作成されたことを確認します。 alt また、エクスプローラーに Open Liberty を導入したディレクトリに存在する server.xml や、作成した test.jsp が読み込まれていることも確認します。
  14. 今度は server.xml を Eclipse の GUI で確認します。Eclipse を使うと server.xml の編集が直感的に行えるのが利点です。 alt Feature Manager をクリックし、Show implicitly enabled features にチェックを入れると付随して暗黙的に有効化されるフィーチャーのリストを確認できます。つまりデフォルトでは JSP 2.3 と Servlet 3.1 を動かすことができるのがわかります。 alt
  15. それではサーバー名を右クリックして Start をクリックし、server1 を起動します。起動すると、test.jsp のサンプル・アプリケーションも localhost で開始することがわかりますので、ブラウザから確認しておきます。これにて Open Liberty と Eclipse の連携が完了し、開発環境が完成し、Java EE 7 や MicroProfile アプリケーションの開発体制が整いました。 alt
  16. 続いてテスト環境も同様の手順で作成します。テスト環境では Java に Eclipse OpenJ9 を使うので、その導入手順を確認します。Eclipse OpenJ9 からダウンロードし、任意のディレクトリに展開します。導入が完了したら bin ディレクトリで以下を実行してバージョンを確認しておきます。 alt
  17. Open Liberty の展開・サーバー作成及び起動方法は手順 2 以降と同様のため割愛します。ここで改めて IBM と Eclipse の Java の関係性について触れておきます。まず以下の図のように、OSS の Eclipse OMR をベースに OSS の OpenJ9 の JVM が作成されます。そこに Open JDK のクラス・ライブラリや関連ツールが追加されて、Open JDK + Eclipse OpenJ9 として公開されます。IBM SDK for Java (通称 IBM JDK) は、これに IBM 独自の暗号化ライブラリなどを追加して作成されます。 alt
  18. Open Liberty が使う Java を設定します。Open Liberty のインストールディレクトリ直下に/etc というディレクトリと server.env ファイルを作成し、以下のように Java_HOME を設定します。この設定により Open Liberty のサーバー起動時に Java として Eclipse Open J9 を使うようになります。なおこの設定はパスが通っている Java より優先されます。 alt
  19. 手順 29 で作成済みの server1 を開始すると、Eclipse Open J9 が起動していることがわかります。 alt 手順 9 で作成した test.jsp を dropins の test.war ディレクトリにコピーすると、アプリケーションが自動で開始したことがログから確認できます。ブラウザからもアプリケーションが動いていることが確認しておきます。 alt

以上で開発環境、テスト環境で Open Liberty/Eclipse OpenJ9 を導入し、簡単にサンプル・アプリケーションを動かす手順をお見せしました。最後に Docker 版の Open Liberty を動かし、サンプル・アプリケーションを導入して Docker イメージを作成します。

  1. まずは Open Liberty の Docker イメージを Docker Hub から pull します。 docker pull openliberty/open-liberty なお 2017/12/12 時点、使用されている Java は Java 9 ベースの Open J9 ではなく、Java 8 ベースの IBM J9VM であることが、コンテナを起動してみるとわかります。 docker run –it openliberty/open-liberty alt Open Liberty イメージの確認をしたら、一旦 Ctrl+C でコンテナを停止してから、コンテナを削除します。 docker rm コンテナ ID
  2. 新たにコンテナを起動します。この時に –v オプションをつけて、ローカル・マシンにあるサンプル・アプリケーションが入った test.war を、Docker コンテナにマウントして起動します。Open Liberty の Docker イメージでは、/config という名前でサーバーの構成ディレクトリにシンボリックリンクがはられています。ここの/config/dropins/ディレクトリに手元のアプリケーションを配置すると、自動的にデプロイされ、アプリケーションが開始します。

    docker run –d –p 80:9080 --name=app –v
    /Users/Rina/Documents/OpenLiberty/wlp/usr/servers/server1/dropins/test.war:/config/dropins/test.war
    

    alt

  3. ブラウザでアクセスして確認します。上記では-p オプションで、外部からアクセスされるポートの 80:コンテナ側のポートの 9080 を指定しているので、ローカル・マシンのブラウザから localhost80 ポートにアクセスすると、コンテナの Liberty が Listen している 9080 にポートフォワードされてアクセスできます。開発・テスト環境と同様のアプリケーションのパスにて test.jsp が表示されました。 alt
  4. 続いて、このサンプル・アプリケーション入りの Open Liberty イメージをビルドして配布できるようにします。まずは Dockerfile を作成します。中身は以下の通りです。 FROM openliberty/open-liberty
    ADD test.war /config/dropins/test.war
  5. 上記の Dockerfile を読み込みビルドします。ここではタグのオプションで sampleos という名前を付与しています。 docker build –t sampleol . alt
  6. ビルドしたイメージからコンテナを起動します。 docker run –d –p 80:9080 --name=sampleol sampleol 以下のログから起動していることがわかります。 alt
  7. ブラウザから再度アクセスして稼働確認します。

おわりに

後編では、Open Liberty と Eclipse Open J9 を、ローカル・マシンの開発環境、Linux のテスト環境と、それぞれのシナリオで動かす手順をご覧に入れました。そして最後にサンプル・アプリケーションを入れた Open Liberty の Docker イメージを作成してポータビリティを実現しました。Liberty 単体だけでしたら、server package コマンドでランタイムとアプリケーションを丸ごとパッケージングすることでポータビリティを実現できるため、わざわざ Docker イメージにする必要はないかもしれません。しかし実際にはデータベースなどと一緒に使うことが求められるため、そういった周辺ソフトウェアと合わせて Docker 環境で動かしていくことを考えると、Docker イメージを作成して統一した環境を簡単に構築できるのが利点です。