新しい@Push
注釈など、Vaadin 7で新しいPush technologyを使用するという最小限の例を見たいと思います。Vaadin 7アプリ( "@Push")でのプッシュの最小例
server-pushが私のアプリで動作するのに問題があります。私は自分のアプリを修正しようとする前に、簡単なサンプルアプリを試してみたいと思います。
新しい@Push
注釈など、Vaadin 7で新しいPush technologyを使用するという最小限の例を見たいと思います。Vaadin 7アプリ( "@Push")でのプッシュの最小例
server-pushが私のアプリで動作するのに問題があります。私は自分のアプリを修正しようとする前に、簡単なサンプルアプリを試してみたいと思います。
Book Of VaadinはVaadin Chartsを用いた例を含むプッシュの章を含みます。
以下は私のコードです。上記のVaadin Chartsの例に基づいて、Chart
オブジェクトを単純な0オブジェクトに置き換えることで、単純化しました。ラベルは毎秒更新され、現在の時刻が表示されます。使用例については
警告:下の私の例では、は、生産コードとして意図していない、簡単にするために構築されています。スレッドをスリープさせることは、スケジュールされたスレッド化された作業を管理するための粗雑で厄介な方法です。 Javaでは、この種の作業にはExecutor
機能が用意されています。現実世界のプロジェクトでは、私たちの仕事(時間を知らせる)をスケジュールするために、単一の睡眠のThread
オブジェクトではなく、ScheduledExecutorServiceを使用します。関連するヒント:サーブレット環境ではTimer
を使用しないでください。より完全でより現実的な例については、VaadinによるPushに関する同様の質問に対するmy Answerを参照してください。
私のようなこの例では他のショートカットを、取った:実世界の仕事はLabel
を含むようにLayout
を使用するのに対し、私はUI
に直接Label
ウィジェットを配置します。
私のコードは、NetBeans 8.0.2およびMac OS X 10.8.5上のTomcat 8.0.15(マウンテンライオン)でJava 8のアップデート25でVaadin 7.3.7を使用しています。
プッシュ技術は比較的新しく、特にWebSocketです。そのようなこの例のコードは、1つのファイルをある
、MyUI.java
ファイルを使用する方法最近のTomcat 7への更新または8
MyUI
クラスの内容を以下のコードに置き換えてください。@Push
注釈真ん中のコードに加えて、我々はMyUI
クラス定義に@Push
注釈を追加する方法に注意してください。
package com.example.pushvaadinapp;
import com.vaadin.annotations.Push;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import javax.servlet.annotation.WebServlet;
/**
* © 2014 Basil Bourque. This source code may be used freely forever by anyone absolving me of any and all responsibility.
*
* +----------------------------+
* | NOT FOR PRODUCTION USE! |
* +----------------------------+
* Sleeping threads is an awkward way to manage scheduled background work.
* By the way, never use a 'Timer' in a Servlet environment.
* Use an Executor instead, probably a ScheduledExecutorService.
*/
@Push
@Theme ("mytheme")
@Widgetset ("com.example.pushvaadinapp.MyAppWidgetset")
public class MyUI extends UI
{
Label label = new Label("Now : ");
@Override
protected void init (VaadinRequest vaadinRequest)
{
// Put a widget on this UI. In real work we would use a Layout.
setContent(this.label);
// Start the data feed thread
new FeederThread().start();
}
@WebServlet (urlPatterns = "/*" , name = "MyUIServlet" , asyncSupported = true)
@VaadinServletConfiguration (ui = MyUI.class , productionMode = false)
public static class MyUIServlet extends VaadinServlet
{
}
public void tellTime()
{
label.setValue("Now : " + new java.util.Date()); // If Java 8, use: Instant.now(). Or, in Joda-Time: DateTime.now().
}
class FeederThread extends Thread
{
int count = 0;
@Override
public void run()
{
try {
// Update the data for a while
while (count < 100) {
Thread.sleep(1000);
// Calling special 'access' method on UI object, for inter-thread communication.
access(new Runnable()
{
@Override
public void run()
{
count ++;
tellTime();
}
});
}
// Inform that we have stopped running
// Calling special 'access' method on UI object, for inter-thread communication.
access(new Runnable()
{
@Override
public void run()
{
label.setValue("Done.");
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
はウィジェットセットが必要ですか?私の推測:いいえ。また、目的が最小限の実例を持つことになっている場合にはどうしたらよいでしょうか?カウンタや 'new Date()。toString()'だけを使用してください。あなたの質問では、あなたはこのようなものをテストできる簡単なテストアプリを持っていたいと述べています。だからあなたの質問を見つけるSOユーザのために**あなたの**プロジェクト全体**(あなたのpom/gradle/younameitを含む)をgithubに入れてみませんか? – cfrick
@cfrick良い点;ありがとうございました。 [A]あなたが示唆したように、私はjava.timeの使用と議論を殺しました。 [B]ウィジェットセットに関しては、[新しいMavenアーキタイプ](https://vaadin.com/blog/-/blogs/vaadin-7-3-7)によって作成された新しいマルチモジュールプロジェクトでは、そのアノテーションがデフォルトです「Vaadin Plugin For NetBeans」1.1.3アップデート(http://plugins.netbeans.org/plugin/50531/vaadin-plug-in-for-netbeans)で提供されています。 )。さらに、漠然としたドキュメントは、ウィジェットセット(とテーマ)が 'production'モジュールのコンパイルで自動的に最適化されることを意味しています。だから私はその場所に残しておきます。 –
HereはVaadin docsで説明Broadcaster patternを使用して異なるUIの間でメッセージを送信するためにサーバプッシュとJava EEのメッセージングAPIを使用する方法を示していますシンプルでありながら、フルVaadin 8例です。メッセージングや他のユーザーへのブロードキャストに興味がない場合は、ReceiveMessageUIのみをご覧ください。原則として
それがすべて以下に沸く:
access()
で(のWebSocket接続を介して、デフォルトでは)サーバプッシュラップUIの更新を可能にするために@Push
とVaadin UIに注釈を付けます
getUI().access(() -> layout.addComponent(new Label("Hello!")));
がを使用します。他のスレッドから、更新を送信することは、デフォルトでは自動的に行われます他のユーザにメッセージを公開し、メッセージを購読することができる。
"Broadcaster pattern"とは、[*オブザーバー*パターン](https://en.wikipedia.org/wiki/Observer_pattern)などを意味しますか? –
他のものは、Vaadinのドキュメントに記載されている[Broadcasterパターン](https://github.com/vaadin/framework/blob/master/documentation/advanced/advanced-push.asciidoc#the-broadcaster)を意味します。 – mrts
あなたの投票に批判を残してください。 –