« 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


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

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