2010年9月11日土曜日

#appengine javaでURLFetchのdeadlineを自動的に設定する

AppEngine/JavaでのURLFetchサービスのdeadlineは5秒だと思うけど、全てのURLFetch#fetchのdeadlineを自動的に10秒に設定するためのApiProxy.Delegateの実装を作成してみた。

仕組みはとても簡単、

  1. URLFetch#fetchをフックして、サービスへリクエストされるバイト配列からURLFetchRequestに組み立てなおす。
  2. 組み立てなおしたURLFetchRequestURLFetchRequest#toBuilder()を使って、新たにURLFetchRequestを作成し、それに対してURLFetchRequest.Builder#setDeadline()する。
  3. setDeadline()したオブジェクトをバイト配列に変換し、
  4. サービスには何食わぬ顔でそのバイト配列を送りつける。
gdata-apiを使うときなんかは5秒じゃ済まない事も多いので、Slim3なら基底クラスとしてGDataAPIControllerBaseとか作って、setUp()/tearDown()でこのDelegateのつけはずしをしたりして使います。

1 件のコメント:

takezaki さんのコメント...

Good Job!!