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!

Usando el ListeningExecutorService de Guava

Antes de conociera algo de Hystrix en una aplicacion que mantengo tuvimos varios problemas con un servicio de notificaciones. Este servicio dependia de otro servidor que, como todo, a veces fallaba.

El detalle es que el proceso de notificación se hacía durante el proceso principal de la aplicacion; cuando se realizaban las llamadas correspondientes al servicio el proceso se detiene o lanzaba excepción... pero esto era en el mejor de los casos, también ocurrio que no especificamos timeouts para el servicio y por lo tanto el proceso principal de la aplicacion podia quedarse varado hasta por un día (que era el timeout por defecto del socket que se abría por medio de otra libreria).

En fin, el perder las notificaciones no era opción y tampoco lo era detener el proceso hasta que estas notificaciones se entregaran. Por lo tanto, optamos por hacer algo como esto:

Hystrix: primer contacto

En la conferencia de Software Guru de este año, Agustín Ramos dio una charla acerca de sistemas tolerantes a fallas, en la cual mencionó un software que me llamó mucho la atención, llamado Hystrix, desarrollado por Netflix.

La idea de Hystrix es que en sistemas que se comunican mucho con otros sistemas por medio de red, poder aislar todas esas llamadas a servicios externos y permitir que sean administradas de forma robusta, es decir, que haya un control de conexiones salientes, mantener buenos tiempos de respuesta, con tolerancia a fallas integrada.

Esto suena muy bien: si tengo un sistema que hace llamadas constantes a un web service externo, generalmente el funcionamiento de ese web service afecta el funcionamiento de mi sistema: Si de repente se pone lento, se tarda mucho en contestar, mi sistema empieza a sentirse lento, porque está esperando respuesta del sistema externo. Luego empiezan los problemas porque resulta que mi sistema encola las llamadas a dicho web service, precisamente para no saturarlo, pero pues está lento y eso está fuera de mi control pero resulta que las llamadas encoladas ya se tardan mucho tiempo en ejecutarse, es decir, la tardanza del web service no solamente se convierte en esperar respuesta del mismo, sino que hay llamadas que se quedan mucho tiempo encoladas y entonces puede que ya salgan muy tarde. ¿Y si hay un usuario en línea esperando la respuesta? ¿Y si el sistema ya le respondió error, incluso antes de que siquiera se realice la llamada al servicio externo?

Ejemplo básico Quartz 2.2.1 + Tomcat 7.0.54 (con edición de expresión cron)

Quartz es una utilería que permite calendarizar tareas, o en otras palabras, ejecutar una tarea cada cierto tiempo. Funciona sobre Java SE o Java EE. El siguiente ejemplo requiere de las siguientes librerías:

  • quartz-2.2.1.jar
  • slf4j-api-1.7.7.jar
  • slf4j-simple-1.7.7.jar

No se requiere el archivo web.xml. Utiliza @WebListener y @WebServlet.

Estructura

El proyecto tiene la siguiente estructura (siguiendo la estructura de un proyecto típico de eclipse):

C:.
|
|
+---src
|   +---jobs
|   |       SimpleJob.java
|   |
|   +---listeners
|   |       QuartzListener.java
|   |
|   \---servlets
|           EditTriggerServlet.java
|
\---WebContent
    \---WEB-INF
        \---lib
                quartz-2.2.1.jar
                slf4j-api-1.7.7.jar
                slf4j-simple-1.7.7.jar

QuartzListener.java

Football Mejor y peor equipo

Se presentan los resultados de la liga premier 2001 y 20002 el programa obtiene el mejor y el peor equipo basado en los goles anotados y recibidos.

se utiliza la programacion MapReduce para resolverlo.
Este es el Mapper:

package mx.com.sinapsis.ds.test.futbol;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class ObtenerDiferenciaMapper extends Mapper<LongWritable, Text, LongWritable, Text>{
        private Text diferenciaText = new Text();
       
        protected void map(LongWritable key, Text value, Context context)
                      throws java.io.IOException, InterruptedException {
                String[] dato = value.toString().split(",");
               
                int temp = Integer.parseInt(dato[5]) - Integer.parseInt(dato[6]);
                diferenciaText.set(dato[0] + "," + temp);
               
                context.write(new LongWritable(1), diferenciaText);
               
        }

}

este es el reducer:

 

package mx.com.sinapsis.ds.test.futbol;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

Programando en Ceylon y PSeInt

Existe una herramienta para aprender a programar llamada PSeInt, en esta ocasión vamos a realizar ejemplos de programación básica y comparando esos códigos en Ceylon.

Ejemplos

