Translate

domingo, 4 de diciembre de 2011

Date4j vs Joda Time


En infoQ publicaron una articulo muy interesante sobre la librería Date4j y lo comparan con Joda Time (librería facilitar el uso de fechas en java) quede sorprendido, joda time es mucho más pesado aunque soporta más cosas (hay que ver si se usan). Paso a copiar la tabla comparativa:


Joda Time
Date4j
Numero de clases140+
Numero de clases < 10
Clases mutables e inmutables
Clases inmutables
Foco en la velocidad y características
Se centran en la sencillez y la precisión
Soporta calendarios Gregorian, Coptic, Islamic, Buddhist ...
Solo soporta Gregorian calenda
Puede remplazar totalmente el Date de la JDK
Trabaja con Date de la JDK
Soporta milisegundos
Soporta nanosegundos
El dia "overflow"no es configurable
El dia "overflow" es configurable
Orientado a la manipulación total de fechas
Orientado a la manipulación de fechas por base de datos
Licencia Apache 2.0
Licencia BSD




Es interesante que existan estas librerías denota que en java no es bueno el manejo de fechas de forma nativa. Por lo visto para poblemas simples es mejor usar Date4j que Joda Time aunque me gustaría que lo traiga la jdk.

Dejo links:
http://www.infoq.com/news/2011/12/date4j-vs-joda-time
http://www.date4j.net/

lunes, 28 de noviembre de 2011

Cual es la diferencia entre Apache Click y otros frameworks web java?

Cual es la diferencia entre apache click y otros frameworks web java? y porque deberíamos aprender este framework web?

La diferencia tecnológica más importante es que apache Click no mantiene estados en el servidor (es stateless) esto lo hace ideal para usarlo en proyectos los cuales podrían tener muchos usuarios. Dado que si mantenemos estados en el servidor y vamos guardando cosas en estas sesiones cuando tengamos millones de usuarios; el servidor va a necesitar mucha memoria para trabajar.

Apache click no mantiene estados en el servidor (aunque se lo puede configurar para que si) lo que permite mayor escalabilidad. En click las paginas y los componentes son recreados por cada request. La visión de apache click es una creación de paginas web de forma más tradicional.

Apache click tiene más ventajas pero sin duda esta es la razón más importante por la que yo elegiría este framework.

Apache click esta en constante desarrollo y es un proyecto top-level de Apache foundation.

Dejo links:

http://click.apache.org/
http://click.apache.org/docs/user-guide/htmlsingle/click-book.html

sábado, 26 de noviembre de 2011

NuoDB

NuoDB es una base de datos newSQL. Se ve y se comporta como una base de datos relacional pero internamente nos permite tener una base distribuida. Si vamos a su pagina, como premisas afirma 100% ACID, 100% SQL y 100% escalable. Este conjunto de características combinadas hacen NuoDB el líder en el mercado NewSQL. Lo que diferencia a NuoDB además de otros NewSQL y soluciones NoSQL es cómo organizar y garantizar las transacciones ACID en un entorno distribuido.

El sistema está diseñado para ofrecer una visión coherente de datos, alta disponibilidad y la capacidad de detectar y gestionar las particiones de una manera predecible y consistente.

Dejo links:

http://nuodb.com/
http://nuodb.com/how_it_works.html

NoSQL, NewSQL y Data grid/cache

NewSql es una forma abreviada de dirigirnos a las bases de datos realcionales las cuales están preparadas para escalar, tienen en común el desarrollo de nuevos productos de base de datos relacional y servicios diseñados para llevar los beneficios del modelo relacional de las arquitecturas distribuidas, o para mejorar el rendimiento de bases de datos relacionales en la medida en que la escalabilidad horizontal es un la necesidad.

Podemos nombrar los siguientes productos como newSQL Clustrix, GenieDB, ScalArc, Schooner, VoltDB, RethinkDB, ScaleDB, Akiban, CodeFutures, ScaleBase, Translattice, and NuoDB, Drizzle, MySQL Cluster con NDB y MySQL con HandlerSocket. El ultimo grupo incluye Tokutek y JustOne DB. Podemos habler de NewSQL como servicio en el que podemos incluir Amazon Relational Database Service, Microsoft SQL Azure, Xeround, Database.com and FathomDB.

