Translate

viernes, 12 de febrero de 2010

Spring y OSGI, algo más?


Se preguntan ¿Qué es OSGi? y supongo que todos hemos usado eclipse alguna vez y con eclipse, equinox. Equinox es un contenedor OSGi implementado por eclipse.

Bueno en pocas palabras eso es OSGI, OSGi proporciona funciones más parecidas a un contenedor web, pero es más versátil. OSGi te permite crear aplicaciones a partir de componentes.

Que es spring? Si no saben que es spring, no han leído otros posts. Spring es el framework que provee inyección de dependencias y programación orientada a aspecto. Y me quedo corto, porque spring soluciona muchos problemas que nos topamos en el desarrollo con subproyectos: spring security, spring Ldap, spring MVC, etc.

Si fueron un poco observadores, notaron que osgi es una tecnología que nos permite desplegar módulos o componentes y spring nos permite trabajar con diferentes tecnologías de forma más fácil.

Spring Dynamic Modules hace más fácil escribir aplicaciones Spring que puedan ser deployeadas en un entorno OSGI, y que puedan aprovechar las ventajas de los servicios que ofrece OSGi.

Spring's OSGi soporta también hacer más simple y más productiva el desarrollo de aplicaciones OSGi. Parar aplicaciones empresariales, la combinación de Spring Dynamic Modules y the OSGi platform provee:

Mejor separación de la logica de la aplicación en modulos.
La habilidad de desplegar diferentes versiones, de los modulos.
La habilidad de descubrir dinámicamente y usar servicios provistos por otros módulos en el sistema.
La habilidad de instalar, modificar y desinstalar módulos on fly.
Puede usar spring dentro y entre los modulos.
Un modelo de programación simple y familiar para los desarrolladores de aplicaciones empresariales.

Spring Dynamic Modules 1.0 soporta JDK 1.4 (y superiores) y OSGi R4 (y superiores). Los paquetes desplegados para usar con Spring Dynamic Modules deben especificar "Bundle-ManifestVersion: 2" en el manifest (OSGi R4). Además soporta Equinox 3.2.x, Felix 1.0.3+ y Knopflerfish 2.1.x .


Dejo links:

martes, 9 de febrero de 2010

Cual es el lenguaje más popular?

langpop.com es una pagina que trata medir la popularidad de los lenguajes.

El primero es java, luego C, C++, PHP y javascript.

Invito que visiten el sitio.





sábado, 30 de enero de 2010

Desarrollando una aplicacion Spring Framework MVC paso a paso

Hay una traducción en español de Spring Framework MVC paso a paso en :




Apache Pivot


Apache Pivot es un proyecto que hace poco fue promovido a top level en la organización apache.








Apache Pivot es un framework de presentación para hacer RIAS a simple vista, me hizo acordar a bindows (otro framework de presenteción) . La idea es generar un xml (WTKX) que contenga los componentes y el layout de tu RIA y vos programas en java, pare sido a la filosofía Flex o Silverligh.












Apache Pivot se ejecuta como un applet embebido y esta basado en Java2D y además implementa el patrón MVC. Obviamente esta bajo licencia apache.





Veamos un ejemplo:


public class HelloJava implements Application {
private Window window = null;



@Override

public void startup(Display display, Map properties) {

Label label = new Label();

label.setText("Hello World!");

label.getStyles().put("font", new Font("Arial", Font.BOLD, 24));

label.getStyles().put("color", Color.RED);

label.getStyles().put("horizontalAlignment",

HorizontalAlignment.CENTER);

label.getStyles().put("verticalAlignment",

VerticalAlignment.CENTER);



window = new Window();

window.setContent(label);

window.setTitle("Hello World!");

window.setMaximized(true);

window.open(display);

}



@Override

public boolean shutdown(boolean optional) {

if (window != null) {

window.close();

}



return false;

}



@Override

public void suspend() {

}



@Override

public void resume() {

}



public static void main(String[] args) {

DesktopApplicationContext.main(HelloJava.class, args);

}

}

Luego de hacer esta clase podemos configurar el applet:

<applet code="org.apache.pivot.wtk.BrowserApplicationContext$HostApplet"

archive="lib/pivot-core-[version].jar,lib/pivot-wtk-[version].jar,lib/pivot-wtk-terra-[version].jar,lib/pivot-tutorials-[version].jar"

width="160" height="80">

<param name="applicationClassName" value="org.apache.pivot.tutorials.HelloJava">

</applet>

En este caso no necesitamos definir el xml que contiene la estructura.

Veamos un ejemplo con este xml armado:

