無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

jabsorbでJSON-RPCインターフェイスを作る手順

JSON-RPCライブラリのjabsorbを利用して、Google App Engine上で任意のJavaクラスのメソッドJSON-RPCで公開する手順です。jabsorbはServletで提供されていて、Google App Engine上でもさくっと動作しましたよ。

概要

  1. 必要なモジュールをダウンロードして、「WEB-INF/lib」に配置。
  2. 公開するJavaクラスを書く。
  3. JSON-RPCインターフェイスを提供するServletを作成。
  4. web.xmlServletを追加する。
  5. JavaScriptでクライアントを書く。

1.必要なモジュールをダウンロードして、「WEB-INF/lib」に配置。

jabsorbのDownloadから、jabsorbをダウンロードして「WEB-INF/lib」にコピーします。必要なモジュールは以下の3つ。

  • jabsorb-1.3.1.jar
  • slf4j-api-1.4.2.jar
  • slf4j-jdk14-1.4.2.jar

jabsorb-1.3.1.jarは「jabsorb-1.3.1-minimal.zip」に、他の2つは「jabsorb-1.3.1-src.zip」に含まれています。

2.公開するJavaクラスを書く。

JSON-RPCで公開するクラスを作成します。今回は、以下のクラス/インターフェイスを作成して確認しました。

package test.jabsorb;

/**
 * テスト用サービス
 */
public interface TestService {
    String hello( String args );
}
package test.jabsorb;

/**
 * テスト用サービスの実装
 */
public class TestServiceImpl implements TestService {
    @Override public String hello(String str) {
        return "hello. " + str;
    }
}

2.JSON-RPCインターフェイスを提供するServletを作成。

次に、JSON-RPCインターフェイスを提供するServletを作成します。

  • Servletはjabsorb付属の「org.jabsorb.JSONRPCServlet」を継承して作成します。
  • init()をオーバーライドして、2で作成したクラスのインスタンスを公開APIとして登録します。
package test.jabsorb;

import javax.servlet.ServletException;

import org.jabsorb.JSONRPCBridge;
import org.jabsorb.JSONRPCServlet;

/**
 * JSON-RPCを提供するサーブレット
 * org.jabsorb.JSONRPCServletを継承し、init()でサービスインスタンスを登録する。
 */
@SuppressWarnings("serial")
public class JsonRPCTestServlet extends JSONRPCServlet {

    @Override public void init() throws ServletException {
        super.init();
        JSONRPCBridge.getGlobalBridge().registerObject("testService", new TestServiceImpl());
    }
}

3.web.xmlServletを追加する。

web.xmlServletを追加します。

...
<servlet>
  <servlet-name>JsonRPCTestServlet</servlet-name>
  <servlet-class>test.jabsorb.JsonRPCTestServlet</servlet-class>
</servlet>
...
<servlet-mapping>
  <servlet-name>JsonRPCTestServlet</servlet-name>
  <url-pattern>/jsonrpc</url-pattern>
</servlet-mapping>
...

これでサーバーサイドは完成。

4.JavaScriptでクライアントを書く。

最後にJavaScriptでクライアントを書いて、サービスにアクセスしてみます。

  1. JSONRpcClientを作成し、
  2. 「<クライアント>.<サービスの登録名>.<メソッド名> ()」でリモートのサービスAPIを実行できます。

なお、インポートしている「../js/jabsorb/jsonrpc.js」は「jabsorb」で提供されているライブラリです。「jabsorb-1.3.1-minimal.zip」に含まれています。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="../js/jabsorb/jsonrpc.js"></script>
    <script type="text/javascript">
    function main() {
      try {
        // クライアントを作成。引数でServletのパスを指定する。
        jsonrpc = new JSONRpcClient("/jsonrpc");
        // <クライアント>.<サービスの登録名>.<メソッド名> でサービスのAPIを呼び出して結果を取得。
        var result = jsonrpc.testService.hello("hello");
        document.getElementById( "stdout" ).innerHTML += result;
      } catch(e) {
        document.getElementById( "stdout" ).innerHTML += e;
      }
    }
    </script>
  </head>
  <body onload="javascript:main();">
    <div id="stdout" />
  </body>
</html>

実行結果はこちら