Translate

sábado, 8 de mayo de 2010

Desarrollar un ejemplo con Apache Tuscany

Como ven no estoy escribiendo mucho dado que estoy dedicando tiempo a mi tesis. Por esta razón rápidamente vamos a desarrollar un ejemplo con Apache Tuscany.
En otro post les prometo dar más detalles de mi tesis.
Si no leyeron estos posts, sería bueno que lo hagan :
http://emanuelpeg.blogspot.com/2010/02/apache-tuscany_4551.html
http://emanuelpeg.blogspot.com/2010/02/sca.html

La idea es desarrollar un ejemplo facil usando maven.
Veamos la descripción del componente:

import org.osoa.sca.annotations.Remotable;

@Remotable
public interface ExampleService {

String sayHello();

}

Veamos la implementación:

import org.assembly.nornas.service.example.ExampleService;
import org.osoa.sca.annotations.Init;
import org.osoa.sca.annotations.Service;


@Service(ExampleService.class)
public class ExampleServiceImpl implements
ExampleService {

@Override
public String sayHello() {
System.out.print("llamaron a Say");
return "Holasss !!! \n";
}

@Init
public void init() {
System.out.println("Starting with "+ExampleServiceImpl.class + " \n");
}

}

Ahora hay que hacer un archivo composite que describe el componente:
Example.composite

<?xml version="1.0" encoding="UTF-8" ?>

<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace="http://nornas"
xmlns:nornas="http://nornas"
name="Example" >

<component name="ExampleServiceComponent">
<implementation.java class="org.assembly.nornas.serviceImpl.example.ExampleServiceImpl" />

<service name="ExampleService">
<interface.java interface="org.assembly.nornas.service.example.ExampleService"/>
<binding.ws uri="http://localhost:8080/nornas/ws" />
<t:binding.atom uri="http://localhost:8080/nornas/atom" />
<t:binding.jsonrpc uri="http://localhost:8080/nornas/jsonrpc" />
<t:binding.rss uri = "http://localhost:8080/nornas/rss"/>
<binding.sca />
</service>

</component>


</composite>

Ahora vamos a correr todo esto, para lo cual vamos a tener que hacer una clase que tenga el método main:

import java.io.IOException;

import org.apache.tuscany.sca.host.embedded.SCADomain;

public class Main {

public static void main(String[] args) throws IOException {
System.out.println("Starting ...");
SCADomain scaDomain = SCADomain.newInstance("Example.composite");
scaDomain.getURI();
System.out.println("store.composite ready for big business !!!");
System.in.read();
System.out.println("Stopping ...");
scaDomain.close();
System.out.println();
}

}

Ojo hago esto porque no tengo servidor, para otro ejemplo probamos con tomcat o jetty. Internamente Apache tuscany levanta un jetty.

Y Listo!!

Si vamos a esta url: http://localhost:8080/nornas/ws?wsdl deberíamos tener en wsdl de nuestro web server SOAP.
Si fueron observadores vieron que use varios bildings (solo lo hice para probarlos)

Les dejo las dependencias del pom para correr el ejemplo:

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-core-spi</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-policy-security</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-embedded</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-data-api</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>1.5.3</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-atom-abdera</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-rss-rome</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-ws-axis2</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-jsonrpc-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-rmi-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-resource-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-http-runtime</artifactId>
<version>1.6</version>
</dependency>

<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-jetty</artifactId>
<version>1.6</version>
</dependency>

Acabamos de hacer un servicio SOA con Apache Tuscany, muy fácil no?

domingo, 25 de abril de 2010

W3C

Yo no sabia la W3C tiene una serie de manueles basicos, cosas que hay que saber, css, seguridad, i18n, etc...

Les dejo el link: http://www.w3c.es/Divulgacion/

xForm

Buscando otra cosa por la pagina de la w3c, me encontré con esto:

¿Qué es XForms?

Es un nuevo lenguaje de etiquetado para formularios Web, diseñado para ser el sustituto de los formularios tradicionales HTML , y que va a permitir a los desarrolladores de formularios Web distinguir entre el propósito del formulario y su presentación. Esta separación clara entre contenido y presentación ofrece grandes ventajas en términos de:

  • Reutilización: ya que los módulos XForms pueden reutilizarse independientemente de los datos que recogen
  • Independencia de Dispositivo: gracias a que los controles de la interfaz de usuario son abstractos y sólo se indican sus características genéricas, lo que permite su representación en diferentes dispositivos
  • Accesibilidad: al separar presentación y contenido la información está disponible de forma más sencilla para los usuarios que precisen de ayudas técnicas para la navegación en la Web.

¿Para qué sirve?

