09

IM-BISで外部連携のデータソースとしてJAVAの実装を追加する

掲題の件、やり方が分からないと社内で質問されて若干調査したので、その内容をメモ。

といっても基本的には以下の説明に従って実装すれば良い。

IM-BIS で外部連携として利用できるJavaプログラムの仕様(Java連携で呼び出し可能なクラス)

ただ上記の説明は若干理解しにくかった模様。 作成すべきクラスの要件としては

クラスのデフォルトコンストラクタを呼び出すことができること。

多分クラス名から newInstance() か何かでそのままインスタンスを作成するためかな。

クラス内にmainメソッドに該当する呼び出し可能なメソッドを、1つ以上用意してください。

main メソッドに該当というのが何を言いたいのか分からないのだが、単に public なメソッドという事のようだ。別に static でなくていい。というか、試していないけど多分 static ではダメなのではないか。

呼び出し可能なメソッドの引数、および戻り値については、「入出力オブジェクトの仕様」を確認してください。

参照先で述べているのは大体以下のようなこと

  • 引数は Map<String, Object>List<Object> 一つだけ。値の型が決まっているようなら、Objectではなくその型で良いのかもしれない。
  • 戻りは List<Object> のみ。 これも引数と同様。

作成するJavaプログラム内で、intra-martのAPIやサードパーティライブラリを利用して、プログラムを実行することができます。

ま、これはこの通り。

特に何かしらのインタフェースを実装するなどの必要はないので、シンプルなJavaのクラスで、上記のルールを守って書けば良い。作成したらJarにエクスポートして

${imart}/WEB-INF/im_bis/datasource/lib 

に配置。

あと多分、運用環境として構築してると上記のクラスを読み込もうとして失敗してもログとかでないみたいなんで、開発中は単体テスト環境で構築しておくべき。

多分サンプルコードと手順が示されていれば躓かなかったんだろうけど。 今回調査の為に書いた物は以下のようなもの。単純すぎて晒すのもためらうレベルではあるけど。

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Test {

     public List<String> test(Map<String,Object> param){
          List<String> v = new ArrayList<String>();
          v.add("Hello");
          return v;
     }
}

どうしても管理画面で読み込めない場合は、再起動してみたりJarをResinのクラスパスの通っているところに複製してみるなどしてみてもいいかもしれない。が、これはあまり本質的ではないはず。

なお試したバージョンは intra-mart Accel Platform 2013 Winter (Felicia)