目次


Bluemix を利用したハイブリッド・クラウドに Java アプリケーションをマイグレーションする、パート 1

Tomcat 上で実行されるアプリケーションを Bluemix Cloud Foundry ランタイムにマイグレーションする

Comments

皆さんは Java アプリケーションを「クラウド内で」実行することに興味がありますか?もしあったとしても、エンタープライズ・アプリケーションの現実を考えると、どこから手を付ければ良いのかすら、わからないのではないでしょうか?このシリーズでは、ハイブリッド・アプリケーションを階層化する際のさまざまな方法を取り上げ、いくつかの例を通じてそれらの方法をステップバイステップで説明します。ここで説明するのは、Java アプリケーションの中でも企業内にそのまま残すのが最善のコンポーネントとの接続を維持しながら、その他のコンポーネントをマイグレーションする方法です。さらに、Java ランタイム、サービス、ツールのさまざまな選択肢についても取り上げます。

このシリーズでは Java アプリケーションとそのアプリケーションが使用するサービスの両方にフォーカスし、どのようにすれば Java アプリケーションとリレーショナル・データベース層を Cloud Foundry ベースのプラットフォームへマイグレーションできるかを説明します。また、サービスをオンプレミスに残すシナリオと、クラウドへ移行した場合に、セッション管理、スケーリング、ロギングを行うために、アプリケーションに必要となるかもしれない変更についても取り上げます。

Java アプリケーション

クラウドにマイグレーションするアプリケーションを評価する際、当然最初に評価しなければならないのはアプリケーション自体です。この評価プロセス全体を通して、以下の質問に対する答えを明確にしておく必要があります。

  • アプリケーションが使用している Java の機能は何か?
  • アプリケーションに必要となる外部サービスと依存関係は何か?
  • アプリケーションはクラウド対応になっているか?
  • クラウド用にアプリケーションを更新するのに、どれだけの投資を厭わないか?
  • 管理手順を更新するのに、どれだけの投資を厭わないか?

一般に、単純な Tomcat スタイルのサーブレットや JSP アプリケーションをクラウドにマイグレーションするのは簡単であり、さまざまな選択肢の中からランタイムやサービスを選択することもできるでしょう。一方で、単純なアプリケーションであっても、データベースなどのサービスを扱う方法について検討する必要や、スケーリングが必要な場合には、セッション・アフィニティーに対処する方法についても検討する必要があります。最初の例では、データベースも含めた Tomcat 上で実行されるアプリケーション (以降、「Tomcat アプリケーション」とします) のマイグレーションをステップバイステップで説明します。その後、Java ワーカー・プロセスをクラウド内で実行する際の問題を検討します。シリーズの以降のチュートリアルでは、クラウドでのスケーリングとセッション・アフィニティーの問題について検討します。

アプリケーションで使用している機能に、リモート EJB や 2 相コミット処理をはじめとする高度な機能がある場合には、マイグレーションの選択肢は限定されてきます (あるいは、コストが高くなります)。そこで、このような類のアプリケーションにも適用できるいくつかの選択肢についても取り上げます。

アプリケーションで何を使用していて何が必要なのかは、たとえ正確にわからなくても、このチュートリアルのステップバイステップの説明に従えば、マイグレーション・ツールを使って分析することができます (正確に把握していると思う場合でも、マイグレーション・ツールを使用することをお勧めします)。

このチュートリアル・シリーズのパート 1 では、サンプル Java アプリケーションをクラウドにマイグレーションして、クラウド・ベースの SQL データベースに接続する方法を説明します。

Java ランタイム

クラウド内で Java アプリケーションを実行するには、複数の選択肢があります。1 つは、PaaS (Platform-as-a-Service) が提供する Java ランタイムを使用することです。その一例が、IBM Bluemix の Liberty for Java ランタイムです。この容易な手段を採れば、アプリケーション以外についての懸念はすべて取り除かれます。この方法ではアプリケーションをデプロイするだけでよく、Java ランタイムをインストールする必要も保守する必要もありません。IBM Bluemix がサポートしている Liberty for Java ビルドパックには、Java EE 7 と Liberty Profile が含まれています。Bluemix には、Tomcat 8.0.21 が含まれる、Cloud Foundry の Java ビルドパックも用意されています。このチュートリアルでは、どちらのビルドパックを使用する方法についてもステップバイステップで説明します。