XForms puede hacer todo lo que hacen los formularios HTML, pero además permite:

  • Comprobar automáticamente los valores de los datos mientras el usuario los introduce.
  • Indicar que ciertos campos son obligatorios y que el formulario no podrá ser enviado sin esta información.
  • Enviar formularios de datos como XML , ya que XForms es XML.
  • La integración con Servicios Web, por ejemplo, usando SOAP y XML RPC.
  • Enviar el mismo formulario a diferentes servidores (por ejemplo, la búsqueda de una palabra se envía a diferentes motores de búsqueda).
  • Guardar y restaurar valores en y desde un archivo.
  • Utilizar el resultado de un envío como entrada para un formulario posterior.
  • Obtener los datos iniciales para un formulario a partir de un documento externo.
  • Deducir valores desde otros valores presentes en el formulario, por ejemplo que el campo "cantidad total" contenga la suma de todas la compras individuales.
  • Forzar valores para que aparezcan de determinada forma, por ejemplo obligando a que los valores estén comprendidos en un rango determinado.
  • Construir formularios al estilo de "cesta de la compra" y "asistentes" sin necesidad de programar.
  • Utilizar nuevos métodos de envío en comparación con los formularios HTML. Todos ellos son métodos HTTP estándar para enviar datos a través de la red.
  • Mejorar la experiencia de los usuarios.
  • Combinar tecnologías XML existentes.
  • Lograr la Independencia de Dispositivo.
  • Facilitar la creación de formularios complejos.
Me parecio una idea genial, nunca lo utilice pero va a solucionarme varios problemas.

Si quieren leer más : http://www.w3c.es/Divulgacion/GuiasBreves/XForms

sábado, 20 de marzo de 2010

HSQLDB, HyperSQL 2.0


 

HSQLDB (HyperSQL base de datos) es el principal motor de base de datos relacional SQL escrito en Java. Dispone de un controlador JDBC y apoya ANSI casi completa de SQL-92(formato de árbol BNF), además de muchos de SQL: 2008 las mejoras. Ofrece un pequeño motor de base de datos rápido que ofrece en memoria y un disco basado en tablas y tiene soporte incorporado y los modos de servidor. Además, incluye herramientas como una herramienta de línea de comandos SQL y herramientas de consulta GUI.


 

El producto está siendo utilizado como una base de datos y motor de persistencia en muchos proyectos Open Source Software y en proyectos comerciales y productos. En su versión actual es muy estable y fiable. Es mejor conocida por su pequeño tamaño, la capacidad de ejecutar completamente en la memoria, su flexibilidad y velocidad.


 

Versión 2.0 es compatible con la más amplia gama de características estándar SQL visto en ningún otro motor de fuente abierta de bases de datos. Hemos llegado a la conformidad con SQL estándar SQL casi lleno-1992 de nivel avanzado y SQL: 2008 las características de lenguaje básico más una extensa lista de SQL: 2008 y las características opcionales muchas extensiones. El motor es totalmente compatible con múltiples subprocesos y 2PL y modelos de control MVCC transacción.


 

Es totalmente gratuito para uso y distribución con licencia BSD estándar. Completamente libre de costo o restricciones y totalmente compatible con todas las principales licencias de código abierto. Código fuente de Java y una extensa documentación incluida.


 

Yo uso esta base para correr test que interactúan con base de datos. Si usamos maven agregamos la siguiente dependencia en el pom:

<dependency>

<groupId>hsqldb</groupId>

<artifactId>hsqldb</artifactId>

<version>1.8.0.10</version>

</dependency>

Y la configuramos con spring el dataSource:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="org.hsqldb.jdbcDriver" />

<property name="url" value="jdbc:hsqldb:mem:testDB" />

<property name="username" value="sa"/>

<property name="password" value=""/>


 

<property name="defaultAutoCommit">

<value>false</value>

</property>


 

<property name="poolPreparedStatements">

<value>true</value>

</property>


 

<property name="initialSize">

<value>1</value>

</property>


 

<property name="maxActive">

<value>90</value>

</property>


 

<property name="maxIdle">

<value>50</value>

</property>

</bean>


 

Y listo!!

Mapeos de Enums en Hibernate

Esta información fue provista por un amigo mío y del blog, Lucas Acosta

Cuando usamos Enum y tenemos que guardar con hibérnate podemos hacer lo que sugiere la documentación de hibérnate:

http://community.jboss.org/wiki/UserTypeforpersistinganEnumwithaVARCHARcolumn

Podemos guardar nuestro Enum en una columna como varchar:

import java.io.Serializable;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Types;

import org.hibernate.HibernateException;

import org.hibernate.usertype.UserType;


