Solución:
Creo que deberías tomar esta decisión en función de la arquitectura de cada uno, porque este es el punto en el que más se diferencian.
Vaadin sigue el patrón de medio objeto y, por lo tanto, es más comparable a Eclipse RAP (y ZK) que a GWT. Tienes básicamente una aplicación de servidor y la controlas desde el navegador. Piense en un botón simple, su estado se mantiene en el servidor y en el navegador verá una representación del mismo. Cada vez que cambia el estado del Botón, tiene que comunicarse con el servidor para actualizar su estado. Entonces esto es true para cada widget que tengas.
Debo decir que no tengo mucha experiencia con Vaadin o RAP, pero imagina cuántos estados tendrá que hacer malabarismos con tu servidor cuando tengas muchos widgets y muchos usuarios que los utilicen al mismo tiempo. Puede que esto no sea una gran preocupación en la nube, pero tal vez en un servidor tradicional con recursos limitados.
Dicho esto, puedes imaginar que este enfoque tampoco es muy compatible con dispositivos móviles. Cada cambio de estado da como resultado un viaje de ida y vuelta al servidor, pero en el dispositivo móvil es posible que tenga una conexión deficiente o incluso ninguna. Aquí claramente preferiría GWT simple, ya que se puede ejecutar completamente en el navegador y también se puede utilizar “sin conexión”.
Tu otra pregunta fue sobre los widgets. Está true que GWT no proporciona tantos widgets como Vaadin, pero existen buenas bibliotecas de widgets para complementar los widgets de GWT. El problema es que no puede comenzar con Vaadin y luego decidir volver a GWT porque los widgets escritos en Vaadin no se pueden usar en GWT simple. Pero al revés funciona, los widgets de GWT y los widgets autoescritos se pueden usar en Vaadin.
Sugeriría comenzar con GWT simple, escribir sus propios Widgets con UiBinder, es muy, muy fácil. Si cree que le gustaría usar algunos widgets más complejos, mire las bibliotecas de widgets como GWT-Bootstrap o Sencha GXT, funcionan muy bien con GWT simple.
GWT
ahora se fue con Vaadin y llano GWT.
Vaadin 7 y Vaadin 8, ahora conocidos como Vaadin Framework, son envoltorios basados en Java de Google Web Toolkit (GWT).
Escribe código Java puro para la lógica de su negocio y la creación de la interfaz de usuario. Este código Java se ejecuta en una JVM en el lado del servidor en un contenedor web Java Servlet. La magia ocurre cuando Vaadin usa GWT para generar automáticamente el HTML, CSS, JavaScript, DOM, AJAX, XML y JSON, WebSocket y el código Push necesarios para representar la interfaz de usuario de su aplicación web dentro del navegador web del lado del cliente del usuario. .
Por lo tanto, Java puro en el lado del servidor, tecnología pura de estándares web en el lado del cliente (no Java en el cliente).
Componentes Web
Vaadin 10, ahora conocido como Vaadin Flow, reemplaza el uso interno de GWT con la tecnología estándar emergente de componentes web. Esta nueva generación es una reescritura importante de Vaadin, aunque su propósito y muchos de sus conceptos, como el enlace de datos, siguen siendo los mismos.
Al aprovechar la tecnología de componentes web, debería ser más fácil construir widgets Vaadin. Y debería ser relativamente fácil hacer que los componentes existentes basados en JavaScript no diseñados explícitamente para Vaadin estén disponibles para su código Java del lado del servidor. Ese es el objetivo de los componentes web: crear widgets basados en la web que funcionen en varias herramientas de marco web.
Si bien Vaadin Ltd está bastante emocionado y orgulloso de enviar Vaadin 10 Flow, también siguen comprometidos con Vaadin 8 Framework. Vaadin 8 está en desarrollo activo, con un plan de hoja de ruta para un apoyo continuo al menos hasta el año 2022.
- Si realmente desea trabajar con GWT, puede hacerlo en Vaadin 8 Framework.
- Si desea apostar por componentes web en lugar de GWT, elija Vaadin 10 Flow.
Aplicaciones enriquecidas
Aplicación de texto enriquecido donde el usuario realiza muchas actividades en el cliente.
Si te refieres a “texto enriquecido” como fuentes, colores, etc., debes estudiar el RichTextArea
widget incluido con Vaadin 8, así como comprobar el directorio de Vaadin para complementos adicionales. Ese widget no se está transfiriendo a Vaadin 10 Flow, pero como se mencionó anteriormente, el uso de componentes web puede hacer que otras herramientas existentes estén disponibles para una aplicación Vaadin basada en Java. Ya veo uno en beta.
Si se refería a “rico” en términos de aplicaciones web de estilo de escritorio, orientadas a los negocios y de apariencia profesional con confiabilidad a nivel empresarial, ese es el propósito de Vaadin.
Java
Buscamos desarrollar utilizando tecnología Java.
Eso es el razón de ser of Vaadin: escribir Java puro para aprovechar el vasto ecosistema de herramientas y bibliotecas de Java, con todos sus beneficios de seguridad, rendimiento y confiabilidad, mientras que al mismo tiempo utiliza tecnología de estándares web para renderizar automáticamente su aplicación en un navegador web.
Móvil
Se requiere soporte móvil.
La colección de widgets Vaadin ha evolucionado para admitir gestos de superficie táctil.
La compañía Vaadin Ltd ofreció anteriormente un paquete especial para soporte móvil, llamado Vaadin Touch. El soporte integrado para gestos táctiles en los widgets regulares de Vaadin hizo que ese paquete fuera obsoleto e innecesario.
Nube y escalado
Los servicios se ofrecerán en la nube.
La escalabilidad también es una preocupación principal.
Su aplicación Vaadin basada en Java vive en una JVM en el lado del servidor. Cada usuario actual está representado por un objeto de sesión. Todos los widgets de la interfaz de usuario que aparecen en el navegador tienen una contraparte en un objeto Java en el servidor. Es posible que conserve más datos y funciones en objetos Java adicionales en el servidor. Es posible que también esté llamando a JDBC o servicios web, etc. desde ese lado del servidor.
Entonces, todo eso ocupa memoria y ciclos de CPU en el servidor. Debe ser consciente de que su programación realiza el almacenamiento en caché y coloca otras cargas en el servidor. Todos los recursos compartidos entre usuarios deben ser seguros para subprocesos, ya que un entorno de Java Servlet tiene varios subprocesos por diseño.
Es posible que se necesite un hardware de servidor robusto (memoria, núcleos), según los detalles de su aplicación. O es posible que desee varios servidores con equilibrio de carga de sesión permanente si realmente tiene una aplicación muy grande con muchos usuarios.
La empresa Vaadin Ltd ha simulado el uso de una aplicación Vaadin que admite miles de sesiones de usuario simultáneas. Puede contactarlos para consultas sobre su situación particular.
Si bien la escalabilidad es un tema a considerar, no saque conclusiones precipitadas. Piénselo bien y experimente un poco.
Creando un widget personalizado
Si tengo que escribir un nuevo widget en Vaadin, ¿qué tan fácil o difícil es lograrlo?
En Vaadin 8, puede crear sus propios widgets. Pero hacerlo requería aprender el uso de GWT. Es factible, ciertamente, como puede ver en los cientos de complementos publicados en el Directorio de Vaadin. Pero todavía es un trabajo serio. Vaadin Ltd. ofreció formación sobre este tema.
En Vaadin 10 Flow, el uso de componentes web debería facilitar mucho la creación de sus propios widgets. Eche un vistazo a este proyecto de inicio que se proporciona sin costo para comenzar. Ver el tutorial, Creación de un componente simple con la API de elementos. Conceptos clave en la creación de widgets en Vaadin 10 Flow:
- Cada componente de Vaadin 10 siempre se asigna a un elemento raíz en la representación DOM del lado del servidor.
- los
Element
API hace posible modificar el DOM fácilmente desde el lado del servidor.
¿Algún otro problema?
¿Existe algún problema obvio con los widgets o conceptos de Vaadin que puedan bloquear cualquier aplicación?
No estoy seguro de a qué te refieres aquí. Sugiero leer el excelente tutorial y manual de Vaadin. Lo guía a través del uso de todo tipo de funciones en Vaadin.
Habiendo utilizado otros entornos de desarrollo de aplicaciones rápidas para aplicaciones de escritorio, Vaadin siempre tuvo sentido para mí, se ajustaba a mi forma de pensar y hacer las cosas.
Filo sangriento
Para Vaadin Flow, sepa que los componentes web todavía son nuevos y, en cierto modo, vanguardistas. Los componentes web son en realidad una colección de tecnologías. No todos estos son totalmente compatibles con todos los fabricantes de navegadores. Así que todavía son necesarios algunos polyfills.
Vaadin Flow también hace uso del par de características modernas de diseño de página que tienen finalmente llegó en CSS: Flexbox y Diseño de cuadrícula.
Solo las últimas versiones de los navegadores están cerca de tener un buen soporte para todas estas funciones. Visite CanIUse.com para obtener detalles particulares.
Parte del propósito de Vaadin es cubrir las brechas entre varias versiones de varios navegadores, para aislarnos a los desarrolladores que usan Vaadin. Por lo tanto, es posible que no encuentre problemas en algunos navegadores, pero puede que sí.
Además, Vaadin Flow no tiene todas las características de Vaadin 8. Algunos están en desarrollo y otros están previstos.
Resultado: si está ansioso por enviar pronto y no puede insistir en que los usuarios actualicen a los últimos navegadores, use Vaadin 8 en lugar de Flow.
Dejando Vaadin para GWT
Si mañana decidimos volver a GWT, ¿es eso factible dado que Vaadin funciona con toda la lógica del código del servidor?
Si desea utilizar GWT y desea escribir esa lógica del lado del servidor en Java, Vaadin 8 Framework es la herramienta perfecta para usted. No veo cómo querrías dejar Vaadin.
Pero si dejara Vaadin, ya no tendría el pegamento que conecta su GWT en el navegador con su código Java en el servidor. Ese pegamento es lo que Vaadin te proporciona. Por supuesto, puede escribir su lógica empresarial de back-end de Java para no tener conocimiento de Vaadin directamente. De hecho, Vaadin Ltd proporciona un arquetipo de múltiples módulos basado en Maven para este mismo propósito. los backend
El módulo contiene la lógica de su negocio y el código de acceso a la base de datos (etc.), separado del ui
módulo que contiene su código orientado a Vaadin.
Tráfico de red
¿El método de Vaadin de ir al servidor cada vez es una preocupación para las aplicaciones que se implementan en la nube?
Deberá experimentar y crear perfiles para ver la memoria y los núcleos necesarios para su aplicación en particular. Vaadin puede ser exigente con los recursos del servidor como se mencionó anteriormente.
Pero técnicamente, no hay trucos ni límites técnicos con la implementación en la nube. Simplemente código Java en ejecución, en una JVM. Todo lo que pueda ejecutar un contenedor web Java Servlet, como Tomcat, Jetty, Glassfish / Payara, WildFly / JBoss, etc., puede ejecutar su aplicación Vaadin.
Si le preocupa el tráfico de la red, sí, hay tráfico. Cuando un usuario usa un widget como hacer clic en un botón o ingresar datos en un campo, se informa a su aplicación Java del lado del servidor para que su aplicación pueda responder con lógica empresarial. Eso significa un cruce frecuente de la red.
Tiene opciones para no informar inmediatamente al servidor cuando no sea necesario. Al hacerlo, está controlando parte de ese tráfico. Por ejem campo. Ver el [Configuring the Granularity of Value Change Events](https://vaadin.com/docs/v8/framework/components/components-textfield.html sección en el manual.
Temía un problema con el rendimiento de Internet cuando comencé con Vaadin. Pero puedo decir que, en mi propia experiencia, me sorprendió gratamente, realmente me asombró, descubrir que esto no era un problema para mí. Por ejemplo, en los Estados Unidos, con una simple Mac mini en un colo en Wisconsin con una conexión a Internet muy rápida que ejecuta una aplicación Vaadin 7 u 8, reacciona virtualmente instantáneamente cuando los clientes acceden a conexiones domésticas de DSL y TV por cable en Seattle, Florida y Canadá. . Cuando se accede desde Hong Kong, solo los más mínimos retrasos, generalmente imperceptibles en una aplicación de entrada de datos.
Su kilometraje puede variar, por supuesto. Mi ejemplo anterior fue una computadora dedicada. Por el contrario, los proveedores de la nube son conocidos por las fluctuaciones tanto en la disponibilidad de la CPU como en los retrasos o latencia de la red.
Apoyo
Por último, pero más importante, ¿cómo es el soporte del foro y el desarrollo futuro?
Vaadin Ltd parece ser una empresa de código abierto muy saludable. Venden productos complementarios, soporte, consultoría y capacitación. La empresa ha ido creciendo, contratando más personal y estableciendo oficinas en el extranjero (EE. UU., Alemania), mientras que su base de operaciones permanece en Finlandia (Turku, Helsinki).
Los diversos productos de Vaadin se encuentran en un desarrollo muy intenso con muchos lanzamientos incrementales, prelanzamientos y versiones de soporte a largo plazo que pronto llegarán. Publican periódicamente una hoja de ruta para sus planes de desarrollo. También proporcionan actualizaciones periódicas sobre sus problemas comerciales y técnicos en su blog.
La empresa Vaadin Ltd alberga un sitio de foros muy activo. Tanto su personal como otros usuarios también usan activamente Stack Overflow.