Java ランタイムをより詳細に制御したい場合や、アプリケーションに必要な機能が Bluemix の Liberty for Java ランタイムで現在サポートされていない場合には、IaaS (Infrastructure-as-a-Service) をさまざまな選択肢の中から選び、その IaaS でインストールする Java 言語のバージョンを制御して管理することができます。IBM Bluemix では Java ランタイムとして Docker コンテナーまたは仮想マシンを選択することができます。こうした方法では、ランタイムとバージョンをよりきめ細かく制御することができますが、その場合、インストールと管理の作業が多少増えることになります。

詳しくは、3 つのランタイムとそれぞれに固有の機能について説明した「Bluemix Instant Runtimes, Containers or Virtual Machines?」を参照してください。

サービス

ランタイムの他にも、極めて重要な事項として、データベース、メッセージング・システム、LDAP ID マネージャーなどの外部依存関係に対処する方法を検討して決めなければなりません。これらの依存関係としては、クラウド・リソースを使用することもできます (例えば、IBM Bluemix 上の SQL Database のような、クラウド内の Database as a Service を使用するなど)。あるいは、外部リソースをオンプレミスに配置したままにし、Secure Gateway サービスを利用してアプリケーションから現在使用している依存関係に接続するという方法もあります。このシリーズでは、この両方の方法についてステップバイステップで説明します。

クラウド・アプリケーションに関する考慮事項

アプリケーションをクラウドにマイグレーションする際には、アプリケーションの設計が、クラウド・セントリックでないとしても少なくとも「クラウド対応」であるかどうかを理解しておく必要もあります。このチュートリアルで取り上げるマイグレーション・ツールは、アプリケーションをクラウドにマイグレーションした場合に問題が発生する恐れがある領域がないかを調べます。スキャン対象となる項目には、状態管理やロギングをはじめ、検討しなければならない一般的な項目が含まれます。チュートリアルの例では、HTTP セッションを使用したサンプル・アプリケーションのマイグレーション・シナリオを辿ります。ただし、クラウドの設計については深く掘り下げないので、クラウドの設計に関するベスト・プラクティスを取り上げた記事 (「クラウド・アプリケーションにとって最も重要な 9 つのルール」「12-Factor Apps in Plain English」など) を参照することをお勧めします。

ツール

IBM Bluemix では、Cloud Foundry、Docker、および仮想マシンによってアプリケーションのデプロイメントをサポートしています。従って、Java アプリケーションをどのように開発しているか、あるいはどのデプロイメント・ランタイムの方法を選択するかに関わらず、プログラムによってアプリケーションをクラウドにプッシュすることができます。最初の例では、Cloud Foundry のコマンド・ラインを使用します。

Eclipse を使用する場合、Bluemix 上でアプリケーションをマイグレーションしたり、デプロイしたりするのに役立つプラグインがいくつもあります。例えば、マイグレーション・ツールキット・プラグインでは、アプリケーションのソースを分析し、Bluemix へのマイグレーションに関するレポートとアドバイスを得ることができます。Bluemix へデプロイするためのプラグインもあります。この最初の例ではコマンド・ラインだけを使用します。その後は、アプリケーションのインポートおよび分析から、変更およびデプロイに至るまで、すべての作業を Eclipse で行います。Eclipse は必須ではありませんが、Java アプリケーションを扱う場合には Eclipse を使用することをお勧めします。

Tomcat アプリケーションを Bluemix Java ランタイムにマイグレーションする

では早速始めましょう。ここで使用する RedbookLibrary というサンプル・アプリケーションは、Tomcat 上で実行されます。このアプリケーションは『WebSphere Application Server v8.5 Migration Guide』で取り上げられているアプリケーションです。このガイドでは、WebSphere Full Profile、Tomcat、JBOSS、または WebLogic から Liberty Profile にマイグレーションする際に必要となる考慮事項を詳しく説明しています。私たちは、この Redbooks 版のデータベース・アクセス・プラクティスにいくつかの変更を加え、ローカルの Apache Derby データベースを使用するようにアプリケーションをセットアップしました。そのため、必ずこのチュートリアルに付属のアプリケーションを使用するようにしてください。

初期セットアップが完了したら、マイグレーション分析ツールを実行することから始めます。その後、以下の図に示すように、アプリケーションを Bluemix 上の Liberty for Java ランタイムにマイグレーションし、データベースには Bluemix の SQL Database サービスを利用します。

マイグレーション手順のイメージを示す図
マイグレーション手順のイメージを示す図

