Posts Tagged ‘gwt’

Aunque ya hace semanas que esta disponible las versión más reciente de GWT, no he podido mirar las nuevas características. Que os voy a contar que no sepáis ya del tan deseado tiempo libre. Pero estaba con una nueva funcionalidad que requería una tabla rápida y sencilla, así que me he puesto a mirar las tabla o Cell variadas que traen las últimas versiones de GWT.
Simplemente impresionante, sencillo y algo que se demandaba desde hace tiempo. Yo he estado utilizando las tablas paginadas de incubator, a las cuales les tengo mucho aprecio ya que me han quitado mucho trabajo, pero tengo que admitir que estas tablas son extremadamente sencillas y organizadas, y se adaptan muy bien al MVP de GWT.
El funcionamiento es muy sencillo, voy a esquematizarlo porque la documentación de google es mas que completa.
- Te declaras la tabla, en mi caso he cogido CellTable, tienes mas opciones como CellTree y CellBrowser (aunque no he tenido oportunidad de probar), y le indicamos el objeto que va a contener mediante genéricos.
- Nos declaramos las columnas que llevara, indicando en cada una el dato de ese objeto que vamos a mostrar.
- Colocamos la tabla donde queramos.
- Nos declaramos un proveedor que nos dará una interfaz para trabajar con esta tabla.
- Y simplemente añadir nuestros objetos al proveedor, trabajando con listas. Aunque no es necesario, también se puede añadir un listado a la tabla directamente.
- Si queremos alguna columna ordenada, solo hay que implementar un ListHandler y asociarlo a la columna.
Y el punto fuerte de la nueva tabla, la selección de una fila, con declararte un sistema de selección, asignarlo a la tabla y luego implementar un handler de esa selección para hacer lo que queramos cuando hacen click en ella. Esto difiere un poco con la de incubator, que tenias que hacer algunas pirulas mas solapando modelo vista y presenter. De esta manera puedo implementar la acción en el presenter de forma transparente a a la vista. Una maravilla.
Y a poco que investigas un poco, ves como se puede poner de todo con facilidad en las columnas, y que hagan lo que quieras y como quieras. Así que mi primera impresión ha sido impresionante. Esperemos que siga así.
Si alguno lo ha probado o tiene algún problema podéis comentarlo, seguro que entre todos lo solucionamos o aprendemos a utilizarlo.
Llevo ya algún tiempo utilizándolo, aunque no tanto como me hubiera gustado. Todo empezó cuando salio una de las actualizaciones de GWT (una de las muchas), pero esta fue cuando ya se cambio el paradigma, y se comenzó a fomentar el uso del MVP (Model, View, Presenter), no se ahora mismo que versión fue.
La cuestión es que supuso un cambio importante y serio en la estructura. En este punto yo podría elegir entre dos caminos, seguir con mi estructura basada en mi propio desarrollo o interpretación del MVC, o intentar adaptarme a la nueva arquitectura. Después de sopesarlo un poco (no mucho, que no hay mas tiempo), me decanté por actualizar.
En esta página tenéis mas información sobre esta arquitectura, que espero sea motivo de otro post cuando tenga tiempo.
Los motivos fueron varios:
- Siempre es bueno seguir las indicaciones de Google.
- Sin lugar a dudas una nueva arquitectura adaptada a este patrón es algo que debía ser muy bueno.
- Fácil adaptación. Debido a mi arquitectura casera (por llamarla de alguna manera, no porque sea mala), la adaptación era muy sencilla, ya que había sido previsor y lo tenia todo muy bien separado y estructurado, así que no debería ser un gran trabajo.
Y así fue, no era complicado y era prácticamente cambiar cuatro cosas y crear cuatro clases más. Pero el problema era que lo tenia que hacer en TODAS la clases de mis fuentes. Esto ya suponía mucho, pero mucho, trabajo. Pero que me reportaría muchos beneficios a la larga.
Lo se, que tiene que ver todo esto con Velocity, pues ahora llego. Como usuario de Andromda, ya conocía los usos que se le podían dar a Velocity como generador de código, ademas de plantillas web. Así que me puse a diseñar mi propio generador de código para GWT con velocity. Aprovechando el cambio de arquitectura y con unas pocas clases mas, conseguí cambiar la arquitectura entera en pocos días. Ademas de que a partir de entonces cada vez que tenia que desarrollar una nueva funcionalidad vuelvo a utilizar mis plantillas que tanto trabajo me adelantan.
De acuerdo que podrian mejorarse, pero como siempre, hay poco tiempo y hay que ser productivos. Eso si, sin dejar de lado la calidad de los trabajos.
Quizás no fuera esta la principal función de Velocity, pero a mi me resulta, y desde entonces la utilizo para muchas mas tareas como mailing, generación de configuraciones, incluso de parte del build de las aplicaciones.
Así que os animo a echarle un ojo, que seguro que le sacáis partido, porque difícil, lo que se dice difícil no es nada.
Como es justo el tema con el que estoy, antes de que se me olvide lo pongo aquí. Son solo unas pequeñas notas que puede que no se tengan claras.
En un post anterior explique las diferentes opciones del compilador de GWT, pero a la hora de hacer el build tenia algunas dudas, os pondré los resultados de las pruebas.
- En ningun momento es necesario incluir el código fuente en el build para producción
- Aunque si debe estar accesible el código fuente para su compilación (es obvio), yo en este caso suelo meter en diferentes jars los fuentes y copilados de los diferentes módulos, para luego incluirlo en el classpath del proyecto principal.
La verdad es que cuando pensé en escribir un post, pensé que tendría mas chicha, pero me ha resultado todo un reto montar un build con diferentes módulos y proyectos, aunque ahora ya terminado parece una tontería.
Estos días ando un poco liado con el desarrollo de una aplicación en GWT. Que con esta ultima versión, la 2.0, se puede decir que han dado un paso de gigante.
En esta ocasión voy a hablar de su compilador para la puesta en producción y los parámetros que tiene.
Antes de nada explicar un poco como funciona, GWT coge y compila a javascript nuestro codigo creando diferentes versiones en archivos diferentes. Si nos fijamos en lo que genera veremos que hay una serie de archivos con extensiones html, rpc, png. Los png son los bundle, donde mete todas las imágenes de la aplicación en una sola, descargándola de golpe y luego muestra la parte que interese. Los archivos rpc son los encargados de las llamadas a los servicios y los html son donde esta toda la chicha.
Veremos que son del estilos LKH45KH6KLJH4356H3456HLKH45.cache.html, cada archivo represente a un idioma/navegador. Así que si tenemos 2 idiomas y 5 navegadores, tendremos 10 archivos o permutaciones como ellos los llaman.
Cada compilación lleva su tiempo, y en las tareas ant que utilicemos podremos introducir algunos parámetros que agilicen esta compilación.
Si tenemos varios módulos, es interesante que los compilemos en una misma tarea, indicando a cada llamada java que sea un fork, para que se compile en paralelo.
Y hacemos uso de unos de los parámetros mas interesantes, el localworkers, esto representa a un hilo que compila una permutación, así que si ponemos mas, compilaría paralelamente las permutaciones, aquí que cada uno hagas sus pruebas. Yo tengo 4 núcleos y poniéndolo en 4 se me reduce a la mitad el tiempo necesario para compilar.
Os dejo una muestra en ant.
<target name="gwtc" depends="javac" description="GWT compile to JavaScript">
<!-- Compilacion modulo vo -->
<java failonerror="false" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="modules"/>
<path refid="project.class.path"/>
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx256M"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg value="com.orion.apps.cuentas.ValueObject"/>
<arg line="-war ${build.dir}"/>
<arg line="-style DETAILED"/>
<arg line="-localWorkers 4"/>
</java>
<!-- Compilacion modulo cuentas-->
<java failonerror="false" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="view/main/java"/>
<pathelement location="view/main/resources"/>
<pathelement location="rpc/main/java"/>
<pathelement location="modules"/>
<path refid="project.class.path"/>
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx256M"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="-war ${build.dir}"/>
<arg line="-style DETAILED"/>
<arg line="-localWorkers 4"/>
<arg value="com.orion.apps.cuentas.web.CuentasWeb"/>
</java>
</target>
PD: Si se quiere ir mas rápido, se puede eliminar idiomas del archivo de configuración gwt.xml
Un año mas el curso de especialista en JEE ha organizado una jornada de charlas sobre java y software libre. Aunque el año anterior no hubo, este año han vuelto con un buen abanico de ponentes muy buenos.
En su pagina web, podéis ver con mas detalle quienes han venido. Un resumen de las que hubo:
- GWT con Emilio bravo. Amigo y compañero de proyectos, hablo de una tecnología que ya llevo tiempo utilizando y son un fan convencido.
- Agilidad con Martin Perez. Otro amigo el cual tuve el privilegio de conocer con su anterior proyecto de Jlibrary. Como siempre magistral, se nota que no es su primera ponencia. Además hablo de un tema muy interesante y que además me cojea bastante. Así que con las aclaraciones que ha hecho creo que me voy a poner en serio a utilizar el diseño basado en pruebas y las metodologías ágiles.Además comento varios aspectos del mundo empresarial a los que ya me había referido en post anteriores. Aunque el con mas tranquilidad, constata como un equipo especializado vale mas que un gran equipo de personal poco cualificado. Y por supuesto, los proyectos ágiles suelen tener mas existo, o tienes mas predisposiciones a tenerlo, que un proyecto gestionado con metodologías mas rígidas. Algo que para muchos nos resulta mas que evidente, pero que en el mundo empresarial no.
- Modelo de negocios con Sergio Montoro. A expuesto de forma muy clara, las diferentes formas de ganar dinero con el software libre. Estoy bastante de acuerdo con la mayoría de las razones que ha dado. Aunque en el tema de servicios creo que hay mucho mas que decir. Pero eso depende sobre todo de tu modelo de negocio. A Sergio lo he conocido hace unas semanas, ya que he comenzado a desarrollar unos módulos para su software hipergate.
- Por ultimo, Francisco Peyrona, una persona muy importante en Sun Microsystem. Ha explicado que es java y que software tiene Sun, Glassfish y NetBeans. Ha sido divertido, y ha contado anécdotas interesantes.
Todas interesantes y con mucha información que poner en practica. Espero que pongas las ponencias en la web, aunque solo sen los pdfs.
Desde aquí mandar un saludo y las gracias a todos los ponentes, y espero que el próximo año siga la universidad promoviendo eventos de este tipo. A ver si el próximo año me toca a mi el iPod.