public class EnumUserType<E extends Enum<E>> implements UserType {



private Class<E> clazz = null;



protected EnumUserType(Class<E> c) {

this.clazz = c;

}


private static final int[] SQL_TYPES = {Types.VARCHAR};


public int[] sqlTypes() {

return SQL_TYPES;

}


public Class returnedClass() {

return clazz;

}



public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner) throws HibernateException, SQLException {

String name = resultSet.getString(names[0]);

E result = null;

if (!resultSet.wasNull()) {

result = Enum.valueOf(clazz, name);

}

return result;

}


public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index) throws HibernateException, SQLException {

if (null == value) {

preparedStatement.setNull(index, Types.VARCHAR);

} else {

preparedStatement.setString(index, ((Enum)value).name());

}

}


public Object deepCopy(Object value) throws HibernateException{

return value;

}


public boolean isMutable() {

return false;

}


public Object assemble(Serializable cached, Object owner) throws HibernateException

return cached;

}


public Serializable disassemble(Object value) throws HibernateException {

return (Serializable)value;

}


public Object replace(Object original, Object target, Object owner) throws HibernateException {

return original;

}


public int hashCode(Object x) throws HibernateException {

return x.hashCode();

}


public boolean equals(Object x, Object y) throws HibernateException {

if (x == y)

return true;

if (null == x || null == y) return false;

return x.equals(y);

}

}


Supongamos que tenemos este Enum:

public enum MyEnum {

ENUM_A, ENUM_B;

}

Hacemos el userType :

public class MyEnumUserType extends EnumUserType<MyEnum> {

  public MyEnumUserType() {
super(MyEnum.class);
}



}


Y Por ultimo mapeamos:

<property name="sample" type="mypackage.MyEnumUserType" not-null="true"/>

Borrar base de datos en test!!

Cuando hacemos test de DAOs, servicios o que tenga que interactuar con una base de datos es bueno usar una base de datos en memoria como HSQLDB.

El problema está en que cada test inserta datos en la base, lo que hace que el resultado de un test dependa de la ejecución de otro test; esto no es bueno.

Si trabajamos con base de datos en memoria y Spring lo que podríamos hacer es bajarla y volverla a subir usando: @DirtiesContext en cada uno de los test. @DirtiesContext es una anotación de spring que baja y sube el contexto. Esto es una solución, pero no la más optima los test van a demorar más dado que por cada test se baja y sube el contexto. La solución más óptima es borrar la base en cada test de este modo:

@After
public void tearDown() {
this.restoreEmptyDatabase();
}

private void restoreEmptyDatabase() {
LocalSessionFactoryBean sessionFactory = (LocalSessionFactoryBean) this.applicationContext
.getBean("&sessionFactory");
sessionFactory.dropDatabaseSchema();
sessionFactory.createDatabaseSchema();
}

Podríamos ponerlo en el After o Before es indistindo este método borrara la base por test.

viernes, 19 de marzo de 2010

Reflexiones sobre los problemas del desarrollo orientado a pruebas

Muy recomendable que lean el siguiente post:

http://agilizar.es/blog/11/03/2010/reflexiones-sobre-los-problemas-del-desarrollo-orientado-a-pruebas/

Publico este enlace dado que comparto en todo la opinión TDD no llego para solucionarnos TODOS nuestros problemas. Solo es una herramienta para mejorar nuestro código.

sábado, 13 de marzo de 2010

Apache ActiveMQ

Antes de comenzar a hablar de ActiveMQ debemos entender JMS. JMS trata sobre la comunicación de aplicaciones de forma asíncrona. Funciona de forma similar que un mail, JMS envía el mensaje a la aplicación sin esperar que la reciba la otra aplicación.

La vía indirecta es la clave de JMS. Cuando una aplicación envía información a otra mediante JMS, no hay vínculo directo entre ambas aplicaciones. En su lugar, la aplicación emisora coloca el mensaje en manos de un servicio que garantiza su entrega a la aplicación receptora. Hay dos conceptos principales en JMS: corredor de mensajes (message brokers) y destinos (destinations)

Apache ActiveMQ es un estupendo message brokers de código abierto y una maravillosa opción para la mensajería asíncrona con JMS. Aunque ActiveMQ comenzó como un proyecto de CodeHaus, se traslado a Apache.

Apache ActiveMQ es rápido, soporta varios lenguajes Java, C, C++, C#, Ruby, Perl, Python, PHP, soporte a Enterprise Integration Patterns, integración con spring, y se distribuye bajo licencia Apache 2.0 License

Dejo links:

http://java.sun.com/products/jms/

http://activemq.apache.org/index.html