アプリケーションを作成するために必要となるもの

ステップ 1. アプリケーションをダウンロードする

このシリーズを通して、使用するそれぞれのサンプル・アプリケーションを用意してあるので、手順とツールを十分に理解できるよう、これらのアプリケーションを使用することをお勧めします。そうすれば、皆さんのお手元のアプリケーションに関しても、これから説明するのと同じ手順に従えばよくなります。

  1. サンプル Tomcat アプリケーションのコード (私たちが機能強化した RedbookLibrary コード) は、GitHub リポジトリーとして入手することができます。
  2. コマンド・ラインから git clone を実行して、このリポジトリーを複製します。以降は、このコマンドによって作成されたディレクトリー内で作業することになります。
    git clone https://github.com/kgb1001001/RedbookLibrary

ステップ 2. Cloud Foundry API ツールをインストールする

IBM Bluemix では Cloud Foundry API をサポートしているため、Java アプリケーションを開発する方法に極めて高い柔軟性がもたらされます。このチュートリアルでは、Cloud Foundry コマンド・ラインの使用方法を紹介します (すでに Eclpise を使用している読者や、IDE でのより統合されたエクスペリエンスを求めている読者のために、パート 2 では Eclipse を使用したマイグレーション方法を説明し、Liberty for Java Bluemix マイグレーション用プラグインと Bluemix デプロイメント用プラグインを紹介します)。

  1. GitHub Web サイトから Cloud Foundry コマンド・ライン・インターフェースをダウンロードしてインストールします。

ステップ 3. コマンド・ライン・マイグレーション分析ツールをインストールして実行する

IBM では、アプリケーションを Bluemix にマイグレーションする際の難易度を判断するために利用できるマイグレーション分析ツールをいくつか提供しています。その 1 つは、バイナリー評価ツールです。ここでは、このツールをコマンド・ラインから実行します。さらに詳細な分析を行うツールもありますが、そのツールを実行するにはソース・コードと Eclipse が必要になります。それについては、パート 2 で取り上げます。

  1. バイナリー評価ツールをダウンロードします。
  2. ダウンロードしたツールをインストールします。それには、java -jar binaryAppScannerInstaller.jar を実行します。
  3. ツールがインストールされたら、カレント・ディレクトリーを wamt サブディレクトリーに変更します。
  4. wamt サブディレクトリーから分析を実行するために、以下のコマンドを入力して実行します。
    java -jar binaryAppScanner.jar \<warファイルが含まれるディレクトリー>

    ここで、ディレクトリーは <Gitを複製した場所>\RedbookLibrary という形式で入力します (例えば、c:\\users\ibm_admin\RedbookLibrary など)。

    分析プログラムを実行中のコマンド・ラインのスクリーンショット
    分析プログラムを実行中のコマンド・ラインのスクリーンショット
  5. 上記のコマンドにより、テクノロジー分析結果の概要 (HTML 形式) が表示されます。アプリケーション評価レポートを表示する画面のスクリーンショット
    アプリケーション評価レポートを表示する画面のスクリーンショット
  6. 続いて、HTML 形式の詳細な分析レポートを実行することができます。このレポートでは、クラウドへ移行した場合に発生する可能性がある問題と、該当するファイルおよび行番号がハイライトされます。レポートにはこれらの問題に対処するための参照資料も記載されます。wamt サブディレクトリーから、以下のコマンドを入力して実行します。
    java -jar binaryAppScanner.jar \<warファイルが含まれるディレクトリー> --analyzeMigrationDetails --targetAppServer=bluemix詳細分析レポートを実行中のコマンド・ラインのスクリーンショット
    詳細分析レポートを実行中のコマンド・ラインのスクリーンショット

ステップ 4. デプロイメント・トポロジーを選択するために結果を分析する