public class HelloWTKX implements Application {
     private Window window = null;
      @Override
    public void startup(Display display, Map properties)         throws Exception {
        WTKXSerializer wtkxSerializer = new WTKXSerializer();
        window = (Window)wtkxSerializer.readObject(this, "hello.wtkx");
        window.open(display);
 }
     @Override
    public boolean shutdown(boolean optional) {
      if (window != null) {
         window.close();
    }
     return false;
    }
        @Override
    public void suspend() {
    }
     @Override
    public void resume() {
    }
     public static void main(String[] args) {
     DesktopApplicationContext.main(HelloWTKX.class, args);
    }
  
}

      
Definimos el xml que tiene la estructura:
<Window title="Hello WTKX!" maximized="true"     xmlns:wtkx="http://pivot.apache.org/wtkx"     xmlns="org.apache.pivot.wtk">
    <content>
        <Label text="Hello WTKX!"
            styles="{font:'Arial bold 24', color:'#ff0000',                 horizontalAlignment:'center', verticalAlignment:'center'}"/>
    </content>
</Window> 

Ahora ya tenemos un pantallaso de un ejemplo de Pivot.
     

Para ver lo que se puede hacer aquí dejo el link de demos: http://pivot.apache.org/demos/











miércoles, 27 de enero de 2010

Jonathan Schwartz se irá de Oracle / Sun

Bueno, he leido hoy en javahispano que el ceo de sun se ira luego de la completa adquisición.

Para que no sepa que hizo Jonathan Schwartz; este hombre fue muy importante para Software Libre y para nosotros los desarrolladores; ya que libero Java y Solaris.

"El soft libre crea volúmen, que genera demanda para implementaciones, que genera ingresos por licencias y soporte de la misma forma que pasaba cuando los productos no eran gratuitos. El softlibre aumenta las oportunidades de ingresos.

Abrir Solaris y darlo gratis, nos llevó a la ola más grande de adopción que Solaris haya visto jamás, alrededor de 3.4 millones de licencias desde Febrero (muchas sobre HP curiosamente). Y esto se combinó con la mayor expansión en su base de ingresos y creo que lo mismo va a ocurrir con el Java Enterprise System, su manejo de identidades y las suites de integración. ¿Porqué?

Porque ni un solo cliente de los Fortune 2000 en el mundo va a correr el corazón de su negocio con productos que no tengan el número de teléfono de la casa de alguien del otro lado. Y ningún desarrollador o nación en desarrollo al que se le presente con un producto open source equivalente o mejor.. va a elegir una opción propietaria (nota: no conoce nuestros mercados)

Apostar contra el FOSS es como apostar contra la gravedad. YSoftware libre no significa sin-ingresos, significa sin-barreras-de-entrada. Sino pregúntenle a nuestro carrier."

Esta es una reflexión que demuestra su forma de pensamiento y el modelo de negocio que planteaba.

domingo, 24 de enero de 2010

martes, 19 de enero de 2010

Hola Mundo!!!

En informática, un programa Hola mundo (o Hello World, en inglés) es el que imprime el texto «¡Hola, mundo!» en un dispositivo de visualización (generalmente una pantalla de monitor). Se suele usar como introducción al estudio de un lenguaje de programación, siendo un primer ejercicio típico.

Esta es la definición de la wikipedia, sobre el programa Hola Mundo!!. La pregunta es : quien no a escrito un Hola mundo? es como el primer paso que da un programador. Existe una pagina que muestra más de 200 ejemplos de Hola Mundo en diferentes lenguajes. Dejo el link para los curiosos:

domingo, 17 de enero de 2010

domingo, 10 de enero de 2010

Java 7 Closures


Una noticia que hizo mucho ruido fue que en java 7 va a haber Closures, esto trae un poco de revuelo en el mundo java.
Ya que hasta ultimo momento no aceptaban Closures en la nueva versión del lenguaje.

Lo primero que hay que entender es la diferencia entre funciones como objetos y closures. Una función puede ser anónima o definida, pero también pueden ser objetos en si mismas. Esto nos permite utilizar funciones como argumentos, ser devueltas por otras funciones o ser almacenadas en estructuras de datos.
Vamos, son objetos de primera clase o de primer orden.
Un closure es una función más su entorno y estos pueden ser de igual forma tratados como objetos de primera clase, pero al contener un entorno, podemos acceder a variables (o funciones) de este entorno incluso cuando el mismo no este activo. Existen lenguajes que soportan funciones-objetos o closures o ambos, y muchos de los lenguajes funcionales en su mayoria utilizan funciones y funciones-closure.
Entonces, un closure, por ejemplo, nos permite definir una función que tiene acceso a una variable, así que podemos almacenar esta funcion en un objeto y acceder a ella. El contexto de la función no se limita sólo a los objetos a los que tiene acceso directo, pero también a las variables que obtiene vía el entorno.

