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

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

今日の思いつき

Microsoft の Share Point Server では、APIがストアドプロシージャの形で公開されていて、Java + JDBCでさくっと呼び出せます。例えば、「プリンシパルが属するShare Point グループの一覧取得」であれば「proc_SecListSiteGroupsContainingUser」を使えばOK。

public List<SiteGroup> getGroupsContainingUser ( String siteId, int uid )
throws SQLException {
    CallableStatement cs = null;
    List<SiteGroup> lists = new ArrayList<SiteGroup>();

    try {
        // ストアドプロシージャを実行
        cs = con.prepareCall("{call proc_SecListSiteGroupsContainingUser(?, ?)}");
        cs.setString(1, siteId);
        cs.setInt( 2, uid )  ;
        cs.execute();
    
        // 結果セットを読み込み
        ResultSet rs = cs.getResultSet();
        while(rs.next()) {
             lists.add(new SiteGroup( rs.getInt( 1 ), rs.getString( 2 )));
        }

    } catch(SQLException ex) {
        throw ex;
    } finally {
        try {
            if(null != cs) {
                cs.close();
            }
        } catch(SQLException sx) {
            ;
        }
    }
    return lists;
}

で、設計的に↑のようなメソッド一式を持った「Share Pointからデータを取ってくるためのDao」を用意するのは、まぁ、筋かなと思うわけですが、プロシージャがけっこうたくさんあるわけです。引数を渡す部分とかSQL文を生成するコードとか恐らく全てのメソッドで同じだし、なんとか共通化できないか。ということでプロキシとかどうでしょう

イメージとしては

次のようなイータフェイスを用意しておいて、

class UserDao {
   /**
    * プリンシパルが属するShare Point グループの一覧を取得する
    * @param siteCollectionId サイトコレクションID
    * @param principalId プリンシパルID
    * @return Share Point グループの一覧
    */
   List<SiteGroup> getGroupsContainingUser ( String siteCollectionId, int principalId )
   throws SQLException;
}

以下のような感じでプロキシのインスタンスを生成/APIを実行すれば、メソッド名に対応するストアドプロシージャをコールして結果を返す、という仕組み。

UserDao dao = WSSProxy.create( UserDao.calss, "<データベースホスト>" ... );

String siteCollectionId = null; // 省略
int principalId = -1; // 省略 
List<siteGroup> list = dao.getGroupsContainingUser( siteCollectionId, principalId );
  • 接続先サーバー、データベース等はプロキシ作成時に渡す。
  • 実行するプロシージャはデフォルトは「proc_<メソッド名>」形式とする。変更したい場合はアノテーションで明示。
  • ストアドプロシージャの引数は、メソッドに与えられたモノをそのまま使用する。

メンドクサそうなのは、結果セットのコンバートかな。とりあえずListとかでもいいかと思うけど、できればオブジェクトにしたい。あと、全データはいらないので必要なデータのみ取り出すような仕組みも必要。

と、思いつきはするものの

実際使う予定のAPIは10個くらいなので、元がとれるか微妙だよな。うーん。10個くらいならちまちま作った方が早いような。