バイナリー・スキャナーのテクノロジー・プレビューは、サンプル・アプリケーションの分析によって得られた重要な情報を提供します。

  1. 先ほどスクリーンショットを掲載した「Application Evaluation Report (アプリケーション評価レポート)」の「Web application technologies (Web アプリケーション・テクノロジー)」セクションには、このアプリケーションがサーブレットと JSP を使用していることが示されています。もちろんこれは、Tomcat アプリケーションなので当然のことです。このレポートの 1 列目を見るとわかるように、すべてのテクノロジーが Bluemix 上の Liberty for Java にマイグレーションされることになります。
  2. 「Java EE-related specifications in Java SE (Java SE の Java EE 関連の仕様)」セクションには、このアプリケーションが JDBC (Java Database Connectivity) を使用していることが示されています。このアプリケーションは、IBM Bluemix 上の Liberty for Java でも稼働するはずです。ただし、アプリケーションが JDBC を使用することを示す、この分析の概要では、データベースに対処する方法を決める必要があることを示唆しています。
  3. 詳細な分析は、さらに多くの情報を提供します (以降の図を参照)。実際、このレポートを初めて見たときには少し怖気づくかもしれませんが、幸いなことにリストアップされている項目のほとんどは、Tomcat で使用していたローカル Derby データベースによるものです。従って、クラウドへ移行する場合には当てはまりません。ファイル名の詳細を見ると、Derby のファイルからリストアップされたルールを簡単に判別することができます。ファイル名の詳細の例を示す画面のスクリーンショット
    ファイル名の詳細の例を示す画面のスクリーンショット
  4. Derby でのファイルに起因する問題を除外すれば、クラウドへのマイグレーションに関して注意する必要があるルールとして残るのは、「Capture log information (ログ情報のキャプチャー)」、「HTTP session persistence (HTTP セッション・パーシスタンス)」、「Use SQL Database service (SQL Database サービスの利用)」です。ルール別の詳細結果のスクリーンショット
    ルール別の詳細結果のスクリーンショット
  5. データベースには、Bluemix の SQL Database サービスを利用することをお勧めします (以下の図を参照)。このパート 1 では、まさにその通りにして、クラウド内でデータベースを使用する方法を説明するために、Bluemix の SQL Database サービスを利用します。シリーズの以降のパートでは、Secure Gateway 機能を使用して既存のデータベースに接続する方法を説明します。SQL Database サービスの利用を推奨する画面のスクリーンショット
    SQL Database サービスの利用を推奨する画面のスクリーンショット
  6. このレポートでは、アプリケーションで確認しなければならない項目として、「Capture log information (ログ情報のキャプチャー)」もリストアップされています。ヘルプを見ると、こうあります。

    「アプリケーションはログを System.err/System.out に記録することができるので、Cloud Foundry の Loggregator コンポーネントでログ・エントリーを収集することができます。Loggregator を使用すると、アプリケーションのログを tail 表示することや、最近のアプリケーション・ログのセットをダンプすることができます。」

    サンプル・アプリケーションでは、標準的な Java ロギング機能を使用して、デフォルト・ロケーションである System.out にログを記録しています。従って、ログ・エントリーは自動的に Loggregator によって収集されます。

    】「Capture log information (ログ情報のキャプチャー)」のヘルプ画面のスクリーンショット
    】「Capture log information (ログ情報のキャプチャー)」のヘルプ画面のスクリーンショット
  7. レポートでは、クラウドでのセッション・パーシスタンスもリストアップされています。これは注意が必要な点ですが、パート 1 では該当しません。今回はクラスタリングを行わないためです。セッション・キャッシングとクラスタリングは、シリーズの以降のチュートリアルで導入します。

ステップ 5. データベース・サービスを作成する

クラウド内のデータベースを使用することにしたので、次のステップでは、使用するデータベース・サービスを作成する必要があります。それには、IBM Bluemix ダッシュボードまたはコマンド・ラインのいずれかを使用することができます。このチュートリアルでは、引き続きコマンド・ラインを使用します。データベースを作成した後、アプリケーションをデプロイし、そのアプリケーションにデータベースをバインドしますが、データベースを作成する前に、アプリケーションがどのようにデプロイされて、どのようにデータベースを使用するのかを説明しておく必要があります。

Cloud Foundry でのベスト・プラクティスは、アプリケーションをデプロイする際に manifest.yml というファイルを使用することです。manifest.yml ファイルは、Java の JAR または WAR ファイルでのマニフェスト・ファイルの概念と似ていて、アプリケーションがどのように作られているかを Cloud Foundry ツールが認識できるようにするための情報で構成されています。

マニフェストは、YAML で作成されます。このファイルを読んで理解するには、YAML の次 2 つの側面さえ把握していれば十分です。

  • キーと値は、コロンとスペースで区切られています。
  • リストの新しい要素は、ハイフンとスペースで示されます。

