== Vaadin V10 (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 V10, 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/flow[Flow API] de la plataforma Vaadin.

[source,java]
----
@Route("")
public class HelloVaadinV10 extends Composite<Div> {
    public HelloVaadinV10() {
        final VerticalLayout layout = new VerticalLayout();
        layout
            .add(new Button("click me",
                            event -> layout.add(new Label("clicked again"))
            ));
        //set the main Component
        getContent().add(layout);
    }
}
----

La documentación para la version 10 de la plataforma Vaadin se encuentra disponible https://vaadin.com/docs/v10/flow/Overview.html[aqui]

=== Información de Soporte

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 soporte a largo plazo (Long-Term Support - LTS). Las versiones LTS serán liberadas 
aproximadamente cada dos años y ofreciendo 5 años de soporte.
