Kony FabricでJavaServiceを動かしてみた


## 目次
1. はじめに
1. jarファイルを作成する
1. Integration Serviceを設定する
1. クライアントアプリの作成
1. 動作の確認
1. まとめ

## はじめに
Kony Fabricには、クライアントからの要求を受けてJavaで処理を実行し結果を返すことができるJavaServiceという機能があります。Javaであらかじめjarファイルを作成しておき、それをFabric Consoleから登録することで利用が可能になります。

今回はFabric Applicationが既に作成済みであることを前提に、そこにJavaServiceを追加してみたいと思います。

今回作るJavaServiceは、クライアントが送信したParameterの値をそのまま送り返す単純なものとします。

## jarファイルを作成する
### プロジェクトの作成 
今回はjarファイルをEclipse(Version: 2020-12 (4.18.0))で作成していきます。

まず「ファイル」→「新規」→「Mavenプロジェクト」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/10b61123-9908-fa55-ce7e-80085230d8ae.png)


シンプルなプロジェクトの作成(アーキタイプ選択のスキップ)と、デフォルトワークスペース・ロケーションの使用にチェックを入れて「次へ」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/6f800cb2-5fc0-7f98-04eb-7750cd8321c1.png)

グループId、アーティファクトIdに任意の値を入れて「完了」を選択。ここではどちらも"KonyExampleReturnParam"とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/9961f43b-d2bb-f05e-7d30-3b0aea710fe1.png)

Mavenプロジェクトが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5fad2f65-608e-f609-0313-f97d44b1963c.png)

### 依存ライブラリの追加
Fabricに登録して動作させるjarファイルを作成するためには、Konyのmiddlewareに依存する必要があります。

パッケージエクスプローラーからpom.xmlをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5bdbb1e6-8c4f-42a9-c0ff-7b714daf1b31.png)

「依存関係」タブを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/52c93c51-db75-7292-e202-e88c1b87105d.png)

「追加」を選択し、グループId, アーティファクトId、バージョンに以下の値を入力後、OK選択

グループId: com.kony.middleware
アーティファクトId: middleware-api
バージョン: 9.4.0.2

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/eff93d80-2109-9889-75c6-38480724dbe0.png)

※以下Mavenリポジトリの値を入力しています

https://mvnrepository.com/artifact/com.kony.middleware/middleware-api/9.4.0.2

依存関係が追加されるので、Ctrl+S(Command+S)で保存します。

### 処理を実装
Javaで処理を実装していきます。

まずパッケージエクスプローラーのsrc/main/javaで右クリックし、「新規」→「パッケージ」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c2d48c99-4af5-2d86-1c90-511cdf46b865.png)

パッケージ名に任意の値を入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/12a393d8-d1ad-201f-54a7-a7c1a61a5c46.png)

作成されたパッケージを右クリックし、「新規」→「クラス」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/85491021-914a-1786-eb2f-d891b873eb7c.png)

名前に任意のクラス名を入力して「完了」を選択。今回はクラス名をKonyExampleReturnParamServiceとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/19e0baba-e4fb-e5b4-8445-cc3efdd43f6f.png)

KonyExampleReturnParamService.javaに、以下のように実装します。


```KonyExampleReturnParamService.java
package jp.co.konyexample.konyexamplereturnparam;

import com.konylabs.middleware.common.JavaService2;
import com.konylabs.middleware.controller.DataControllerRequest;
import com.konylabs.middleware.controller.DataControllerResponse;
import com.konylabs.middleware.dataobject.Param;
import com.konylabs.middleware.dataobject.Result;

public class KonyExampleReturnParamService implements JavaService2 {

    public Object invoke(String methodID, Object[] objects, DataControllerRequest request, DataControllerResponse response) throws Exception {
        String param1 = request.getParameter("Param1");
        
        Result result = new Result();
        result.addParam(new Param("MethodID", methodID));
        result.addParam(new Param("Param1", param1));
        return result;
    }

}
```

com.konylabs.middleware.common.JavaService2のinvokeメソッドをオーバーライドして、受け取ったMethodIDとパラメータ(Param1)をResultオブジェクトに追加し、クライアントに返す処理とします。

最後に、こちらをjarにします。

パッケージエクスプローラーからプロジェクト名を右クリックし、「エクスポート」選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e6387f9b-0421-67f8-6fdc-7f95beca2f6e.png)