サンプル・アプリケーションに付属の manifest.yml ファイルを見てみましょう。

  1. RedbookLibrary ディレクトリーで、manifest.yml ファイルを開きます。
    applications:
    - name: redbooklibrary
      memory: 512M
      path: RedbookLibrary.war
      host: redbook-library
      buildpack: liberty-for-java 
      services:
      - library_db
  2. このマニフェストの services: リストには 1 つだけ、library_db というサービスが指定されています。Cloud Foundry がアプリケーション内でサービスを利用するには、実行すべき 2 つのステップがあります。具体的には、(1) サービス・インスタンスを作成すること (1 つのスペースにつき 1 回だけ作成されます)、(2) 作成したサービス・インスタンスをアプリケーションにバインドすること (そのスペースのアプリケーションごとにバインドする必要があります) です。従ってこのサンプル・アプリケーションの場合は、「library_db」という名前のサービスを作成する必要があります。このサービスは、Cloud Foundry コマンド・ラインから作成することができます。それには、コマンド・ラインで以下のコマンドを入力します。
    cf login
  3. 使用するデータベース・サービスは sqldb です。無料のトライアル・プランを利用してサービス・インスタンスを作成し、アプリケーションが必要とするそのサービスに、「library_db」という名前を付けます。
    cf create-service sqldb sqldb_free library_db
  4. これで、サービスが作成されました (ただし、アプリケーションにはまだバインドされていません)。お望みであれば、Bluemix の GUI を調べて、このサービスがスペース内で使用可能になっていることを確認することができます。あるいは、以下のコマンドを入力することもできます。
    cf services
    このコマンドによって、自分のスペースに定義されたサービスのリストに「library_db」が含まれているのを確認することができます。

ステップ 6. クラウドにアプリケーションをデプロイする

マニフェストが重要である理由は、これまでに取り上げたすべての要素は、Cloud Foundry コマンド・ライン・ツールに対するコマンド・ラインのパラメーターやその他のコマンドによって定義しておく必要があるものだからです。こうした情報のすべてをマニフェストに記載しておけば、アプリケーションをデプロイするたびに cf push にすべてのパラメーターを追加した完全な形の長いコマンドを作成しなくてもよくなります。manifest.yml に情報を記載してしまえば、アプリケーションをデプロイするたびにその情報を再利用することができるのです。

このサンプル・アプリケーションには Bluemix 上に新しく作成した library_db サービスを利用させるので、アプリケーションが適切に構成されるようにする必要があります。Liberty for Java ビルドパックに含まれている素晴らしい機能の 1 つは、バインドされたサービスを自動的に構成する機能です。この機能のおかげで、アプリケーションを Bluemix 上の Liberty for Java ビルドパックにマイグレーションする作業が非常に容易になります。

ここでは、意図してこの自動構成機能を利用するようにアプリケーションをセットアップします。Bluemix 用に作成されている Java の例に従うことを困難にしている原因の 1 つは、その多くの例が JEE コーディングのベスト・プラクティスから逸脱していて、自動手法を使用していないことです。そのような例では自動手法の代わりに、Bluemix 内のプログラムでは Cloud Foundry がそれぞれのランタイムに渡す VCAP_SERVICES 環境変数から、バインドされたサービスの情報 (URL、ユーザー、パスワード) を取得できるという事実を利用しています。このことから、多くの Java プログラムの多くに含まれている IF 文では、これらの環境変数を検索し、見つかった場合にはそれらの変数に格納されている値を取得して、必要なサービスを呼び出すコード (データベース・ドライバーなど) の該当するパラメーターに設定しています。しかしそれでは、JEE の設計の趣旨にそぐわなくなってしまいます。

JEE は、この種の詳細を外部アプリケーション・サーバーの構成ファイル (WebSphere Liberty Profile で使用される server.xml ファイルなど) に外部化し、プログラムのコードでは JNDI を通じてサービスを抽象参照するだけでよくなるようにします。例えば、JDBC データソースにアクセスする必要があるサーブレットがあるとすると、JEE では通常、以下の形式の Resource アノテーションを使用して JDBC データソースにアクセスできるようにします。
@Resource(name = "jdbc/library_db")

JEE オブジェクトではないクラス (例えば、サ-ブレットや EJB など) の中では、次のように、標準的な JNDI ルックアップを使用して参照先の情報を取得することができます。
(DataSource) ic.lookup("java:comp/env/jdbc/library_db");

