Vereinfachung Beispiel in Das Buch der Vaadin
Die Book Of Vaadin enthält ein Kapitel über Push einschließlich am Beispiel Vaadin Charts.
Unten ist mein Code. Auf der Grundlage des oben erwähnten Vaadin Charts-Beispiels habe ich es vereinfacht, indem ich die Verwendung eines Chart
Objekts durch ein einfaches Label
Objekt ersetzt habe. Das Label wird jede Sekunde aktualisiert, um Ihnen die aktuelle Uhrzeit mitzuteilen.
Für Beispiel Use Only -
Caveat ein Exekutor in Projekt der realen Welt Verwendung: unten Mein Beispiel für Einfachheit gebaut wird, nicht als Produktionscode bestimmt. Einen Thread zu schlafen ist eine grobe und unbeholfene Art, geplante Threads zu verwalten. Java bietet die Executor
Einrichtung für diese Art von Arbeit. In einem realen Projekt würde ich einen ScheduledExecutorService statt eines einzelnen schlafenden Thread
Objekts verwenden, um unsere Aufgabe zu planen (Zeit zu erzählen). Verwandter Tipp: Verwenden Sie niemals Timer
in einer Servlet-Umgebung. Für ein vollständigeres und realistischeres Beispiel siehe my Answer zu einer ähnlichen Frage zu Push mit Vaadin.
Ich nahm andere Verknüpfungen in diesem Beispiel, wie zum Beispiel: Ich stelle das Label
Widget direkt auf den UI
während der realen Welt der Arbeit ein Layout
die Label
enthält verwenden würde.
Meine Konfiguration
Mein Code verwendet Vaadin 7.3.7 mit Java 8-Update 25 in NetBeans 8.0.2 und Tomcat 8.0.15 auf Mac OS X 10.8.5 (Mountain Lion).
Push-Technologie ist relativ neu, vor allem die WebSocket Sorte. Achten Sie darauf, den aktuellen Versionen des Webservers, wie letzten Aktualisierungen zu Tomcat 7 oder 8.
Verwendung Verwendung Verwendung dieses Beispiels
Dieser Code eine einzelne Datei ist, die MyUI.java
Datei. So verwenden Sie diesen Code:
- Erstellen Sie eine neue Standard-Vaadin-App in Ihrer IDE der Wahl.
- Lassen Sie das Beispiel erfolgreich ausgeführt werden, bevor Sie es ändern.
- Ersetzen Sie den Inhalt der
MyUI
Klasse durch den folgenden Code.
@Push
Annotation
Neben dem Code in der Mitte, beachten Sie, wie wir die @Push
Anmerkung zum MyUI
Klassendefinition hinzugefügt.
Beispielcode
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();
}
}
}
}
Lieber Down-Wähler: Bitte hinterlassen Sie eine Kritik mit Ihrer Stimme. –