データベースクエリが非常に遅いため、Playサーバースレッドをブロックするメソッドを備えたコントローラーがあります。スレッドをブロックしないようにコントローラーメソッドを実装する必要があります。ドキュメントを読みました:http ://www.playframework.org/documentation/1.2.4/asynchronous
これを行う方法の例はどこにもありません。私が近くで見つけた唯一のものはこれですhttps://github.com/playframework/play/blob/master/samples-and-tests/chat/app/controllers/LongPolling.java それは単に結果をawait()でラップします。
私がそれをやろうとすると、それはうまくいきません。
ルート:
GET /blog Controller.blog
コントローラー(これは実際の遅いクエリではありませんが、他のすべては同じです):
public static void blog() {
String queryStr = "SELECT b FROM Blog b ORDER BY createTime DESC";
JPAQuery q = Blog.find(queryStr);
List<Blog> bList = q.fetch(100);
List<BlogDTO> list = new ArrayList<BlogDTO>(bList.size());
for (Blog b : bList) {
BlogDTO obj = new BlogDTO(b);
list.add(obj);
}
renderJSON(list);
}
試しList<Blog> bList = await(q.fetch(100));
ましたが、うまくいきません。
私はFutureと一緒に仕事をしたことがなく、前に約束しました。誰かが私にこれにアプローチする方法についての指針を与えることができますか?