SAP CP Trial環境でMulti Target Applicationを作ってみる【JavaアプリとDBModuleの連携】

# はじめに

前回、SAP CloudPlatform Trial環境でMTA(Multi Target Application)を作成して
MTAプロジェクトにDBModuleを追加しました。

【前回】
　[SAP CP Trial環境でMulti Target Applicationを作ってみる【DBModuleの作り方】](https://qiita.com/yonekura-h/items/6aea4da68da8e99fdace)

最終的には
> DB　⇔　OData　⇔　Fiori
の連携を実現できるMTAプロジェクト作成を目指します。

ということで、
今回はODataServiceの作成の前提として、
前回作成したDBModuleと連携できるJavaアプリを同じMTAプロジェクト内に作成してみます。

そのため、SAP CloudPlatform Trial環境でのHDI Containerインスタンス作成や
MTA・DBModuleの作成が前提となっています。

# Java Moduleの追加

DBModuleを含むMTAプロジェクトを右クリックし、
「New」→「Java Module」を選択します。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/78efc31b-52c1-e15b-ae2b-8c14623159e7.png)

作成するJava Moduleのテンプレートを選びます。
「Spring Boot Application」を選択してNext
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/45a8ff68-9963-3a70-7e62-fb0f71fa799f.png)

次にModuleの名前を決めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/b8c667fd-133b-86d0-408a-f0b7efc6a26b.png)

Finish を押下します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/5e90ddc3-11cb-2636-ed21-7d6fb82beec3.png)

Java Moduleが追加されて、
中身には"Hello World !!"となにかDBとの接続をしてくれそうなコードがありました（HelloController.java）
![図19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/5af09acc-8f2d-8acc-7249-d23836a01a0f.png)

動きそうだったので、
`springMod`を選択した状態で実行ボタンを押下し、
Java Moduleを実行してみました。
コンソール部分にRunningって出たらOK

![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/76700f30-0551-7868-b0ac-bd67b23b4801.png)


SAP CloudPlatformのコクピット画面からApplicationsを確認します。
ステータスが`Started`でspringModと書いてあるやつがあるので詳細画面を開きます。
![図21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/6b3caefa-ee28-3bf1-7769-f55cb6677787.png)

URLがあるのでクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/efee33ba-7392-0c8a-1b0f-69c29610ca3e.png)


「Hello World !!」が表示されました。
しかし、JDBCはつながっていないみたいです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/bf76363a-e0aa-5046-ae79-d1a8b52353b1.png)

もう一度WebIDEに戻り、
HelloController.javaの中のDB接続周りを確認してみます。
![図22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/0ca97e8f-9f6e-d1b7-4cd2-66944a8eedf9.png)

```java
System.getenv("VCAP_SERVICES")
```
この中身を確認したところ、DBの接続設定を取得しようされていました。
取得されている内容はCF環境のdevスペースにあるHDI ContainerのServiceInstanceの一覧に増えていた以下のインスタンスの詳細情報でした。
![図23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/ead7ee50-c6bf-8d35-27f4-d8a8fe23af3d.png)

![図24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/7e035464-65f3-e5d1-d1af-0dec67b0073d.png)


取得時のKey等が違ったので、以下のように修正

```java

  private Connection getConnection() {
    Connection conn = null;
    String DB_USERNAME = "";
    String DB_PASSWORD = "";
    // String DB_HOST = "";
    // String DB_PORT = "";

    try {
        JSONObject obj = new JSONObject(System.getenv("VCAP_SERVICES"));
        JSONArray arr = obj.getJSONArray("hanatrial");
        DB_USERNAME = arr.getJSONObject(0).getJSONObject("credentials").getString("user");
        DB_PASSWORD = arr.getJSONObject(0).getJSONObject("credentials").getString("password");
        // DB_HOST = arr.getJSONObject(0).getJSONObject("credentials").getString("host").split(",")[0];
        // DB_PORT = arr.getJSONObject(0).getJSONObject("credentials").getString("port");
        // String DB_READ_CONNECTION_URL = "jdbc:sap://" + DB_HOST + ":" + DB_PORT;
		String DB_READ_CONNECTION_URL = arr.getJSONObject(0).getJSONObject("credentials").getString("url");
		
        conn = (Connection) DriverManager.getConnection(DB_READ_CONNECTION_URL, DB_USERNAME, DB_PASSWORD);
    } catch (Exception e) {
        System.out.println("Connection Error");
    }

    return conn;
  }
```

保存して再度実行してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159467/eaf99713-c2ba-6c43-c5d8-8312c13c7190.png)

うまくいった感じがします。

# おわりに

上記まででひとまずMTAで実現する
　　DB　⇔　OData　⇔　Fiori
のOData部分のベースが作成できたと思います。

次は今回連携したJavaアプリをベースに、
OData部分をで作成したいと思います。