Como vemos ha cambiado bastante el ámbito de las bases de datos, las cuales se fueron adaptando para poder ofrecer mejor escalabilidad. Podemos agrupar las bases de datos escalables en 3 tipos: NoSQL, NewSQL y Data grid/cache.

InfoQ nos muestra la siguiente imagen donde muestra como se agrupan los productos según su clasificación:


domingo, 20 de noviembre de 2011

EJB 3 + Maven 2 + JBoss 6 + Eclipse

Vamos a crear un proyecto Jee con maven y que use como servidor Jboss con la siguiente estructura:

pom parent _
                     |__ ejb
                     |__ war

Bueno creamos el proyecto parent:

mvn archetype:create -DgroupId=com.ejemplos -DartifactId=EjemploJEE

Y modificamos el pom para que quede de la siguiente manera:


  4.0.0

  org.assembly
  ExampleJEE
  1.0-SNAPSHOT
  pom

  ExampleJEE
  http://maven.apache.org

  
    UTF-8
  

   
  
   
   maven-compiler-plugin 
    
    1.6 
    1.6 
    
   
   
   org.apache.maven.plugins 
   maven-eclipse-plugin 
   2.7      
    
    2.0 
    true 
    
   
   
   org.apache.maven.plugins   
      maven-javadoc-plugin    
   
   
   org.apache.maven.plugins   
       maven-project-info-reports-plugin    
   
  
  

  
        
            jboss-repository
            JBoss Repository
            https://repository.jboss.org/nexus/content/groups/public/
            default
        
    


  
     
    
      jboss
      jboss-ejb-api
      4.2.0.GA
      provided
    

    
      junit
      junit
      4.10
      test
    

  





Creamos el proyecto ejb:

cd ExampleJEE
mvn archetype:create -DgroupId=org.assembly -DartifactId=ExampleEJB

Y cambiamos el pom de la siguiente manera:



  4.0.0

  
    ExampleJEE
    org.assembly
    1.0-SNAPSHOT
  

  org.assembly

  ExampleEJB

  1.0-SNAPSHOT

  ejb

  ExampleEAR

  http://maven.apache.org

  
   
       
            javax.persistence
            persistence-api
            1.0
            provided
           
        
  
  
  
    UTF-8
  

 
    
    
      
        org.apache.maven.plugins
        maven-ejb-plugin
        2.1
        
          3.0
        
      

    
  





Ahora vamos a generar el proyecto war siempre dentro de ExampleJEE:

mvn archetype:create -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=org.assembly -DartifactId=ExampleWAR

Y cambiamos el pom de la siguiente manera:


  
  4.0.0
  
  
    ExampleJEE
    org.assembly
    1.0-SNAPSHOT
  
  
  org.assembly
  
  ExampleWAR

  1.0-SNAPSHOT

  war

  ExampleWAR Maven Webapp

  http://maven.apache.org

  
    ExampleWAR
  

  
 
   
            org.assembly
            ExampleEJB
            1.0-SNAPSHOT
            provided
        
 
     
            javax.servlet
            servlet-api
            2.5
            provided
        

  





Pongo la dependencia a ExampleEJB como provided dado que no quiero que maven agregue el jar dentro del war después hago deploy del proyecto EJB y del WAR.

Ahora mvn clean install parados en el proyecto parent (ExampleJEE) y mvn eclipse:eclipse (si usan eclipse).

Bueno ahora importamos el proyecto a eclipse: file-> import-> Existing Projects into Workspace … Elegimos el path donde se encuentra el proyecto ExampleJEE y importamos.

Vamos a crear las siguientes clases en ExampleEJB:

La interfaz del servicio:

package org.assembly.service.api;

import javax.ejb.Remote;

@Remote
public interface HolaMundo {
 
 String decirHola();

}



La implementación :

package org.assembly.service.impl;

import javax.ejb.Stateless;

