JavaEE 7 Cargo TrackerアプリケーションをOracle Application Container Cloud上のGlassFishで動作させる


# はじめに

[JavaEE 7 Cargo TrackerアプリケーションをOracle Developer Cloudを使って動かす（ビルド編）] (http://qiita.com/nobuhikosekiya/items/1ba564fdc0a49650fae3) でJavaEE 7 Cargo TrackerプロジェクトのビルドをOracle Developer Cloud Serviceで実践してみました。

今回は、Oracle Application Container Cloud Serviceというクラウド上のコンテナでGlassFishとともにこのCargo Trackerをデプロイして動かしてみます。

※前回の投稿の作業をしてある前提の手順になっています。

# Oracle Application Container Cloud用のデプロイアーカイブの作成

Oracle Application Container Cloud Service側で用意されているのはコンテナ（中はDockerが動いています）と、Java SEランタイムです。JavaEEのランタイム（今回はEmbedded GlassFish)とアプリケーションはユーザーが用意し、デプロイアーカイブとしてデプロイする必要があります。
デプロイアーカイブには上記2点のほかに、起動方法やその他オプションを設定したmanifest.jsonファイルを入れておく必要があります。
今回デプロイアーカイブ自体の作成方法の詳細は割愛します。Mavenを使って簡単にアーカイブファイルを作成できるコードを用意しています。

今回もOracle Developer Cloud Serviceを使ってデプロイアーカイブをビルドするやり方を紹介しますが、Developer Cloud を使うのは必須ではありません。普通にローカル環境で手で上記リソースをzipにパッケージして作ることもできます。


## Developer Cloud ServiceのGitリポジトリにGlassFish起動クラスのコードをインポート

まずEmbedded GlassFishを起動のためのjavaクラスのコードをGitHubからインポートしてください。

Developer CloudのHomeタブからGitリポジトリを追加します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/f255fed4-8533-ed94-e996-92aecae4ef7f.png)

名前はembedded-glassfish-starterとします。
Import existing repositoryを選択し、以下のURLを入れます。
https://github.com/nobuhikosekiya/embedded-glassfish-starter.git

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/ba59e1bc-d15e-5609-e983-af5b03ca69ad.png)
インポートしたら、Developer Cloudのコード画面から確認してみてください。

## Developer Cloud ServiceのGitリポジトリにApplication Container Cloudデプロイパッケージ作成用のMavenプロジェクトをインポート

もう一つGitリポジトリを追加します。
名前はaccszipbuilder-cargotrackerとします。
以下のURLからインポートしてください。
https://github.com/nobuhikosekiya/accszipbuilder-cargotracker.git
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/1f64188d-ab85-8b3c-4a48-fc7aebf6ded4.png)

この段階でのGitリポジトリはこのようになっていると思います。
※Cargo-Tracker.gitは
[JavaEE 7 Cargo TrackerアプリケーションをOracle Developer Cloudを使って動かす（ビルド編）] (http://qiita.com/nobuhikosekiya/items/1ba564fdc0a49650fae3) 　でインポートしています。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/950bf058-5ace-fa4e-c7b7-6b5d0e7ad993.png)


## デプロイパッケージ作成用のHudsonビルドジョブを作成

Developer CloudのBuildタブを選択し、New Jobを押します。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/15b5cba8-7c41-41d1-a58d-bd232b98ec77.png)

build-accszip-cargotrackerというジョブ名で作成します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/fa87e378-14ce-fab1-3237-95fa595e6973.png)

ここからはジョブの中の設定です。

まず、今回一部コードがJava 8のAPIを使っているので、JDKとしてはJDK 8を指定します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/ba7d0190-aa5b-1d91-1cfb-e6f2f9eb53fa.png)

次に利用するコードの指定をSource Controlタブで行います。
ここではプロジェクトに登録してある3つのGitリポジトリを指定します。Addボタンで複数を指定できます。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/766c8fb8-93e1-359b-bcf4-400ccb5a8db3.png)
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/5788d9e4-45ee-716d-3bdd-3c1c267e1115.png)

注意点として、Local Subdirectoryでそれぞれのコードをダウンロードするディレクトリを分けておく必要があります。今回は以下のGitとSubdirectoryの指定にしました。

* Cargo-Tracker.git ... cargotracker
* accszipbuilder-cargotracker.git ... accszip
* embedded-glassfish-starter.git ... glassfishstarter

その他Advanced Repository SettingsのNameとReference Specはブランクで大丈夫です。一度保存すると自動的に値が入ります。

次はビルドステップです。さきほどの3つのGitコードがそれぞれMavenプロジェクトですので、ここで3回Mavenコマンドを定義します。それぞれpom fileのパスを指定します。

