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!

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).

Java para principiantes (Ambito o alcance de las variables en Java)

Hola a todos, en mi blog quiero ayudar a varios jóvenes que se inician en el mundo de la programación en Java, así que he creado algunos post que quiero compartir con ustedes, esto con el fin de obtener críticas y consejos para mejorarlo, sin más preámbulo acá esta el artículo:

El alcance de las variables es una de las consultas que más se presentan en los blogs, adicionalmente son la causa de dolores de cabeza de algunos desarrolladores novatos, por lo tanto, hemos creado este post con el fin de explicar de una forma clara cual debe ser el comportamiento de las variables locales, globales, de clase de método etc.

Inicialmente crearemos una clase con el siguiente código:

public class EjemploAmbito {
 
     //Declaración de variable de clase
     private int edad;
 
     //Declaración del método main
     public static void main(String[] args) {
          EjemploAmbito ambito = new EjemploAmbito();
          ambito.setEdad(25);
          System.out.println("La edad es " + ambito.getEdad());
     }
     //Declaración del getter de edad
     public int getEdad() {
          return edad;
     }
     //Declaración del setter de edad

Entorno de desarrollo IDE o editor de texto?

Siempre había pensado que era mucho mejor trabajar en un IDE, pues me permite crear las interfaces gráficas con mayor facilidad, sin embargo mi visión del universo de la programación estaba muy sesgada, pues la mayor parte de mi tiempo programando he usado los entornos de desarrollo.

Pues bien, aunque en la encuesta los vencedores fueron los IDE, y entiendo el por que, me sorprendió la cantidad de votos que tuvieron los procesadores de texto minimalistas, (les pido perdonen mi entusiasmo, este blog tiene pocas semanas de creado, para mi 47 votos son un número enorme!!) , y fue así como consulte a varios de los programadores que los usan para que me explicaran las ventajas que tienen y por que los eligieron.

En primer lugar, la mayoría de los desarrolladores que usan estos programas tienen una gran inclinación por el desarrollo web, y claro, tanto Gedit como Sublime Text manejan HTML5 y CSS3; es cierto que Netbeans y Eclipse han expandido sus fronteras buscando que los desarrolladores los elijan no solo para trabajar en Java sino también para trabajar en HTML, PHP, Ruby etc. Pero créanme que a los desarrolladores web no se los ganan tan fácil.

Distribuir contenido