検索
連載

“使用”より“構築”で学ぶオープンPaaS「OpenShift」DevOps時代のJavaプログラマのためのオープンクラウド入門(1)(5/5 ページ)

オープンなクラウドで重要性を増すJava。DevOps時代のJavaプログラマはアプリケーション開発者(Dev)もデプロイや運用(Ops)面におけるクラウド/インフラ技術への幅広い理解が必要となる。本連載では、さまざまなオープンクラウド技術を紹介していく。初回は、オープンソースのPaaSであるOpenShiftを紹介。どんな技術を使ってPaaSが実装されているのかを理解しよう

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

OpenShiftの設定

 ワークベンチには[JBoss Central]が表示されます。この中にOpenShiftアプリケーションを作成するためのメニューがあるので、これをクリックします。

 接続画面が表示されます。[Password]には「admin」と入れて[Next]をクリックします。[Secure Storage]の画面でも[Password]と[Confirm password]へ「admin」と入れて[OK]をクリックします。providing additional informationを追加するか聞かれますが、これは[No]をクリックします。

 [New OpenShift Application]画面では、[Name]へ「hellojboss」、[Type]へ「jbossas-7」、[Gear profile]へ「small」を指定し、[Embeddable Cartridges]の「mysql-5.1」をチェックして[Next]をクリックします。後は画面に従って進み、最後に[Finish]をクリックします。

 これで、hellojbossのWebアプリが作成されます。「http://hellojboss-atmark.example.com」をWebブラウザで開くと、「Welcome To OpenShift, JBossAS7 Cartridge」の画面が表示されます。

openshift-java-clientを使ってみよう

 JBoss Toolsに含まれるOpenShiftプラグインは、「openshift-java-client」を使っています。これを使うと、OpenShiftのREST APIを利用できるJavaアプリを簡単に実装できます。GitHubで公開されているので、使ってみましょう。

$ cd ~/workspace
$ git clone https://github.com/openshift/openshift-java-client.git
$ cd openshift-java-client

 パッケージを作成します。これにより、targetディレクトリにJARファイルが生成されます。

$ mvn -Dmaven.test.skip=true package

 このパッケージについて、「mvn dependency:tree」コマンドを使って、利用しているJARファイルの依存関係を確認しましょう。

$ mvn dependency:tree
略
[INFO] com.openshift:openshift-java-client:jar:2.0.3-SNAPSHOT
[INFO] +- org.jboss:jboss-dmr:jar:1.0.0.Final:compile
[INFO] +- com.jcraft:jsch:jar:0.1.44-1:compile
[INFO] +- junit:junit:jar:4.8.2:test
[INFO] +- org.mockito:mockito-core:jar:1.9.0-rc1:test
[INFO] |  +- org.hamcrest:hamcrest-core:jar:1.1:test
[INFO] |  \- org.objenesis:objenesis:jar:1.0:test
[INFO] +- org.easytesting:fest-assert:jar:1.4:test
[INFO] |  \- org.easytesting:fest-util:jar:1.1.6:test
[INFO] +- commons-io:commons-io:jar:2.1:test
[INFO] +- org.slf4j:slf4j-api:jar:1.6.4:compile
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.4:compile
[INFO] \- log4j:log4j:jar:1.2.16:compile
略

 Eclipse上で、新規プロジェクトとしてJavaプロジェクトを作成します。ここでは、「simple_rhc」というプロジェクト名とします。「openshift-java-client-2.0.3-SNAPSHOT.jar」と、これが依存するJARファイルを「lib」ディレクトリへ用意します。依存関係は先ほど確認したので、「$HOME/.m2」にある必要なライブラリを次のようにしてコピーします。

$ mkdir ~/workspace/eclipse/simple_rhc/lib
$ cd ~/workspace/eclipse/simple_rhc/lib
$ cp $HOME/workspace/openshift-java-client/target/openshift-java-client-2.0.3-SNAPSHOT.jar .
$ cp $HOME/.m2/repository/org/jboss/jboss-dmr/1.0.0.Final/jboss-dmr-1.0.0.Final.jar .
$ cp $HOME/.m2/repository/com/jcraft/jsch/0.1.44-1/jsch-0.1.44-1.jar .
$ cp $HOME/.m2/repository/junit/junit/4.8.2/junit-4.8.2.jar .
$ cp $HOME/.m2/repository/org/mockito/mockito-core/1.9.0-rc1/mockito-core-1.9.0-rc1.jar .
$ cp $HOME/.m2/repository/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar .
$ cp $HOME/.m2/repository/org/objenesis/objenesis/1.0/objenesis-1.0.jar .
$ cp $HOME/.m2/repository/org/easytesting/fest-assert/1.4/fest-assert-1.4.jar .
$ cp $HOME/.m2/repository/org/easytesting/fest-util/1.1.6/fest-util-1.1.6.jar .
$ cp $HOME/.m2/repository/commons-io/commons-io/2.1/commons-io-2.1.jar .
$ cp $HOME/.m2/repository/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar .
$ cp $HOME/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar .
$ cp $HOME/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar .

 これで、openshift-java-clientを使える準備ができました。

 Eclipseで、simple_rhcをリフレッシュしてライブラリファイルを反映します。ビルドパスへ、これらのjarファイルをすべて追加したら、「jp.example」パッケージを作成します。最後に、次のRhc.javaを作成します。

