Software Guru Conference & Expo 2014

Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

También puedes responder nuestra encuesta para saber en que estado vives!

Publicado SQL Data Workshop

Después de poco más de año y medio de tiempos libres dedicados y, gracias a que mi compañera de trabajo me ayudó con la documentación, he podido liberar una herramienta que se conecta con los gestores de base de datos más populares para permitir al usuario realizar operaciones SQL.

No es una herramienta de administración completa, más bien está enfocada en la ejecución de consultas y obtenciónde datos. de igual forma, tiene un diseñador visual de consultas (muy parecido al SQL Server Management Studio) aunque con menos prestaciones en esta parte. Aunque estás líneas presenten cierto sesgo, puedo argumentar que esta herramienta la utilizo a diario en mi trabajo y me siento cómodo trabajando con ella. Aun faltan mejoras, las cuales iré incorporando con el paso del tiempo.

La aplicación está completamente construida en Java y Swing. Para el retoque visual y gestión de componentes y documentos utilizo el framework jidesoft (http://www.jidesoft.com. Aunque es una librería de pago, la compañía me ha proporcionado una licencia totalmente gratis para incorporar la librería en la versión final.

Esta es la página del proyecto:

Paginacion: DataTables + Spring

Les cuento que ando un poco alterado llevo 4 tasas de cafe ya termine mi pega y aun traigo energias...

Asi que me pondre a compartir un poco de mi experiencia con estas dos cosas datatables y spring.

En esta ocacion lo que tenemos es una paginacion y tabulacion de datos. Para ello como dice el titulo sera con DataTables y un framework que veo que se usa mucho Spring. Como acceso a datos se utiliza un ORM Hibernate


El ejemplo lo llevare a cabo con una tabulacion de dos columnas (ingrediente y su categoria), las cuales a nivel datos son la union de dos tablas. Realizaremos el ordenamiento por ambas columnas, paginacion y busqueda por texto en ambas columnas.

Caracteristicas:
Comunicacion: Peticiones ajax datatables ya realiza por ti el render de los resultados, genera la peticion al servidor y nosotros solo la procesamos.
Tipo de peticion: GET
Respuesta: Json que se define en la documentacion de datatables
Referencia: DataTables Server-Side

Jasper Report + Tapestry

Editado:
Les dejo como implemente mi generacion de reportes usando jasper Reports en Tapestry5.

Comienzo desde la parte en que ya se tiene el reporte.

Caracteristicas:

Manejo JRBeanCollectionDataSource puesto que estamos utilizando un ORM para la obtencion de los datos y no queremos queries en el reporte.
Manejamos el template en otro servidor para poderlos cambiar si asi se requiere (creanme funciona lo he realizado incontables veces)

De ahi tengo 2 Clases principales: una que genera el reporte y otra mas para generar la respuesta de stream de tapestry.

Como manejo archivos dentro de la app tengo un wrapper para eso.

Receta:

Código “flecha” y cláusulas de guardia

Hace poco me encargaron cambiar un código bastante viejo para que pudiéramos usarlo en una capa de Batch donde se requiere dividir bastante lo que se quiere hacer i.e. hacerlo en lo que Spring Batch llama Tasklets.

Obviamente llego el momento en que tuve que seguir el código para entender que es lo que hacía (además de preguntar qué es lo que se supone que debe hacer, cosa diferente) y mi sorpresa fue que me topé con un código que se veía similar a esto...

groovy y propiedades enlazadas

hola comunidad quise hacer mi primer blog y empeze por este tema ya que estoy jugando con groovy ya un tiempesito , bueno todos sabemos que java a traves de los javabeans cuenta con PropertyChangeListeners que notifica a todos los oyentes antes registrados con (addPropertyChangeListener) de los cambios de valor de algunas de sus propiedades a traves de firePropertyChanged aqui hay un ejemplo del javabeans que llamaremos modelo

import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;

public class Modelo{
    private String propiedad;

    PropertyChangeSupport pcs = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener l) {
        pcs.add(l);
    }

    public void removePropertyChangeListener(PropertyChangeListener l) {
        pcs.remove(l);
    }

    public String getProp() {
        return prop;
    }

    public void setProp(String propiedad) {
        pcs.firePropertyChanged("propiedad", this.propiedad, this.propiedad = propiedad);
    }
}

-las clases registradas a este modelo tienen que implementar la interfaz PropertyChangeListener con su metodo
 

