Programación Funcional en Java

Functional Programming in Java 8 (Part 0): Motivation

As we begin a series on functional programming, see why you should consider making the move and how you can incorporate it using some familiar Java.

Functional Programming in Java 8 (Part 1): Functions as Objects

If functional programming has your attention, let’s start with the basics: functions. You can store functions as objects, take them as arguments, return them, and more.

Functional Programming in Java 8 (Part 2): Optionals

Use Optionals when there is a clear need to represent ‘no result’ or where null is likely to cause errors. Otherwise, stick to nulls.

An Introduction to Functional Programming in Java 8 (Part 3): Streams

Streams are an important functional approach that can impact performance via parallelism, augment and convert data structures, and add new tools to your kit.

An Introduction to Functional Programming in Java 8 (Part 4): Splitter

Now that you know some functional programming basics, let’s use lambdas to optimize our runtime with the help of a Splitter.

Publicado en Java. Leave a Comment »

Convirtiendo un CSV a JSON con Java (y sin crear DTOs intermedios)

Del artículo How to Convert CSV to JSON in Java de Jay Sridhar

Supongamos que tenemos este CSV:

rep_file_num,CIK,entity_name,street1,street2,city,state_code,zip,filing_date,doc_type_code

814-00034,0000731812,SIERRA RESOURCES CORP,629 J STREET,SUITE 202,SACRAMENTO,CA,95814,12/30/96,15

814-00053,0000821472,WESTFORD TECHNOLOGY VENTURES LP,17 ACADEMY ST 5TH FLOOR,[NULL],NEWARK,NJ,07102-2905,01/28/04,NO ACT …

814-00098,0000878932,"EQUUS TOTAL RETURN, INC.",EIGHT GREENWAY PLAZA,SUITE 930,HOUSTON,TX,77046,08/25/16,40-APP/A

¿Cómo lo convertiríais a un JSON de este tipo?

{ 
 "rep_file_num" : "814-00098", 
 "CIK" : "0000878932", 
 "entity_name" : "EQUUS TOTAL RETURN, INC.", 
 "street1" : "EIGHT GREENWAY PLAZA", 
 "street2" : "SUITE 930", 
 "city" : "HOUSTON", 
 "state_code" : "TX", 
 "zip" : "77046", 
 "filing_date" : "08/25/16", 
 "doc_type_code" : "40-APP/A" 
}

Pues con este sencillo código:

La clase CSV se encarga de gestionar el fichero al estilo Excel, podéis ver lo que tiene la clase aquí.

Publicado en Java. Leave a Comment »

Publicado Hazelcast IMDG 3.8

Hazelcast logo

Se ha publicado la versión 3.8 del grid open-source Hazelcast IMDG 3.8 GA.

Esta versión tiene numerosas novedades (algunas de ellas las esperábamos ansiosos!!)

(Jesús, ya sabes lo que te toca :D)

Una de las mejoras fundamentales de Hazelcast IMDG 3.8 es la mejora en el uptime-time del cluster: ahora el número de veces que el cluster debe pararse para mantenimiento se ha reducido.

Además se han incluido mejoras para gestionar la persistencia y el despliegue multi-data center.

Veamos algunas de las novedades:

Rolling Upgrade (Enterprise)

Es la capacidad para actualizar las versiones de los nodos del cluster sin interrupción del servicio.

Docs: http://www2.hazelcast.com/e/30822/x-html-rolling-member-upgrades/btvcj4/368721839

Dynamic WAN Sync (Enterprise)

Usando replicación WAN puedo copiar los datos de un cluster a otro sin interrupción en el servicio.

Docs: http://www2.hazelcast.com/e/30822/gle-index-html-wan-replication/btvcjb/368721839

Hot Backup Cluster (Enterprise)

Permite hacer un backup de un cluster en ejecución a través de un API REST o del centro de despliegue.

Docs: http://www2.hazelcast.com/e/30822/l-single-index-html-hot-backup/btvcjd/368721839

Scheduled Executor Service

Es una implementación distribuida del API Java ScheduledExecutorService, permite hacer Schedule de tareas en el cluster.