Veamos un ejemplo clásico de sort con un método anónimo:

anArray.sort(new Comparator()
public int compare(MyClass a, MyClass b) {
return a.myProperty().compareTo(b.myProperty();
}
});


Con closures haríamos esto:

anArray.sort( (a, b) => a.myProperty().compareTo(b.myProperty()));

En lenguajes como Python llevan mucho tiempo discutiendo sobre la necesidad de lambda y la verdad es que IMO no son algo necesario, pero que es bueno tener a mano para cuando las circunstancias lo precisen.
Este tema es parecido al de los for-each con Java6 donde muchas personas desconfiaban de la implementación de estos y de su utilidad.
Como sucede con cualquier herramienta, es mejor entenderla antes de utilizarla para no terminar con código spaghetti que dificulte la lectura y el mantenimiento

Que les parece la noticia? Es positivo para java?

Java EE 6

Si bien esta noticia no es novedad, con el cambio de año y vacaciones se hizo difícil escribir.

A fines del año pasado el Java Community Process aprobó la especificación de Java EE 6. Algunas de las características nuevas de la plataforma son:

  • Perfiles: Java EE 6 introduce el concepto de perfiles: distintas configuraciones específicas de la plataforma para distintos fines. El primero en ser introducido en esta versión es el Web Profile, un perfil más liviano que usa únicamente lo necesario para desarrollos web.
  • Productividad del desarrollo: apuntando las configuraciones a más anotaciones y menos configuración XML.
  • Nuevas especificaciones: EJB 3.1, Java API for RESTful Web Services (JAX-RS), Contextos e inyección de dependencias (CDI), JPA 2, y más.
GlassFishGlassFish

Con esta especificación final, Sun anunció la disponibilidad de GlassFish V3. GlassFish es su servidor de aplicaciones que implementa las tecnologías de Java EE. En esta versión, es el primer servidor en aplicar completamente la especificación Java EE 6. Sun anunció también a su vez, NetBeans 6.8, con soporte completo para Java EE 6.

Con motivo de estos nuevos lanzamientos, el equipo de software de Sun realizó una serie de conferencias virtuales. En éstas se hizo una presentación de las nuevas características de Java EE 6 y GlassFish V3. Los videos y diapositivas están disponibles para la descarga:

Para descargar los videos:
http://www.sun.com/events/javaee6glassfishv3/virtualconference/

Las diapositivas de las presentaciones:
http://www.sun.com/offers/details/java_ee6_slides.xml

Si les interesa empezar a aprender ya lo nuevo, en el sitio JavaPassion han organizado un codecamp online de Java EE 6. Tiene una duración de una semana (inicialmente 24 horas) para aprender las nuevas tecnologías escribiendo código. Pueden inscribirse si tienen una cuenta en Google. El codecamp comienza el 12 de enero, hasta el 20 de enero de 2010.

JBoss de RedHat es otro de los servidores de aplicaciones que viene trabajando en la implementación de la nueva especificación. Si bien habían implementado parte de la especificación en JBoss 5, ya están trabajando en JBoss AS 6. Recientemente se anunció la disponibilidad de JBoss Application Server 6.0.0.M1, un primer milestone que lo acerca más a implementar Java EE 6 (ya disponible para la descarga).

Las tres principales características del estándar que implementa son: JSF 2, Bean Validation y CDI.

Además este lanzamiento incluye soporte para mod_cluster, una solución de balance de carga que se integra con Apache y soporte para EmbeddedAS, un prototipo para una API nueva para la creación, configuración, ciclo de vida, operaciones de despliegue del servidor de aplicaciones JBoss. Pueden enterarse más en esta entrevista a Jason Greene, líder del equipo de desarrollo.

Hay muchas cosas nuevas para aprender este año. Todo esto predice un buen año para Java empresarial.


jueves, 31 de diciembre de 2009

Feliz Navidad y próspero Año nuevo !!!



Un año transcurrió juntos, les deseo que se cumplan todos sus anhelos. En el 2010 espero que me sigan acompañando.



Feliz 2010 a todos!!!
















Sean felices!!

domingo, 27 de diciembre de 2009

JavaFX Script


JavaFX Script es un lenguaje scripting desarrollado por Sun Microsystems, que forma parte de la familia de tecnologías JavaFX. JavaFX permite crear aplicaciones web para escritorio, navegadores, dispositivos móviles, etc.

