2012-03-15 5 views
2

文字列と異なる型のパラメータでタスクキューを呼び出すことはできますか?私のコードは、現在このように見えますが、キュー内のコードは到達しません :(Playframeworkコーディング)TaskQueueファイルまたはバイト[]をパラメータとして持つPOST要求(Java)

public static void addOrUpdateShops(byte[] xmlFile) { 
    checkUserExists(); 
    QueueFactory.getDefaultQueue().add(withUrl("/DataTransferController/addOrUpdateShopz").param("xmlFile", xmlFile).method(TaskOptions.Method.POST)); 
    renderText("Added to queue"); 
} 

public static void addOrUpdateShopz(byte[] xmlFile) throws Exception { 
    Logger.debug("Running queue task (addOrUpdateShopszz)"); 
    ShopModelUtilities.addShops(xmlFile); 
} 

Thxを

答えて

0

短い答えはノーである文字列だけが通過しているので、それはHTTPです。長い答えははいです。オブジェクトをシリアライズしてObjectInputStreamを使用してオブジェクトを読み取ってオブジェクトに変換することはできますが、手動で行うか、Jersey(jax-rs)やjsonリーダーなどを使用して自動的にデシリアライズする必要がありますそれをオブジェクトに戻します。

+0

Httpはバイナリイメージを正しく転送できます。 –

+0

ああ、POST。あなたは正しいです。したがって、あなたが上でお勧めするようにするか、またはファイルのアップロードと同じようにコンテンツを複数のパートとして送信する必要があります。 –

0

遅延機能を呼び出すと、ペイロードの柔軟性がさらに向上します。ペイロードがjpegのようなものであれば、TQのストレートコールは10kの制限があります。 http://code.google.com/appengine/articles/deferred.html

+0

制限は実際には100kであり、AFAIKはDeferredTaskにも適用されます。http://code.google.com/appengine/docs/java/taskqueue/overview-push.html#Quotas_and_Limits_for_Push_Queues –

+0

最近変更されたものがない限り、提供されているドキュメントリンクは、「タスクキューアイテムは関連するデータの10kbに制限されています」と記載されています。エンティティを使用することによって達成可能な延期された厳格な制限に簡単に対処できます。エンティティの制限は1メガです。遅延呼び出しを行う場合、エンティティのペイロードサイズを同じ制限値を持つmemcacheに保存しようとすると、簡単に確認できます。 memcache書き込みが失敗すると、遅延呼び出しも失敗することがわかります。遅延コールを拡張する非常に良いリンクはGAEのドキュメントを超えて存在しますが、私はそれを追跡する時間がありません。 – stevep

+0

うーん、本当。しかし、ドキュメントで言う: 'パニックする必要はありません:もしあなた自身がキューに収まるほど大きすぎるタスクをエンキューしようとすると、遅延ライブラリは自動的にデータストアに新しいエンティティを作成し、タスクが実行されたらエンティティを削除します。つまり、実際には、関数呼び出しは一度シリアル化されると最大1MBになる可能性があります。 ' –

2

Peter's answerまた、ペイロードとパラメータの両方を定義したPOSTリクエストを送信できませんでした。同時に両方の値を設定しようとするとトリガーする:あなたは、あなたのタスクキューの要求にバイト[]ペイロードを送信したい場合は、あなたのコード例に基づいて

java.lang.IllegalArgumentException: 
    Message body and parameters may not both be present; 
    only one of these may be supplied 

を、あなたのTaskOptionのビルダー・チェーンから.param("xmlFile", xmlFile)を削除する必要があります。

関連する問題