java vaadin vaadin7 web-push

java - Ejemplo mínimo de la aplicación Push in Vaadin 7("@Push")



vaadin7 web-push (2)

Simplificación de ejemplo en el libro de Vaadin

El Libro de Vaadin incluye un capítulo sobre Push, que incluye un ejemplo con Gráficos de Vaadin .

Abajo está mi código. Si bien me basé en el ejemplo de Vaadin Charts mencionado anteriormente, lo simplifiqué reemplazando el uso de un objeto Chart con un simple objeto Label . La etiqueta se actualiza cada segundo más o menos para decirle la hora actual.

Solo para uso de ejemplo: use un ejecutor en un proyecto del mundo real

Advertencia: mi ejemplo a continuación está diseñado para simplificar, no pretende ser un código de producción . Dormir un hilo es una forma cruda e incómoda de administrar el trabajo programado de subprocesos. Java proporciona la instalación de Executor para este tipo de trabajo. En un proyecto del mundo real, usaría un ScheduledExecutorService lugar de un solo objeto Thread dormido para programar nuestra tarea (de decir la hora). Consejo relacionado: nunca use un Timer en un entorno Servlet. Para un ejemplo más completo y más real, vea mi respuesta a una pregunta similar sobre Push with Vaadin.

Tomé otros accesos directos en este ejemplo, tales como: Label widget de Label directamente en la UI mientras que el trabajo del mundo real usaría un Layout para contener la Label .

Mi configuracion

Mi código está usando Vaadin 7.3.7 con Java 8 Update 25 en NetBeans 8.0.2 y Tomcat 8.0.15 en Mac OS X 10.8.5 (Mountain Lion).

La tecnología push es relativamente nueva, especialmente la variedad WebSocket . Asegúrese de utilizar versiones recientes de su servidor web, como actualizaciones recientes de Tomcat 7 u 8.

Cómo usar este ejemplo

Este código es un archivo único, el archivo MyUI.java . Para usar este código:

  1. Cree una nueva aplicación Vaadin predeterminada en su IDE de elección.
  2. Haga que ese ejemplo se ejecute correctamente antes de modificarlo.
  3. Reemplace el contenido de la clase MyUI con el siguiente código.

Anotación @Push

Al lado del código en el medio, observe cómo agregamos la anotación @Push a la definición de clase MyUI .

Código de ejemplo

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(); } } } }

Quiero ver el ejemplo más mínimo de uso de la nueva tecnología Push en Vaadin 7, como la nueva anotación @Push .

Tengo problemas para que server-push funcione en mi aplicación. Me gustaría probar una aplicación de ejemplo simple antes de intentar arreglar mi propia aplicación.


Here hay un ejemplo simple pero completo de Vaadin 8 que demuestra cómo usar las API de mensajería push de servidor y Java EE para enviar mensajes entre diferentes IU utilizando el patrón Broadcaster descrito en los documentos de Vaadin . Si no está interesado en ReceiveMessageUI mensajes o retransmitir a otros usuarios, mire solo ReceiveMessageUI .

En principio, todo se reduce a lo siguiente:

  1. Anote la interfaz de usuario de Vaadin con @Push para habilitar la inserción del servidor (de forma predeterminada a través de una conexión WebSocket)
  2. Envuelva las actualizaciones de la interfaz de usuario con access() al acceder desde otros subprocesos, el envío de actualizaciones se realiza automáticamente de forma predeterminada:

    getUI().access(() -> layout.addComponent(new Label("Hello!")));

  3. Use el patrón Broadcaster para publicar mensajes a otros usuarios y suscribirse a sus mensajes.