TaskQueueHandleの使い方
では、プッシュ配信の流れを見てみましょう。ここでは、アクセスを開始すると、makeContentメソッド内でTaskQueueHandleインスタンスが作成されます。TaskQueueHandleは、ApplicationInstanceクラスの「createTaskQueue」というメソッドで作成することができます。
final ApplicationInstance app = this; if (taskQueue == null) taskQueue = app.createTaskQueue();
作成されたTaskQueueHandleは、runメソッド内でカウンターを増やす処理の後、実行されています。この部分です。
while (true) { try { Thread.sleep(1000); counter++; } catch (InterruptedException e) { e.printStackTrace(); } app.enqueueTask(taskQueue, new Runnable() { public void run() { showDialog("Counter: " + counter); } }); }
Thread.sleepでいって時間処理を停止した後、counterの値を増やします。そして、「enqueueTask」というメソッドを呼び出しています。これは、サーバー側で実行する処理をサーバー側で実行するキューに登録するためのものです。このenqueueTaskでは、TaskQueueHandleとRunnableを引数に渡します。このRuunableに実行する処理を用意しておきます。ここでは、showDialogでメッセージを表示させているだけですが、これにより画面の表示が更新されていたのです。
enqueueTaskは、Runnableの処理を実行し、次にenqueueTaskが実行されるまでその接続を保持し続けます。手動でこの接続を切りたければ、「removeTaskQueue」というメソッドを使い、TaskQueueHandleをサーバー側のキューから取り除きます。
実際、このenqueueTaskによってプッシュ配信されていることを確認するため、★部分の行(app.removeTaskQueue(taskQueue);
)のコメントを解除してみましょう。これにより、Runnaleの処理を実行した後、removeTaskQueueでプッシュ配信を停止するようになります。
やってみると分かることですが、処理実行後にremoveTaskQueueするようになると、ダイアログの表示更新がうまく機能しなくなります。また何度かダイアログのクローズボックスをクリックすると表示がそのたびに更新され、最後にダイアログが消えます。消えてしまうと、いくら待っても表示されなくなります。サーバー側で動いているはずのスレッド処理が機能しなくなっていることがよく分かるでしょう。
まとめ
今回は、GUIコンポーネント、テーブルとモデル・レンダラーの関係、サーバーからのプッシュ配信といったものについて説明しました。Echoのすべてではありませんが、主な機能についてはざっと紹介できたのではないかと思います。
このEchoのようなプレゼンテーション層に絞ったフレームワークは、サーバーサイド言語とJavaScriptが複雑に絡み合った昨今のWebページを非常にすっきりと整理して開発できるようにしてくれます。中でもEchoは、使用言語がJavaであり、Java以外に何1つ必要としないという点、またいざとなればクライアント側で同じものを実装できるという点がその他のフレームワーク類と違う大きな特徴となっています。ドキュメント(特に日本語による)がまだまだ少ないため、使いこなすのは大変かもしれませんが、一度触ってみてください。「全部Javaだけで書く」というのは、Javaプログラマにとっては非常に大きな魅力ですよ!