ここで Liberty Profile を使用すると、Bluemix の Liberty Profile ビルドパックが、自ら作成する Liberty サーバー用の server.xml ファイルを作成することで、自動的にこうした構成を行ってくれるようになります。この server.xml ファイルには、バインディングを行う適切なスタンザが含まれていて、Liberty アプリケーションにバインドされているサービスごとに、以下の形式の JNDI バインディングを自動的に作成してくれるのです。
<"jdbc"などのタイプ>/<サービス名>
マニフェスト・ファイルによって「library_db」という名前の SQL Database サービス・インスタンスをアプリケーションにバインドしてあるので、Liberty ビルドパックはそのインスタンスを、@Resource アノテーションが付けられた任意のステートメント、または特定の JDNI 名を検索する上記のタイプの JNDI ルックアップに自動的にバインドします。

Liberty ビルドパックが自動的にこの接続を行う対象のサービスを網羅したリストがあります。これらのサービスには、SQL Database (この例で利用しているサービス)、MySQL、PostreSQL、MQLight、Cloudant の他、多数のデータベースとサービスが含まれています。完全なリストについては、Liberty ビルドパックの資料を参照してください。

以上のことから、Java コードで作成されたほとんどのプログラムでは、嬉しいことにサービスのバインディングについて気にかける必要はありません!そのため、プログラムを実行させるために必要な一連の作業が大幅に単純化されます。

Bluemix によって Liberty 用の server.xml ファイルがどのように作成されたかを確認するには、Bluemix にデプロイされている Java Liberty アプリケーションを選択し、ダッシュボードで「Files (ファイル)」を選択した後、app/wlp/usr/servers/defaultServer/server.xml までナビゲートしてください。