Docs: http://www2.hazelcast.com/e/30822/tml-scheduled-executor-service/btvcjg/368721839

Open Sourcing Continuous Query Cache

En esta release se ha hecho open-source la funcionalidad Continuos Query Cache, que permite combinar los contenidos de una caché con streams de eventos para actualizar la caché.

Es muy útil si necesitas hacer queries de datos de un IMap distribuido muy rápidamente. De esta forma los resultados de la query estarán siempre listos de forma local a la aplicación.

Docs: http://www2.hazelcast.com/e/30822/ex-html-continuous-query-cache/btvcjj/368721839

Projection for Queries

Las queries pueden ahora devolver campos específicos de u entry. Esto minimiza el tráfico por red e mejora el throughput.

Docs: http://www2.hazelcast.com/e/30822/-single-index-html-projections/btvcjl/368721839

Fast Aggregations

Antes de Hazelcast IMDG 3.8, las agregaciones se basaban en el motor Map-Reduce de Hazelcast. Esta funcionalidad es el sucesor y ahora ejecuta sobre una infraestructura de Queries, que mejora el rendimiento en un ratio de cientos puesto que ejecutan en paralelo en cada partición.

Docs: http://www2.hazelcast.com/e/30822/e-index-html-fast-aggregations/btvcjn/368721839

Improvements on Near Cache

2 mejoras principales:

· Es consistente eventually vs weakly consistent

· El cliente de Near Cache puede persistir keys en un filesystem y recargarlos en restart.

Docs: http://www2.hazelcast.com/e/30822/l-single-index-html-near-cache/btvcjq/368721839

User Code Deployment (Beta)

Permite cargar nuevas clases a los nodos Hazelcast IMDG dinámicamente sin reiniciar. Es por tanto un classloading dinámico y distribuido.

Docs: http://www2.hazelcast.com/e/30822/html-user-code-deployment-beta/btvcjs/368721839

Split Brain Protection for Queue and Lock

Cluster quorum es un esfuerzo para hacer las estructuras de datos más consistentes a fallos de red.

Docs: http://www2.hazelcast.com/e/30822/ex-html-split-brain-protection/btvcjz/368721839

 

Podéis leer más sobre esta release aquí:

Herramientas y Técnicas para monitorizar el consumo de memoria y CPU de aplicaciones Java

Publicado en Java. Leave a Comment »

¿Qué es Hazelcast Jet?

Hazelcast Jet es un framework open-source (licencia Apache 2) para el procesamiento distribuido de datos en memoria:

Hazelcast Jet usa DAGs (directed acyclic graphs) para modelar last areas de procesamiento de datos ofreciendo un motor de baja latencia y alto throughput.

Un job Jet se compone de processors (unidades de procesamiento paralelo como data source readers, joiners, sorters, aggregators, filters, mappers o output writers). Estos nodes se conectan vía edges representando el data Flow.

Entre sus principales características tenemos:

· Low Latency End-to-end

· Batches tratados como streams

· Conexión con Data Brokers (conector Kafka por ejemplo)

· Hazelcast IMDG embebido

· Procesamiento distribuido con Hazelcast IMDG

· Simple de usar: un único JAR sin dependencias

· Ligero y embebible

· Despliegue en cloud

· Discovery

· Ejecuta en YARN y en MESOS

· Soporte HDFS

· Java 8 Stream API + API Core

La forma de usarlo es esta:

Podéis encontrar ejemplos aquí: https://github.com/hazelcast/hazelcast-jet-code-samples

¿Qué es jGit?

JGit es una implementación muy ligera en Java del sistema de control de versions Git.

Permite crear y clonar repositorios Git, crear branches, commits, tagear,…

Usarla es muy sencillo:

Añado la dependencia:

Y listo:

En este caso estoy clonando un repositorio público:

Si es un repositorio privado y tengo que estar autenticado:

Manejando Tests similares con JUnit 5

En JUnit 4 teníamos:

Mientras que con JUnit 5 puedo usar el assertAll:

Además puedo usar la anotación @TestFactory que devuelve una colección de DynamicTests

de modo que el IDE lo maneja cada assertion como un test separado:

A %d blogueros les gusta esto: