2009-05-12 10 views
9

Mi equipo se está embarcando en su primer proyecto GWT. Somos bastante fuertes con las aplicaciones de Swing, y casi todo nuestro trabajo incluye importantes GUI de Swing.GWT: Gotcha's

Sin embargo, esta es nuestra primera incursión fuera del escritorio y de la Web, y el proyecto requiere que usemos GWT. El proyecto en sí es bastante directo, el único desconocido para nosotros es reemplazar la UI Swing con la interfaz de usuario de GWT.

¿Qué escollos deberíamos tener en cuenta?

Respuesta

7

No está utilizando GIN y Guice. La inyección de dependencia es muy, muy útil. GIN (Guice for GWT) no está muy bien documentado, pero vale la pena el tiempo invertido para que funcione.

+0

Encantador. ¿Crees que lo hicieron a propósito? Estoy pensando que beber es más recomendado que beber en este caso. –

+0

GIN ** está ** bien documentado: los documentos GIN cubren todas las diferencias entre GIN y Guice. Para todo lo demás, consulte los documentos de Guice (que considero suficientes y bien escritos); no es necesario poner la misma información en dos lugares. –

+1

Han pasado un par de meses desde que contesté esto. Tal vez ha mejorado.Oí gente hablando de algo llamado 'UiBinder' ahora de todos modos. –

2

Los diferentes navegadores tienen características de rendimiento bastante diferentes, por lo que tendrás que probar contra diferentes navegadores a pesar de que GWT genera soluciones de JavaScript para las diferencias del navegador.

La creación de elementos DOM puede ser muy lenta en algunos navegadores. Si tiene tablas de gran tamaño (docenas de filas) que cambian frecuentemente, el navegador puede dejar de responder si solo elimina todas las filas y las vuelve a crear. Tuvimos que escribir un algoritmo diferente para actualizar de manera eficiente las tablas cuando se obtuvieron nuevos contenidos del servidor.

11

Se me ocurren algunas:

  • Todo es asíncrona. Bueno, cualquier cosa orientada al servicio en cualquier caso. Mientras que Swing a veces actúa así a través de SwingWorkers y similares, Swing es fundamentalmente sincrónico a través del EDT (subproceso de envío de eventos). Puede tomar un tiempo acostumbrarse;
  • Te enfrentas a un mundo de daños conocido como CSS y compatibilidad entre navegadores. Aunque GWT enmascara muchas de las diferencias entre los navegadores, ciertamente no los enmascara a todos y puede pasar horas buscando la fuente de una línea de píxeles en GWT tal como lo hace en un sitio web normal;
  • Hay muchos menos recursos para Swing que GWT;
  • Solo puede usar ciertas clases en el lado del cliente. El que siempre me causaba problemas era BigDecimal;
  • Sus opciones de widgets son mucho más limitadas. Hagas lo que hagas evita ExtGWT como la peste. Daryls es como Jeffrey Dahmer de Generics;
  • Asegúrate de usar GWT 1.6;
  • El tiempo de compilación en GWT es simplemente horrible;
  • Si solo está realizando cambios en el cliente (es decir, no está cambiando ninguna interfaz de servicio), no necesita reconstruir para ver esos cambios. Solo actualice en el navegador alojado;
  • Para cambios en el código del servidor que no cambia las interfaces, asegúrese de tener una tarea Ant o Maven para reconstruir y volver a implementar sus clases sin hacer una reconstrucción GWT;
  • Puede apuntar el navegador alojado a algo que no sea el servidor alojado y depurarlo; y
  • Asegúrese de que su máquina tenga mucha RAM. Mi IDE en algunas aplicaciones salía de errores de memoria si le asignaban menos de un gig de RAM y estas no eran aplicaciones enormes. Realmente recomendaría un mínimo de RAM del sistema 2gigs, preferiblemente 3 o más.
+0

Solo por curiosidad, ¿por qué evitarías ExtGWT? –

0

me encontré con un problema por el que tratar de rellenar las tablas a través de la colección anidada no funcionaron, presumiblemente debido a que el compilador no lo entendía (tema @GWT list). Tenga en cuenta que esto fue hace aproximadamente un año, por lo que puede que ya no sea el caso.

Segundo problema (nuevamente, hace un año, puede que ya no sea el caso) fue que compilar en una caja de 64 bits con una JVM de 64 bits no era compatible, así que terminé necesitando un bit separado jvm y envolviendo una tarea ant que hizo referencia específicamente a eso para la configuración de compilación de GWT.

3

Para ampliar lo que Cletus dijo sobre "ciertas clases", no tiene un JRE completo en el lado del cliente de GWT. (Recuerde, el código de cliente de GWT Java se traduce a JavaScript.) Esto significa que las API de Java de terceros a menudo no funcionarán en el lado del cliente. Necesitan ser portados para GWT. Tanto para escribir una vez, correr a todas partes. Consulte here para obtener más información sobre esta limitación.

1

mayoría de estos son todavía 100% relevante para lo que quieres hacer:

Biggest GWT Pitfalls?

Para abordar específicamente la oscilación -> GWT transición hay una regla sencilla:

  • GWT es no Swing, y para crear una buena aplicación, siempre debe saber, en algún nivel, qué tipo de HTML crearán los widgets que está creando, y de vez en cuando tendrá que ensuciarse y modificar parte del comportamiento o incluso codificar algunas partes personalizadas en javascri pt o HTML.
1

Uno de los principales puntos a tener en cuenta es la prueba. Probar una aplicación de swing con junit es bastante directo, pero para obtener ese nivel de cobertura en una aplicación gwt necesitarás ampliar tu arsenal.

  1. Straight junit - Esto es adecuado para las clases de modelo/utilidad que no hacen referencia al tiempo de ejecución de gwt. Simplemente escriba y ejecute sus pruebas como un junit normal, solo asegúrese de que gwt no intente compilar su código de prueba en su módulo. No siempre puedes factorizar tus clases para obtener este tipo de cobertura, pero cuando puedes es genial y rápido.
  2. GWTTestCase/junit: esta es una subclase especial TestCase (estilo junit3) que iniciará cierto tiempo de ejecución de gwt para la ejecución de prueba. En mi experiencia, es muy difícil obtener una buena cobertura y es demasiado lento para ser útil. Lea this para obtener más información sobre el tema.
  3. Selenium - Esto le dará cobertura en el navegador (y es personalmente mi enfoque favorito). Si usa java selenium-rc y lo combina con embarcadero para servir su aplicación bajo prueba, incluso puede simular llamadas rpc para probar completamente su interfaz de usuario. También tiene la capacidad de ejecutar sus pruebas en todos los principales navegadores.
0

Incluso con 4 gigas de RAM, puede tener problemas para compilar su aplicación (en GWT 1.6 y anteriores). No puedo compilar nuestra aplicación (bastante grande) en el trabajo usando Maven/lo que sea. El modo hospedado funciona bien, pero ninguna configuración (el aumento de las restricciones de memoria vm a 2 gigas, etc.) parece resolver esto.