JavaFX Script es un lenguaje de scripting altamente productivo que permite a los desarrolladores de contenido crear multimedia y contenido para plataformas en ambientes java. JavaFX Script es un lenguaje de programacion declarativo, tipado estaticamente. Tiene funciones de primer clase, sintaxis declarativa, comprension de listas y evaluacion incremental dependiente. Puede hacer llamadas directas a cualquier API de Java que exista en la plataforma

Veamos unos ejemplos de este lenguaje:
Strings:

var nombre = 'Pepe';
var s = "Hola {nombre}"; // s = 'Hola Pepe'

var respuesta = true;
var s = "La respuesta es {if respuesta then "Si" else "No"}";
// s = 'La respuesta es Si'

Arreglos:
var unoACien = [1..100];
var tamanio = sizeof unoACien; // tamanio == 100
var porTres = [1*3, 2*3 .. 10*3]; // [3,6,9,12,15,18,21,24,27,30]
tamanio = sizeof porCien; // tamanio == 10

var nums = [1,2,3,4];
var numsMayoreQueDos = nums[n|n > 2]; // resulta en [3,4]
var numsMenosLosDosPrimeros = nums[n|indexof n > 1];
// resulta en [3,4]

var x = [1,2,3];
insert 12 into x; // resulta en [1,2,3,12]
insert 10 as first into x; // resulta en [10,1,2,3,12]
insert [99,100] as last into x; // resulta en [10,1,2,3,12,99,100]

var y = [1,2,3];
insert 10 after y[n|n == 3]; // resulta en [1,2,3,10]
insert 12 before y[1]; // resulta en [1,12,2,3,10]
insert 13 after y[n|n == 2];
// resulta en [1, 12, 2, 13, 3, 10];
delete x[n|n == 12]; // resulta en [1,2,3,10]
delete x[n|n >= 3]; // resulta en [1,2]

var a:Integer* = select n*n from n in [1..10];
// resulta en [1,4,9,16,25,36,49,64,81,100]

var a:Integer* = select n*m from n in [1..4], m in [100,200] where (n%2 == 0);
// resulta en [200, 400, 400, 800]

Formateado:
100.896 format as <<%f>>; // resulta en '100.896000'
31.intValue() format as <<%02X>>; // resulta en '1F'
var d = new Date();
d format as <>; // resulta en '2005-10-31T08:04:31.323-0800'
0.00123 format as <<00.###e0>>; // resulta en '12.3E-4'

sábado, 19 de diciembre de 2009

RestTemplate en Spring 3

La clase RestTemplate es la principal clase de spring para acceso http del lado cliente. Conceptualmente es similar a JdbcTemplate, JmsTemplate y a otros templates proveídos por spring.
Los principales metodos del template tienen el nombre de los metodos Http:

HTTP RestTemplate

DELETE delete(String, String...)

GET getForObject(String, Class, String...)

HEAD headForHeaders(String, String...)

OPTIONS optionsForAllow(String, String...)

POST postForLocation(String, Object, String...)

PUT put(String, Object, String...)

Estos nombres indican claramente cuál de los métodos Http son invocados, mientras la segunda parte indica que devuelven los métodos. Por ejemplo getForObject() usa el método GET y transforma la respuesta HTTP en un objeto que decida. Como se puede apreciar los métodos se enfocan en las mejores prácticas REST.
Cada uno de los métodos tiene un parámetro de tipo string (el primero) este es la URI del método. Se puede pasar parámetros de dos formas una usando varargs:

String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21");

Esto debería llamar a http://example.com/hotels/42/bookings/21 por el método GET.

También podemos usar mapas, por ejemplo:

Map vars = new HashMap();
vars.put("hotel", "42");
vars.put("booking", "21");
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);

Esto debería llamar a http://example.com/hotels/42/rooms/42 también por el método GET.

HttpMessageConverters se encarga de convertir los HTTP requests a los tipos que se indiquen.

sábado, 12 de diciembre de 2009

Podcast de JavaHispano sobre pruebas automatizadas

Acabo de escuchar el último podcast de JavaHispano que va sobre
pruebas automatizadas y me ha parecido muy recomendable.



Alfredo Casado aporta comentarios excelentes y habla en primera
persona de TDD (no de oidas, como hacemos muchos)

Conclusiones en primera "lectura":
* automatizar las pruebas es más rentable que no hacerlo
* los principios FIRST son fundamentales para unas buenas pruebas
* que tu código sea testeable se consigue de entrada haciendo TDD
* aprender a hacer TDD es duro, pero como cualquier otra cosa en la
vida que merece la pena (es una inversión en tu carrera
independientemente de la elección del lenguaje)