Java→Jarファイルを選択して「次へ」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/568b9d3a-206e-bb36-ee69-2f7aa4ae4328.png)

「生成されたクラス・ファイルとリソースをエクスポート」をチェックし、エクスポート先に任意のディレクトリ・ファイル名を選択して「完了」を選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/2caf148b-78a9-dd2e-68f0-9b8886942860.png)

成功すると選択したディレクトリにjarファイルが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/bcd95ccc-6e04-fccf-d836-f3505a31fab5.png)

## Integration Serviceを設定する
Kony Fabric ConsoleのConfigure Service→Integrationを選び、+ボタンからAdd New Serviceを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/1e7770dc-1c6f-156d-6e63-91f8b6751b34.png)

ServiceのNameを今回はKonyExampleReturnParamServiceとします。Service TypeはJavaを選択。Upload Newで今回作成したjarファイルを選択し、Saveします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/48093a72-63b2-fa58-7748-1fca9f5a327a.png)

Operation Listタブでオペレーションを追加します。今回はgetParamオペレーションとします。Class Nameは今回作成したKonyExmapleReturnValueServiceを選択し、ADD OPERATIONします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/ec39ea73-c6cd-d965-c7db-b97797fd844a.png)

getParamのタブが現れます。Request inputにNAME:Param1、TEST VALUE: TEST_VALを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/2a11ab74-4f62-93ec-9707-49384868472e.png)

Select an Environmentから環境を選び、SAVE AND FETCH RESPONSEを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/db254f1f-6e75-167e-4c82-be164cfccd6e.png)

正しくjarが動作すれば、以下のような結果を得られます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/028985bd-ee20-2b11-da50-6a18f68654fb.png)
呼び出したオペレーションであるgetParamがMethodIDとして、Param1はTest値として設定したTEST_VALがレスポンスに追加されていることが確認できます。


ここまでできたらPublishを行います。Publishタブを選択し、環境を選択したらPublishボタンを押してしばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/73e3a5c1-9b85-d4e5-736e-05278ca32ce2.png)

## クライアントアプリの作成
クライアントアプリは今回Webアプリとして作成しました。以下のような簡単な画面を作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/40e8c090-0e2a-19c0-16c6-fcf256462e7f.png)

 
Param1に任意の文字列を入れて、送信ボタンを押下すると、作成したJavaServiceに要求が飛び、レスポンスが送信結果として表示されるようにします。ボタン押下時の処理内容を以下のように記載します。



```Form1Controller.js

define({ 
	
  onClickBtnSend: function(){
    var text = this.view.txtInput.text;
	let self = this;    
    let IntegrationObject = KNYMobileFabric.getIntegrationService("KonyExampleReturnParamService");

    IntegrationObject.invokeOperation(
      "getParam",
      { },
      {
        Param1: text
      },
      function(response){
        
        let methodId = response["MethodID"];
        let param = response["Your Param"];
        
        self.view.txtSendResult.text = "MethodID: " + methodId + "\nYour Param: " + param;
        self.view.forceLayout();

      }
    );
    
  },
 });

```

Data & Servicesのハンバーガーメニューから、"Link to Existing App"を選択し、先ほどIntegration Serviceを作成したFabric環境を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/359c7073-076e-540c-1151-345d1c1256be.png)

Project Settings -> FabricからEnvironmentを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a43029e4-07d9-2b7b-c11f-a2e56842bd0f.png)

この状態でビルドを行い、アプリケーションを実行します。

## 動作の確認

Param1のところに任意の文字列を入力し、送信ボタンを押すと、送信結果のYour Paramの所に送信した文字列が表示されます。今回はオペレーションをgetParamしか作成しなかったので、MethodIDはgetParam固定になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/28600330-1dc3-0dfe-db6b-a3ad4ad1a5ca.png)



## まとめ
KonyFabricでJavaServiceを使用し、処理を作成しました。こちらを応用すると、複雑なバックエンドの処理や任意のDatabaseへの接続等もJavaで実現出来そうです。

## 参考

以下、公式の参考情報です。

https://docs.kony.com/konylibrary/visualizer/visualizer_user_guide/Content/Creating_a_Java_Service.htm

https://docs.kony.com/konylibrary/integration/MiddlewareAPI/com/konylabs/middleware/dataobject/Result.html

https://docs.kony.com/konylibrary/integration/MiddlewareAPI/com/konylabs/middleware/common/JavaService2.html