semplificazione delle Esempio In The Book Of Vaadin
La Book Of Vaadin comprende un capitolo sulla Push, compreso un esempio di utilizzo Vaadin Charts.
Di seguito è riportato il mio codice. Pur basandosi su quell'esempio di Vaadin Charts menzionato sopra, l'ho semplificato sostituendo l'uso di un oggetto Chart
con un semplice oggetto Label
. L'etichetta si aggiorna ogni secondo circa per indicare l'ora corrente.
Per esempio unico Usa - Utilizzare un esecutore nel progetto del mondo reale
Caveat: Il mio esempio qui sotto è costruito per semplicità, non inteso come codice di produzione. Dormire una discussione è un modo grossolano e scomodo per gestire il lavoro con thread programmato. Java fornisce la funzione Executor
per questo tipo di lavoro. In un progetto del mondo reale userei un ScheduledExecutorService piuttosto che un singolo oggetto dormiente Thread
per programmare il nostro compito (del tempo di raccontare). Consiglio relativo: non utilizzare mai un valore Timer
in un ambiente servlet. Per un esempio più completo e più reale, vedere my Answer a una domanda simile su Push with Vaadin.
ho preso altre scorciatoie in questo esempio, come ad esempio: ho posto il widget Label
direttamente sul UI
, mentre il lavoro del mondo reale userebbe un Layout
per contenere il Label
.
La mia configurazione
Il mio codice sta usando Vaadin 7.3.7 con Java 8 Update 25 in NetBeans 8.0.2 e Tomcat 8.0.15 su Mac OS X 10.8.5 (Mountain Lion).
La tecnologia push è relativamente nuova, in particolare la varietà WebSocket. Assicurarsi di utilizzare le versioni più recenti del server web, come gli ultimi aggiornamenti di Tomcat 7 o 8.
Come utilizzare gli esempi
Questo codice è un singolo file, il file MyUI.java
. Per utilizzare questo codice:
- Creare una nuova app Vaadin predefinita nel proprio IDE preferito.
- Ottenere quell'esempio con successo, prima di modificare.
- Sostituire il contenuto della classe
MyUI
con il codice riportato di seguito.
@Push
annotazione
accanto al codice in mezzo, si noti come abbiamo aggiunto la @Push
annotazioni alla definizione MyUI
di classe.
Esempio Codice
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();
}
}
}
}
Dear Down-Voter: Si prega di lasciare una critica insieme al tuo voto. –