これでアプリケーションをデプロイする準備が整いました。ここではマニフェストを使用するので、アプリケーションをデプロイするのは簡単です!

  1. コマンド・ラインから、「cf push -n <NEWHOST>」と入力して実行します。ここで <NEWHOST> は、アプリケーションが提供される「経路」に対して定義する名前です。(経路は、サブドメインに相当します。例えば、「redbook-library-abc」と定義すると (「abc」は自分のイニシャル)、http://redbook-library-abc.mybluemix.net でアプリケーションにアクセスできるようになります)。アプリケーションの経路が表示されている画面のスクリーンショット
    アプリケーションの経路が表示されている画面のスクリーンショット
  2. アプリケーションがデプロイされて、自動的に library_db サービス・インスタンスにバインドされます。実行中のアプリケーションには、ブラウザーで http://<NEWHOST>.mybluemix.net を指定するとアクセスすることができます。アプリケーションは、以下のような外観になっているはずです。 アプリケーションのウェルカム・ページのスクリーンショット
    アプリケーションのウェルカム・ページのスクリーンショット

ステップ 7. アプリケーションをテストする

理想的なのは、アプリケーションが正常に動作していることを検証するために実行できる、自動化されたテスト・ケースを用意しておくことです。このアプリケーションの場合、自動化されたテスト・ケースは用意していないので、以下の手順に従ってアプリケーションが正常に動作していることを確かめます。

  1. ブラウザーで、アプリケーションのホーム・ページ (例えば、http://redbook-library-abc.mybluemix.net など) にアクセスします。「Build The Databases (データベースの作成)」をクリックします。ブラウザーの「Back (戻る)」ボタンを使ってホーム・ページに戻ります。
  2. 「Populate the Database with test data (データベースにテスト・データを取り込む)」をクリックします。ブラウザーの「Back (戻る)」ボタンを使ってホーム・ページに戻ります。
  3. user1 / password1 としてログインします。
  4. 以下のような結果が表示されていることを確認します。アプリケーションのホーム・ページのスクリーンショット
    アプリケーションのホーム・ページのスクリーンショット
  5. 配色に使用する色を入力して、「Set (設定)」をクリックします。紫色を背景に前面は黒にすると、とても見栄えが良いのではないかと思いました。配色を選択する画面のスクリーンショット
    配色を選択する画面のスクリーンショット
  6. Bluemix と SQLDB をそれぞれのユーザー・インターフェースを使って確認することもできます。その場合は、http://bluemix.net にログインします。
  7. ダッシュボードでは、作成した RedbookLibrary を見つけます。liberty-for-java ビルドパックが使用されていること、そしてアプリケーションが実行中であることが示されるはずです。Bluemix ダッシュボードを示すスクリーンショット
    Bluemix ダッシュボードを示すスクリーンショット
  8. redbooklibrary をクリックします。すると、アプリケーションに SQL Database サービスがバインドされていることを確認できます。「Launch (起動)」をクリックし、SQL Database UI が表示されたら、「Work with Tables (テーブルの操作)」をクリックします。これで、テーブルとデータを探索することができます。 テーブルを表示する画面のスクリーンショット
    テーブルを表示する画面のスクリーンショット

ステップ 8. クリーンアップする

サンプル・アプリケーションをデプロイして、新しい手順を自分のアプリケーションにどのように適用できるのかを試した後は、クリーンアップしておくのが最も望ましいです。

  1. アプリケーションを停止します: cf stop redbooklibrary
  2. サービスをアンバインドします: cf unbind-service redbooklibrary library-db
  3. サービスを削除します: cf delete-service library-db.
  4. アプリケーションを削除します: cf delete redbooklibrary (注: アプリケーションとサービスを本当に削除するかどうかを尋ねられたら、「y」と答えます)。

ステップ 9 (オプション). アプリケーションを Cloud Foundry Java ビルドパック (Tomcat) にデプロイする

前述のように、IBM Bluemix では Liberty for Java ランタイムをサポートしているだけでなく、Tomcat 8.0.21 を使用した Cloud Foundry Java ビルドパックも用意しています。Tomcat を使い続けたいとしたら、Liberty for Java ランタイムの代わりに Cloud Foundry Java ビルドパックを使用してアプリケーションをデプロイするのも簡単です。唯一の変更は、マニフェスト・ファイルで -b <ターゲット・ビルドパック> を指定するように更新することです。便宜を図るため、適切な変更を加えた 2 つ目のマニフェスト・ファイルを含めておきました。

  1. コマンド・ラインから、cf login を実行して Bluemix にログインします。
  2. 既存の manifest.yml ファイルを削除して、manifest.tomcat ファイルを manifest.yml という名前に変更します (manifest.liberty は元の manifest.yml と同じなので、ご心配なく)。Tomcat 版のマニフェスト・ファイルは、先ほど検討した Liberty 版のファイルとは少し異なります。1 つは、ビルドパックは Cloud Foundry の java_buildpack (Tomcat が含まれているビルドパック) を参照していることです。もう 1 つは、このマニフェストにはサービス・セクションが含まれていないことです。というのも、Tomcat 版が使用するインメモリー Derby データベースの JAR ファイルは、RedbookLibrary WAR ファイル内に完全に収容されているからです。
  3. アプリケーションを Java ビルドパックにデプロイします。例えば、以下のようなコマンドを使用します。
    cf push -n NEWHOST-TOMCAT
  4. ステップ 7 で行ったように、アプリケーションをテストします。Bluemix ユーザー・インターフェースを使用して、アプリケーションがこれまでとは違って java_buildpack にバインドされていることを確認することができます。Bluemix ユーザー・インターフェースのスクリーンショット
    Bluemix ユーザー・インターフェースのスクリーンショット
  5. 以下のコマンドで、アプリケーションをクリーンアップします。
    cf stop redbookLibrary
    cf delete redbookLibrary

Tomcat アプリケーションで SQL Database を利用する場合には、リソース構成時に追加のステップを実行する必要があります。java_buildpack には、Liberty for Java ビルドパックで使用した、自動的にデータベースをバインドする機能がありません。この機能は、Bluemix 上で Liberty for Java ビルドパックを利用するメリットの 1 つです。Liberty for Java ビルドパックを選択するとよい理由についての詳細は、Liberty で現在利用できる機能の多くについて説明している「WAS classic or WAS Liberty: How to choose?」を参照してください。

まとめ

このチュートリアルでは、Java アプリケーションをクラウドにマイグレーションする際に選択できるさまざまな方法について見てきました。ランタイム・サービスとツールに関する重要な考慮事項を説明した後、コマンド・ライン・ツールを使用して、Tomcat アプリケーションを分析する方法と、Liberty for Java ランタイムまたは Cloud Foundry Java ビルドパックのいずれかにアプリケーションをマイグレーションする方法を、ステップバイステップで説明しました。シリーズの次回のチュートリアルでは、Eclipse を使用して Java アプリケーションをマイグレーションする方法を説明します。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Java technology
ArticleID=1024501
ArticleTitle=Bluemix を利用したハイブリッド・クラウドに Java アプリケーションをマイグレーションする、パート 1
publish-date=12242015