import org.assembly.service.api.HolaMundo;

@Stateless
public class HolaMundoImpl implements HolaMundo {

 /* (non-Javadoc)
  * @see org.assembly.service.api.HolaMundo#decirHola()
  */
 @Override
 public String decirHola() {
  return "Hola";

 }

}




Además agregamos este archivo en src/main/resources (si no existe la carpeta la crean) y lo nombramos jndi.properties

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099



Y en el Proyecto web agregamos este servlet:

package org.assembly.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.assembly.service.api.HolaMundo;

public class HolaMundoServlet extends HttpServlet {

 private static final long serialVersionUID = 7819040755879233852L;

 private HolaMundo holaMundo = null;

 
 public HolaMundoServlet() {
  final Context context;
  try {
   context = new InitialContext();
   holaMundo = (HolaMundo) context.lookup("HolaMundoImpl/remote");

  } catch (NamingException e) {
   e.printStackTrace();
  }
 }


 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  final PrintWriter out = resp.getWriter();

  try {
   out.println(holaMundo.decirHola());
  } catch (Exception e) {
   out.println(e.getStackTrace().toString());
  }

 }

}



Por ultimo modificamos el web.xml para que escuche el servlet:


  Archetype Created Web Application
  
  
    
        hola
        org.assembly.web.HolaMundoServlet
    

    
        hola
        /hola.html
    
  
  





Ahora lo que hacemos es instalar el plugin Jboss Tools en eclipse lo podemos hacer desde el Marketplace de eclipse.



Ahora bajar Jboss 6 desde http://download.jboss.org/jbossas/6.1/jboss-as-distribution-6.1.0.Final.zip

Instalar el Jboss desde el panel de Servers menú contextual new. Luego importamos nuestros proyectos. Si todo fue bien debería verse el entorno así:



Corremos Jboss y en http://localhost:8080/ExampleWAR/hola.html deberíamos ver un “hola”

jueves, 17 de noviembre de 2011

Typesafe incluye a play en su Stack


Typesafe le empresa formada a raíz de Scala anuncio que agregara a play 2.0 a su stack.  Stack de typesafe es una plataforma que permite desarrollar software con scala teniendo a Akka como midleware. Bueno este stack va a tener a play como plataforma para desarrollo web. Recordemos que play es un framework para desarrollo ágil en Java y Scala (a partir de la versión 2.0).

El framework play va podes ser usado tanto en Java como en scala.

 Dejo links:

http://typesafe.com/stack
http://typesafe.com/company/news/15856
http://blog.typesafe.com/typesafe-stack-adds-play-framework
http://typesafe.com/technology/play

Libro Gratuito de Scala!

Typesafe nos regala un libro sobre scala!!

Dejo el link: http://typesafe.com/resources/scala-for-the-impatient

miércoles, 16 de noviembre de 2011

Me la venia venir

Increíble leo en javahispano que adobe abandona Flex!!

"Una semana después de haber anunciado que no continuaría desarrollando Flash para dispositivos móviles, Adobe anuncia que va a donar el Flex SDK y BlazeDS a la Apache Software Foundation. Esta noticia ya ha despertado múltiples críticas y quejas por parte de los usuarios de Flex, que por lo general no están en absoluto contentos con un movimiento que ven como un abandono de Flex."


Para mi esto significa el fin de RIA basada en plugins y un comienzo de Ria basada en HTML 5 y Javascript. Después que ie 10 anuncie que no soportara plugines era cuestión de tiempo que las demás empresas se den cuenta por donde viene la mano. 


Que opinan? Murió Ria basada en plugins?


Dejo el link: 
http://www.javahispano.org/portada/2011/11/16/adobe-anuncia-que-abandona-flex.html



domingo, 13 de noviembre de 2011

Play


El objetivo de play es hacer aplicaciones Web rapidas con Java y Scala. Se centra en la productividad de los desarrolladores y provee una arquitectura basada en REST. play! es un marco de trabajo para desarrollo ágil de software.