domingo, 28 de febrero de 2010

sábado, 27 de febrero de 2010

The Apache Software Foundation Celebrating a Decade of Open Source Leadership.

La Fundación Apache nos soluciona la vida, con muchos de sus proyectos. Todos mis proyectos usan una librería o producto de Apache. El cual esta cumpliendo una década ayudando a los desarrolladores.

Feliz Cumple!!!


Blogged with the Flock Browser

Apache Tuscany



Apache Provee soluciones para todo y más todavía. Tuscany 
es una implementación de la especificación SCA.

Apache Tuscany 
provee una infraestructura para facilitar el desarrollo de una Arquitectura orientada a servicios (SOA). Apache Tuscany implementa SCA por lo tanto reduce el costo de desarrollo de soluciones basadas en SOA.

Apache Tuscany 
provee soporte para SCA 1.0. También se integra muy bien con tecnologías web 2.0 y OSGI. Soporta SCO y SDO 2.0 para C++ y 2.1 para Java.


Blogged with the Flock Browser

jueves, 25 de febrero de 2010

Flock

Estoy probando un nuevo browser llamado flock y realmente estoy sorprendido. Veo claramente el futuro de los browsers en este producto.

Es el browser 2.0, es decir esta integrado con la web 2.0 , pantallas para edición de blog, integración con facebook, y muchos chiches más!!!

Es gratuito y proveído por la organización Mozilla

Se los recomiendo: www.flock.com
Blogged with the Flock Browser

sábado, 20 de febrero de 2010

SDO

Service Data Objects es una tecnología que permite que los datos sean heterogéneos para arquitecturas SOA. La espacificación SDO fue desarrollada en 2004 en una colaboración entre BEA, IBM y JCP. La versión 2.0 fue parte ya de SCA.
Un modelo simple de programación para desarrollar aplicaciones que utilicen diferentes tipos y fuentes de Datos:
Acceso uniforme a datos de fuentes heterogéneas: XML, RDB, POJO, SOAP, LDAP, JCA, etc.
Soporta modelo desconectado
Provee ambos estilos de programación: Estático (altamente tipado), Dinámico (estilo lenguajes de scripts).
Provee introspección a Metada. Ejemplo: para acceso a los tipos de datos
Es neutral con el lenguaje de programación. Soporte a Java, PHP, C++, etc

SDO reemplaza los diferentes APIs que existen para el acceso a los Datos.
SDO libera al desarrollador de los detalles técnicos del backend de los Datos.
SDO define una forma única y simple de acceso a fuentes heterogéneas de Datos.

SCA

SCA (Service Component Architecture) es una tecnología que simplifica el desarrollo de aplicaciones dentro de una Arquitectura Orientada a Servicios (SOA). Permite crear recursos IT en servicios reusables de una manera muy sencilla. Además, reduce la complejidad de la creación de los mismos ya que unifica la forma de crear dichos servicios de una manera independiente del lenguaje de programación o la plataforma utilizada.

Utilizando SCA se pueden implementar esos recursos IT en términos de funciones de negocio y evitar la exposición de su programación interna (con todo lo complejo que pueda llegar a ser) al usuario. No solo eso, SCA propone un modelo de ensamblaje de los componentes dando solución a todo tipo de problemas como los métodos de acceso o la seguridad.

Qué es, concretamente, SCA? Es un conjunto de especificaciones que describen un modelo para construir aplicaciones y sistemas basadas en una Arquitectura Orientada a Servicios (Service-Oriented Architecture o SOA). El propósito de este proyecto es doble

· Definir en forma única un modelo de componentes de servicios, tanto para la provisión como para el consumo. Lo novedoso es que esta filosofía procura trascender Java para abarcar también C++, COBOL, PHP o incluso lenguajes basados en XML como BPEL, XSLT o XQuery

· Definir en forma única la manera de ensamblar esos componentes, de referenciarlos para poder construir aplicaciones orientadas a servicios

SCA define la manera de ensamblar servicios web (incluso con otros elementos que no sean Servicios Web como EJB’s, CORBA, etc…) . SCA consiste en un conjuntos de “artefactos” los cuales son definidos en un XML.

Si se quedaron con gansa de más info dejo pdf de IBM:

http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-sca/SCA_White_Paper1_09.pdf

http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-sca/SOAProgrammingModelBusinessValue.pdf

viernes, 12 de febrero de 2010

Apache Click

Apache Click es un framework para desarrollo web que alcanzo a ser Top level. Eso es mucho para el joven framework. Esta basado en el patrón MVC. Y mezcla sencillez con performance. No pude todavía probarlo pero me parece, a simple vista muy bueno.

Dejo links:



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.