package jp.example;
 
import com.openshift.client.IApplication;
import com.openshift.client.IDomain;
import com.openshift.client.IEmbeddedCartridge;
import com.openshift.client.IOpenShiftConnection;
import com.openshift.client.IUser;
import com.openshift.client.OpenShiftConnectionFactory;
import com.openshift.client.configuration.OpenShiftConfiguration;
 
public class Rhc {
  public static void main(String[] argv) throws Exception {
    String applicationId = "simple-rhc";
    String username = "admin";
    String password = "admin";
    IOpenShiftConnection connection = new OpenShiftConnectionFactory()
      .getConnection(applicationId, username, password,
        new OpenShiftConfiguration().getLibraServer());
    IUser user = connection.getUser();
    System.out.println("User Info");
    IDomain domain = user.getDefaultDomain();
    if (domain != null) {
      System.out.println("\tdomain.getId():\t" + domain.getId());
      System.out.println("\tuser.getRhlogin:\t" + user.getRhlogin());
    }
    System.out.println("");
    System.out.println("Application Info");
    if (domain != null) {
      for (IApplication app : domain.getApplications()) {
        System.out.println("\tapp.getName():\t" + app.getName());
        System.out.println("\t\tapp.getCartridge().getName():\t"
          + app.getCartridge().getName());
        System.out.println("\t\tapp.getCreationTime():\t"
          + app.getCreationTime());
        System.out.println("\t\tapp.getUUID():\t\t" + app.getUUID());
        System.out.println("\t\tapp.getGitUrl():\t" + app.getGitUrl());
        System.out.println("\t\tapp.getApplicationUrl():\t"
          + app.getApplicationUrl() + "\n");
        System.out.println("\t\t Embedded:");
        for (IEmbeddedCartridge cartridge : app.getEmbeddedCartridges()) {
          System.out.println("\t\t\t" + cartridge.getName() + " - "
            + cartridge.getUrl());
        }
        System.out.println("");
      }
    }
  }
}

 Rhcクラスについては、openshift-java-clientライブラリの機能の一部を確認しています。使用しているクラス名から大体の機能は分かるはずです。IOpenShiftConnection型のconnection変数を使ってOpenShiftへ接続し、ユーザー情報とカートリッジの情報を取得しています。

 EclipseからJavaアプリケーションとして実行すると、結果は次のようになります。

log4j:WARN No appenders could be found for logger (com.openshift.internal.client.RestService).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
User Info
  domain.getId():  atmark
  user.getRhlogin:  admin
 
Application Info
  app.getName():  hello
    app.getCartridge().getName():  php-5.3
    app.getCreationTime():  Mon Feb 18 21:21:26 JST 2013
    app.getUUID():    80960c1fac53477a9e4597f948c8a7e3
    app.getGitUrl():  ssh://80960c1fac53477a9e4597f948c8a7e3@hello-atmark.example.com/~/git/hello.git/
    app.getApplicationUrl():  http://hello-atmark.example.com/
 
     Embedded:
      php-5.3 - null
 
  app.getName():  hellojboss
    app.getCartridge().getName():  jbossas-7
    app.getCreationTime():  Mon Feb 18 21:40:50 JST 2013
    app.getUUID():    419e974cc53640f783fbd3048aedfd2b
    app.getGitUrl():  ssh://419e974cc53640f783fbd3048aedfd2b@hellojboss-atmark.example.com/~/git/hellojboss.git/
    app.getApplicationUrl():  http://hellojboss-atmark.example.com/
 
     Embedded:
      jbossas-7 - null
      mysql-5.1 - mysql://127.0.250.129:3306/

 時刻やハッシュ値は環境によって変わります。openshift-java-clientを使って、OpenShiftのアプリ情報を取得できていることが分かります。

使うだけではなく、調査することで仕組みを知ろう

 以上、簡単ですが、OpenShiftについて解説しました。OpenShiftのサービスを使ってみるだけでも楽しいのですが、こうやってOpenShift Originを用意して、いろいろと調査してみると、どんな技術を使ってPaaSが実装されているのかを理解できます。

 今回紹介した内容は、ほんの一部ですが、皆さんもいろいろと調べて楽しんでみてください。

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る