« Trac&XML-RPC(3) | Main | Trac0.11devをインストールしてみる »

2007.11.08

Trac&XML-RPC(4)

【複数の処理をまとめて実行する】

List<Object> command = new ArrayList<Object>();
for (int i=1; i<=10; i++) {
 Map<String, Object> table = new HashMap<String, Object>();
 table.put("methodName", "ticket.get");
 table.put("params", new Object[] { Integer.valueOf(i) });
 command.add(table);
}
Object[] result = (Object[]) client.execute(config, "system.multicall", new Object[] { command.toArray(new Object[command.size()]) });

 例えば、チケットIDが1~10の10個のデータを取得するとした場合、もちろん10回リクエストを行うという方法もあるわけですが、multicallを行うことで、1回のリクエストでまとめてデータを取得することが可能です。通信回数が減ることで、応答時間の向上等が期待できるのではないかと思われます。

 実際にリクエストを投げる場合のパラメータとしては、java.util.Mapの配列を渡すこととなります。それぞれのMapに関しては、methodNameparamsの2つをセットする必要があります。methodNameは文字通り実行対象とするメソッド名で、client.executeで単独で実行する際にセットしているのと同じ値をセットし、paramsは同様にclient.executeで単独で実行する際にセットしているパラメータをそのままObjectとしてセットすればOKです。

 戻り値の配列が微妙にくせ者で、以下のような感じの値が得られたのですが・・・そんなもんなんでしょうかね?

1階層目:個々のリクエストに対するレスポンス全体。引数のMapの要素数と同じ要素数の結果が戻ってくるはずです。
2階層目:これが結構謎・・・。client.executeの戻り値(Object)を、配列でラッピングしたような感じ?  new Object[] { client.execute(...) } って感じで値がセットされているようで、配列の要素としては常に1つです。
3階層目:この部分にclient.execute(...)の戻り値が格納されているようです。戻り値がArrayの場合、この部分も配列となるので4階層目の配列が存在することとなります。

 配列のネストがここまで深くなってくると、頭がこんがらがってきてしまいます(苦笑)。

|

« Trac&XML-RPC(3) | Main | Trac0.11devをインストールしてみる »

Java」カテゴリの記事

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/17007786

Listed below are links to weblogs that reference Trac&XML-RPC(4):

« Trac&XML-RPC(3) | Main | Trac0.11devをインストールしてみる »