最初。Pom File はcargotracker/pom.xml
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/fc85190d-7b5f-3e76-339a-f03a371d4db2.png)

2つめ。Pom File はglassfishstarter/embeddedglassfishstarter/pom.xml
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/be6c0161-1d9d-3435-665e-3dbd410c38ed.png)

3つめ。Pom Fileは　accszip/accszipbuilder-cargotracker/pom.xml
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/8b52ac57-ae2d-4875-9fb4-60808860cef9.png)

次に、Post Buildでmavenで生成されたファイルを保存するようにします。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/93db130e-36d7-aecf-5336-31738a97d11d.png)

設定は以上です。Saveボタンを最後に押します。

Build Nowボタンからさっそくジョブを実行しましょう。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/d74f6e7f-2502-7329-2882-18ef3162dde1.png)

うまくいけば、成功マークが出ます。4分程度ビルドにかかります。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/7175df7a-cb14-247a-0798-69707760e180.png)

ビルド番号のリンクをクリックし、保存されているBuild Artifactsを核にします。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/429437f4-a1ba-c181-a03d-28584a10ccc8.png)

複数保存されていますが、あとでデプロイに使用するのはzip形式のファイルのみです。クリックしてダウンロードできますが、GlassFishが丸ごと含まれているため80MBと大きいです。

zipの中はこんな感じになっています。3つファイルがあることを確認してください。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/175f375f-524b-3f82-f41e-fc098895fd2e.png)

embeddedglassfishstarter-jar-with-dependencies.jarの中をさらにのぞいてみます。基本的にEmbedded GlassFishのプログラムです。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/99fa127d-fbe0-5151-6494-20e441be1bbc.png)

ただ、com.example.embeddedglassfishstarter.EmbeddedGlassFish.class という起動クラスだけ、GlassFish本体とは異なるjavaクラスです。これが中に混ざっていることを確認しましょう。

manifest.jsonの中はこのようになっています。

```
{
  "runtime": {
      "majorVersion": "8"
  },
  "command": "java -Dappfile.name=cargo-tracker.war -Dcontextroot=cargo-tracker -jar embeddedglassfishstarter-jar-with-dependencies.jar",
  "release": {
    "version": "0.0.1-SNAPSHOT"
  }
}
```

# Oracle Application Container Cloud Serviceへのデプロイ

Developer CloudのDeployタブを選択して、Deploy設定を追加します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/c9fcba8d-2aaf-ec91-b4b7-fbaa9a95ad9e.png)

適当な名前を入れたあと、DeploymentTargetとしてApplication Container Cloud Serviceの情報を登録します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/4b1c5fc7-271f-9bce-d200-34c0f7acd535.png)
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/2c34ddcc-4370-ae9d-6c39-e12ac1953428.png)
各欄に自身のアカウント情報を入力してください。

入力後、Test Connectionボタンを押し、成功したらその後Use Connectionボタンで登録します。

次にRuntimeはJavaを選択します。Typeは今回はOn Demandで、先ほど実行したJobと、成功したBuild番号、そしてArtifactとしては複数選択できる中の、**zipファイル**を選択します。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/2a60f745-a922-8cdb-089a-974429ce957e.png)

最後、Save and Deployボタンで終了です。

うまくいけば画面右側にDeployment Succeededと出ます。失敗の場合はFailedです。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/44b65413-d1da-5252-6a58-6c17a80d3ee7.png)

# Application Container Cloud Service画面の確認

さきほどのDeploy設定画面のDeploy to ACCSというところにリンクがあり、クリックするとApplication Container Cloud Serviceの画面に飛びます。デプロイが成功している場合は下のようにインスタンスができています。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/f35bb4e5-e35b-9d53-9803-a6b4da631def.png)

もしデプロイがFailの場合は、Application creation and deletion historyを開き、FailしたときのServer Logsをクリックしてダウンロードしてみてください。（ダウンロード時にも認証が必要です。正しく認証してもエラーがなぜか出ますが問題なくログはダウンロードできました）
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/efea8f81-a4af-4ad3-c8d9-11cfaea3a0e3.png)

デプロイが成功している場合、インスタンスのURLをクリックしましょう。404 Not Foundが出ますが、その後にURLの後ろに/cargo-trackerのパスを追加してください。
例：`https://cargo-tracker-accs-自身のドメイン名.apaas.us6.oraclecloud.com/cargo-tracker`

Cargo Trackerが表示されます。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/109197/e315e660-553a-6dee-863c-59263d809e82.png)

# おわり
今回クラウド上の操作だけJavaEE 7のアプリケーションをデプロイして動かすことができました。いかがだったでしょうか。