Harvesting verticles, parte 2.

> ¿Qué es un verticle?

Antes de comenzar debes tener instalado Vert.x. Si tienes dificultades para instalarlo crea un nuevo hilo en el foro y verifica que la pregunta no exista aun.

Vert.x usa eventos para producir acciones y las consecuencias de esas acciones pueden generar otros eventos, así sucesivamente. La forma en que los eventos trasmiten información es mediante mensajes.

Los verticles son una unidad muy pequeña de código; scripts en su mayoría, y se encargan de contener la lógica de los eventos, están pensados para ser muy pequeños y la máxima es que no estorben a los demás verticles. Sí un verticle se muere no dejara colgado a los demás. Pero si un Verticle contiene más verticles, todos los que dependan del original mueren y eso esta bien porque estamos seguros de no dejar verticles huérfanos.

Déjenme poner uno ejemplos para entender este concepto.

Harvesting verticles parte 1.

> ¿Qué es Vert.x?

Es una plataforma orientada a crear aplicaciones web, empresariales, móviles, que es poliglota, simple, escalable, concurrente, o por lo menos es lo que dice la portada de la pagina del proyecto, también puedes ver lo que dice wikipedia al respecto y dentro de la documentación comentan también este teman. Y la versión resumida

Episodio 5 de la temporada 1 - ViveCodigo.org – Coding Dojo (Codebreak)

Esta vez en la entrega de Vivecodigo les presentamos nuevamente un coding dojo, en el cual se desarrollo un juego llamada code breaker con algunos destacados invitados.

La dinámica fue pasar una a uno para ir desarrollando el juego, el cual fue en base Test-driven development (TDD) por lo cual cada uno de los invitados pudo aportar elementos para el desarrollo de esta solución.

Al concluir se platico sobre la dinámica y las dificultades que existieron, con lo cual pudieron realizar una retrospectiva de lo que mas les agrado y no de este coding dojo, en base a l esfuerzo y las ideas que apostaron cada uno de ellos.

Un video sin duda muy entretenido y con elementos enriquecedores.

Espero disfruten este contenido. Sigan enviándonos sus comentarios tambien nos pueden seguir en nuestro feed de vivecodigo.org.

Probar una cadena de llamadas con Mockito

Como @neodevelop explica en esta entrada: http://www.javamexico.org/blogs/neodevelop/pruebas_de_unidad_con_mockito... se puede probar con Mockito si un metodo fue llamado o no utilizando verify(objeto).nombreDelMetodo();

Utilice varias veces esa comprobación hasta que me fallo recientemente en un escenario como el siguiente: quería ver si mi nuevo método PhoneManager.getPhone(id) estaba invocando el método Profile.getPhone()

// FAIL
// prueba que el getter getPhone fue invocado:
class PhoneManagerTest {
    @InjectMocks PhoneManager phoneManager;
    @Mock Profile profile;
    ...
    @Test
    public void testGetPhone() {
        Assert.assertEquals("(55) 5658-1111", phoneManager.getContactPhone(1));
        Mockito.verify(profile).getPhone();
    }

El problema es que profile no es un atributo de PhoneManager sino que es obtenido con una cadena de llamadas como esta:

Profile profile = phoneManager.getAccountAdapter().getProfileService().getProfileById(id);

Preprocesadores para desarrollar las páginas Web y PreprocessJS

Hace algunos dias, platicando con algunos desarrolladores que nunca habian programado una página web dinamica con algunas de las tecnologias mas comunes para realizarlas, me pregunto uno de ellos, ¿en si como funcionaba un JSP ó un PHP ó un ASP o un GSP ...? .

La respuesta que le di fue desde luego algo minimalista, por que se que esas tecnologias funcionan gracias a los framewroks y a los lenguages subyacentes que permiten crear el contenido dinámico de las páginas web, plus los servidores web (apache, tomcat, jboss, websphere, iis etc.) que permiten las conexiones en internet via sockets y el protocolo TCP/IP.

Y lo que de una o de otra forma le comente es que esos lenguages de scripting en gran medida(hablando en la capa de desarrollo de aplicaciones web) preprocesaban archivos que tienen incrustado HTML, Javascript y un lenguaje de alto nivel como Java, Groovy, C#, Vb.Net, o más propietarios como el PHP que es (C syntaxis like).

Distribuir contenido