Entre las características podemos nombrar:


  • Una arquitectura simple basada en el patrón MVC y RestFull
  • Utiliza JPA
  • Testeable (pensado para hacer TDD)
  • y mucho más!

Dejo este video que me dejo impresionado:

 
A web app in 10 minutes using Play framework from zenexity on Vimeo.

Dejo links:
http://www.playframework.org/
http://www.playframework.org/documentation/1.2.3/overview
http://www.playframework.org/documentation/1.2.3/guide1
http://www.playframework.org/2.0

viernes, 11 de noviembre de 2011

Ahora le toca a eclipse!



Luego que Jboss presente su lenguaje Ceylon para la plataforma Java; ahora la organización eclipse pone una nueva ficha en el tablero. Xtend es el lenguaje de eclipse. El cual corre sobre la plataforma java.

Xtend nació con el objetivo de simplificar el lenguaje y escribir menos lineas de código. Entre sus características podemos nombrar:

  • Tipado estático
  • Facilita el desarrollo
  • Closures
  • Compila a código Java no a bycode
  • Sintaxis similar a Java
  • Se desarrollo con Xtext y se basa en Xbase


Veamos un ejemplo:


import my::metamodel;extension other::ExtensionFile;

/**
  * Documentation
  */
anExpressionExtension(String stringParam) :
  doingStuff(with(stringParam))
;

/**
  * java extensions are just mappings
  */
String aJavaExtension(String param) : JAVA
  my.JavaClass.staticMethod(java.lang.String)
;


No es el objetivo de reemplazar Java. Por lo tanto, los frameworks pueden interactuar con código Xtend igual que interactúa Java. También puede llamar a funciones Java, Xtend de una manera totalmente transparente. Y, por supuesto, ofrece un moderno IDE basado en Eclipse IDE integrado con las herramientas de desarrollo de Java (JDT).

Dejo un ejemplo que compara java con Xtend:


Dejo links:






Xtend Intro from Xtext Team on Vimeo.

jueves, 10 de noviembre de 2011

Private Cloud for Dummies

Libro gratuito sobre la nube! IBM nos regala un libro gratuito sobre las nubes privadas, lo unico malo es que hay que registrarse.

Dejo el link :

http://www.ibm.com/vrm/newsletter_11421_9654_211548_email_DYN_1IN/EGoette105121800

lunes, 7 de noviembre de 2011

Eclipse cumple 10 años

El 5 de noviembre del 2001 fue liberada la primera versión de Eclipse, desde ese momento hasta hoy creció a pasos agigantados; dándonos una IDE optima de muy buena calidad. Nada más para decir, simplemente Feliz cumpleaños.


Dejo links:


Gosu

Gosu es un lenguaje que corre sobre la jvm, y tiene las siguientes características:

  • 100% orientado a objetos
  • tipado estático
  • es imperativo
  • 100% compatible con java
  • inferencia de tipos
  • soporta closures
  • generic simplificados
  • y con licencia Apache 2.0!


Veamos un ejemplo:


// Declare some data
var minLength = 4
var strings = { "yellow", "red", "blue" }

// Slice and dice the data using blocks
print( strings.where( \ s -> s.length() >= minLength )
              .sort()
              .join( ", " ) )

// Use standard java classes
var someFile = new java.io.File( "SomeFile.txt" )

// But with shiny new methods
someFile.write( strings.join( "\n" ) )


Dimos un pequeño vistazo a este lenguje, dejo links:

http://gosu-lang.org/
http://gosu-lang.org/intro.shtml
http://gosu-lang.org/examples.shtml

sábado, 5 de noviembre de 2011

Spring Insight

Spring Insight es una tecnología la cual da visibilidad del rendimiento en tiempo de ejecución de la aplicación.

Las pruebas de estrés de una aplicación por lo general son lentas. Mediante la combinación de Spring inSigth con sus herramientas de testing  (tal como JMeter), se puede ver no sólo que direcciones URL son lentas, sino porque y descubrir la forma de acelerarlos.



Dejo unos screenshot:





Dejo links:

http://www.springsource.org/insight
http://static.springsource.com/projects/tc-server/6.0/devedition/cinintro.html