1. Se requiere obtener la talla de una persona sabiendo que su peso es de 54.5 kg y su índice de masa corporal es de 22.1.
Fórmulas:
imc=peso/(talla*talla)
peso=(talla*talla)*imc
talla=sqrt(peso/imc)

Usando PSeInt escribimos:

Ahora en Ceylon:
obtenerTalla.ceylon

void run(){
variable Float peso=54.5;
variable Float talla=0.0;
variable Float imc=22.1;

function sqrt(Float x) => x^0.5; //para obtener la raíz

talla=sqrt(peso/imc);
print("talla: ``talla`` ");
}

Compilamos y ejecutamos:

Videotutoriales con AndroidStudio en Español

Este curso es para el desarrollo de apps con AndroidStudio, donde aprenderás cómo crear y diseñar tu proyecto, así como la interfaz de usuario. El único pre-requisito es que sepas programar en Java, dado que es el lenguaje principal de programación con Android. Todos los videos están explicados en español y son bastante fáciles de seguir, al ser altamente visuales.

http://www.youtube.com/playlist?list=PL8uMVSRxHi9C3T3EXvQ43hgtiGMHxD8AR

Se encuentran hasta el momento 40 capítulos en producción para este tutorial, cubriendo desde los temas más básicos hasta los más avanzados, como SQLite, trabajando con ORMLite como motor de perisstencia, Intents, fragmens, Fragments Dinámicos, Servicios, AsyncTasks, y habrá una sección especial implementando un proceso de sincronización con Apache Tomcat 8 y servicios web REST utilizando Jersey, Netbeans 8 y MySQL 5.6

ArnoldC ... un lenguaje de programación inspirado en Arnold Schwarzenegger

Se trata de un lenguaje de programación bastante curioso.

Este código esta en la página del proyecto.

hola.arnoldc

IT'S SHOWTIME
TALK TO THE HAND "¡Hola, mundo!"
YOU HAVE BEEN TERMINATED

Creamos el class y ejecutamos:

java -jar ArnoldC.jar hola.arnoldc
java hola


Links:

http://lhartikk.github.io/ArnoldC/
https://github.com/lhartikk/ArnoldC

SG Conference & Expo 2014 ya esta aquí

Pues ya está en puerta la SG Conference & Expo 2014, el 25 y 26 de junio en el DF, y javaMéxico tiene un pase para uno de los miembros de la comunidad.

Debido al poco tiempo que nos queda, este año la dinámica será muy sencilla: revisen la agenda de la conferencia, platíquennos aquí mismo a qué eventos asistirían si se ganan el pase, y por qué. Le daremos el pase a quien creamos que mejor va a aprovecharlo (sí, sabemos que esto es un tanto subjetivo, pero si hacemos lo de otros años no vamos a poder dar el pase con suficiente anticipación).

Descuento a miembros de javaMéxico

Este año además podemos otorgar un 15% de descuento en la inscripción a los miembros de javaMéxico que deseen asistir; interesados contacten a Benek o a mi en twitter para mandarles el código promocional por DM.

OpenXava 5.0 liberado: Desarrollo rápido con Java

OpenXava es un marco de trabajo AJAX para desarrollo rápido de aplicaciones web empresariales.

Con OpenXava sólo has de escribir las clases del dominio con Java para obtener una aplicación web lista para producción.

Esta versión 5.0 tiene un nuevo estilo visual, incluye navegación entre módulos, identificación de usuario (por tanto ya no necesitas Liferay), colecciones editables en línea (como en una hoja de cálculo), un nuevo editor para adjuntar archivos a tu entidad y muchísimas cosas más.

Te invitamos a que lo descargues y actualices tus aplicaciones OpenXava. Mira las instrucciones de migración.
 

Iniciando con JavaFX: Layouts - Ejemplos de uso.

Exordio

Mas allá de querer impresionar al lector con palabras rebuscadas lo que pretendo es advertirle de lo que esta por ver. Contenido sobre los layouts y su uso básico en JavaFX. Esto no es un discurso, ni una novela pero debo advertir que por cuestiones de preferencias personales he decidido crear una publicación lo suficientemente grande como para resultar incomoda de leer. Sin mas que agregar ¡Que comience el codeo!

Layout VBox

Como habíamos mencionado este layout nos permite colocar nodos hijos en una columna , lista vertical o caja vertical, escojan la definición que prefieran.
Aclaración: usare un nodo de tipo Button para ejemplificar el uso de los diferentes layouts, ya que al tener un tamaño definido sera mas fácil de apreciar las características del layout.
Iniciemos con el primer ejemplo:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

/**
 *
 * @author kalt
 */

public class VBoxTest extends Application {

Distribuir contenido