== Vaadin V8 (LTS) - Simple WebApp in Java
:index-group: Frameworks
:jbake-type: page
:jbake-status: published

Este ejemplo muestra como iniciar con una simple aplicación  web que usa Vaadin V8, basada totalmente en Java y ejecutandose en TomEE (webprofile). 

La Plataforma Vaadin es OpenSource y se encuentra disponible en:
https://github.com/vaadin/platform[Github]

=== Construir este ejemplo

Para construir este ejemplo, simplemente ejecute: _mvn clean install tomee:run_ y la
aplicación se ejecutara bajo: http://localhost:8080/

=== Implementación

Esta implementación usa el https://vaadin.com/framework[API Vaadin 8].

[source,java]
----
public class HelloVaadin {

    public static class MyUI extends UI {
        @Override
        protected void init(VaadinRequest request) {

            //create the components you want to use
            // and set the main component with setContent(..)
            final Layout layout = new VerticalLayout();
            layout
                .addComponent(new Button("click me",
                                         event -> layout.addComponents(new Label("clicked again"))
                ));

            //set the main Component
            setContent(layout);
        }

        @WebServlet("/*")
        @VaadinServletConfiguration(productionMode = false, ui = MyUI.class)
        public static class MyProjectServlet extends VaadinServlet { }
    }
}
----

La documentación para la version 8 del framework Vaadin se encuentra disponible https://vaadin.com/docs/v8/framework/tutorial.htm[aqui]

=== Información de Soporte

El Framework Vaadin 8 es la ultima version basada GWT. V8 es una version con soporte a largo plazo (Long-Term Support - LTS).

La nueva version de la plataforma Vaadin esta basada en WebComponents. A partir de Vaadin 10, Vaadin se esta moviendo a un modelo de versionado con
cuatro versiones cada año. Esto permite liberar nueva funcionalidad de una manera 
mas rapida para los desarrolladores. Vaadin continua su compromiso con la estabilidad
ofreciendo versiones con LTS. Las versiones LTS serán liberadas 
aproximadamente cada dos años y ofreciendo 5 años de soporte.
