Setting up a Tomcat in your AMI

I love Java and Object Oriented Paradigm, and I was looking for an option to develop Java apps in the cloud in a cheap way. The cheaper, light and non-restrictive way to do this is installing Tomcat in an AmazonWS Linux-AMI. You can do great applications in Tomcat with Spring/JPA/JSF2, but this architecture deserves another post.

Well, I want to show you how to configure Tomcat to deploy web applications in a basic-AMI (It’s free the first year):

  • Configuring memory heap
  • Provide gzip compression for the web contents
  • Two ways to redirect to port 80
  • And, if you use maven, deploying remotely with cargo

Lee el resto de este artículo »

Update your Ubuntu to Java 7

Download last release from oracle.com, I downloaded jdk-7u1-linux-x64.tar.gz.

Unzip it: tar xvf jdk-7u1-linux-x64.tar.gz

Copy to right place: sudo cp -r jdk1.7.0_01 /usr/lib/jvm

Create java7 alternative: sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/jdk1.7.0_01/jre/bin/java 1

Choose the alternative: sudo update-alternatives –config java

You can choose between many jvm’s easily.

enjoy!!

Fizz Buzz Java kata

At XPWeek2011 we learned TDD coding, and the importance of OOP principles to develop applications. I spent great days there, thanks to Carlos Ble and iExpertos.

Continuing with the last kata series. I will show you how I solved FizzBuzz kata, maybe not the best, but I like the solution because the expressive final code:

  • say(FIZZ, WHEN_FIZZ_FACTOR);
  • say(BUZZ, WHEN_BUZZ_FACTOR);
  • elseSayNumber();

Here you have KataFizzBuzz

Here you have the code: fizzbuzz.zip

And here you have the video:

Roman Numerals Java kata

Siguiendo con la serie de katas, ahora toca la kata de los números romanos. Es simple, se trata de convertir de entero a romano y viceversa.

Para darle una vuelta de tuerca me he propuesto seguir los principios KISS y SOLID, que se recomienda tener en mente cuando refactoricemos. Y ya de paso me he propuesto implementar una Interfaz fluida basada en métodos estáticos:

  • convert(roman).toArabic();
  • convert(arabic).toRoman();

El video de la kata lo teneis en Youtube:

El código de la kata aquí: romannumerals-fluentinterface-solid.zip

Y por último un diagrama de clases que ilustra como el diseño respeta el diseño Open/Close, en tanto en cuanto fácilmente, añadiendo más subclases, podremos ampliar a tantos sistemas numéricos como queramos (Octal, Hexadecimal,…):

Class Diagram

String Calculator Java Kata

Con el fin de mejorar mi kunFu (mi TDD, mi Java, y mi oficio en general), pretendo hacer unas katas, y publicarlas aquí por si a alguien le interesa como las he resuelto, y se anima a resolverlas.

Me estoy basando en las katas de la web 12meses12katas (gracias @kinisoftware por tu esfuerzo en esta iniciativa!!).

La primera es StringCalculator, yo la he resuelto así:

El código os lo empaqueto aquí: String Calculator Java Kata. También lo podéis ver en el repo de Git Hub.

Espero que os divirtáis viéndolo  tanto como yo lo hice haciéndolo ( que sí, que me lo paso muy bien programando!!. Digo yo que no será tan raro, no? ;-P )

AgileBox 1.0 released

AgileBox

En #lebrijocom Labs hemos  creado una máquina virtual con virtualbox que nos ayudará a gestionar nuestros proyectos de desarrollo de software.

Hemos tratado de elegir los subsistemas más utilizados actualmente (Subversion, Nexus, Jenkins, Sonar), con la idea de poder programar con los principios de la programación extrema: integración contínua, control de versiones, calidad de código y control de la configuración. 100% Open Source.

Además hemos instalado un magnífico software de gestión de proyectos como es RedMine:

AgileBox architecture

Podéis descargar la imagen en en este enlace. Espero que la disfrutéis !!

Renew Politica()

Initial Import.

Renovar la clase política

Se admiten refactorizaciones e incluso continuar el código (casi lo subo a GitHub ;)). Licencia Creative Commons (of course).

Cuando en el instituto me enseñaban a Aristóteles se me quedó la idea de que la crisis de la democracia sería la demagogia:

La demagogia, según Platón y Aristóteles, puede producir (como crisis extrema de la democracia), la instauración de un régimen autoritario oligárquico o tiránico, que más frecuentemente nace de la práctica demagógica que ha eliminando así a toda oposición. 

!DEMOCRACIA REAL YA¡ 

Equipos de Desarrollo de Software

En este artículo describiré mi forma de ver la gestión de equipos de desarrollo de software en particular. Como se debe articular un  grupo de desarrollo de Software para:

  • Tener una forma de trabajo sencilla de entender y aceptar por el equipo
  • Trabajar de forma eficiente:  capacidad de medir el tiempo de desarrollo y tomar decisiones para mejorarlo
  • Cubrir varios proyectos a la vez por un mismo equipo
  • Equipo distribuido geográficamente

Lee el resto de este artículo »

Instalando Oracle SOA Suite 11g

Mi pretensión al estudiar estas tecnologías es mejorar el modelado de los procesos de negocio, mezclando de una forma clara:

  • Tareas humanas –> (ADF Web apps design)
  • Servicios web
  • Antiguas tecnologías
  • Sincronizar con eventos de negocio
  • Definición de Reglas de negocio

Me parece que controlando esto, y con un buen sistema de análisis, ofreces una gran herramienta para controlar los sistemas de información de un negocio, y por tanto dirigirlo muy bien.
Hoy vamos a instalar toda la plataforma para desarrollar y desplegar aplicaciones SOA.

Lee el resto de este artículo »

Instalación de JDeveloper y Weblogic

Vamos a instalar estos dos productos en un Windows XP, en una máquina de VirtualBox. La versión elegida es la 11g - 10.3.3.

Podemos descargar todo el software de la página de descargas de Fusion MiddleWare.

Para instalar WebLogic Server 10.3.3 descargaremos el paquete wls1033_win32.exe. Y a través de wizards lo instalaremos en C:\Oracle\Middleware. No tiene ninguna complicación más.

Luego podremos crear dominios separados con su herramienta de configuración en C:\Oracle\Middleware\wlserver_10.3\common\bin\config.cmd

Yo lo he instalado a parte pero con el paquete de JDeveloper viene un Weblogic embebido que podemos utilizar para nuestros desarrollos. Quedaría en el mismo directorio organizado si instalamos JDeveloper en el raíz de Middleware.

Para instalar JDeveloper 11.1.1.3.0 descargamos jdevstudio11113install.jar. Y ejecutamos: java -jar jdevstudio11113install.jar (ciertamente para linux es lo mismo).

Instalamos en C:\Oracle\Middleware\jdev11113. Esto lo haremos para que nos instale un nuevo servidor embebido del IDE separado del que instalamos antes.

Utilizaremos la JDK que trae por defecto la instalación de WebLogic: Sun SDK 1.6.0_18 (C:\Oracle\Middleware\jdk160_18)

Se instalara en el siguiente path:

Installing JDeveloper

Desarrollo en la nube con JDeveloper/Weblogic

En Cloud Colmputing la manera que tenemos de desplegar nuestra aplicaciones es a través de un plugin de Eclipse que despliega remotamente las aplicaciones. Este efecto lo podemos obtener con JDeveloper, añadiéndole un servidor Weblogic remoto, que esté un una máquina aparte a la tuya (en Amazon WS por ejemplo).

Esto puede ser muy útil para:

  • Montar un entorno de desarrollo ágil (RAD).
  • Desplegar las pruebas fuera de tu máquina local que suele ser muy lenta.
  • Como comentaba, para un Cloud Development Style con Oracle.
  • Para tener las aplicaciones separadas en capas, cada capa una máquina como a mi me gusta (escalabilidad, rendimiento).

Lee el resto de este artículo »

ADF Business components: creando una aplicación Fusion (FMW) base

Después del rodeo inicial que me he marcado, intentando cubrir la capa de negocio con Spring/Eclipse y luego con EJB 3. Si queremos desarrollar con el framework de Oracle ADF, nuestra mejor opción es ADFbc (business components). La razón es simple, está mucho mejor integrada con las capas superiores (Data Controls y Vistas) que EJB, ya que es la solución de referencia de la casa (Oracle).

Lee el resto de este artículo »

JAX-WS: Generando un cliente de WS con SoapUI

Vamos a generar las clases necesarias para generar un cliente de un Web Service a partir de su WSDL.

Nos basaremos en el proyecto HelloWorld de hace unas semanas, y aquí le añadimos seguridad. En este proyecto devolvíamos el saludo según el nombre que nos pasaban como parámetro a través del Web Service.

Lee el resto de este artículo »

JAX-WS Handler Chain: Interceptando los mensajes

Queremos interceptar el WS en la salida y la entrada. Esto puede ser útil para:

  • Hacer log de alguna parte del mensaje
  • Llevar registro de mensajes enviados
  • Controles de seguridad añadidos
  • ….

Hoy vamos a hacer un ejemplo de log de la entrada/salida del WS.

Anotamos el WS con el descriptor de la cadena de manejadores:

@WebService
@HandlerChain(file="src/META-INF/handlerChain.xml")
public class Hello {
@WebMethod
    public String sayHello(String name) {
        return "Hello, "+name+".";
    }
}

Que tendrá el contenido siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">  
   <handler-chain>  
      <handler>  
         <handler-class>lebrijo.handlers.WSHandler</handler-class>  
      </handler>  
   </handler-chain>  
</handler-chains>

La clase WSHandler implementará la interfaz SOAPHandler:

public class WSHandler implements SOAPHandler<SOAPMessageContext> {  
 
     public Set<QName> getHeaders() {  
         return null;  
     }  
 
     public boolean handleFault(SOAPMessageContext context) {  
         logToSystemOut(context);  
         return true;  
     }  
 
     public boolean handleMessage(SOAPMessageContext context) {  
         logToSystemOut(context);  
         return true;  
     }  
 
     private void logToSystemOut(SOAPMessageContext smc) {  
         Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);  
 
         if (outboundProperty.booleanValue()) {  
             System.out.println("\nOutgoing message:");  
         } else {  
             System.out.println("\nIncoming message:");  
         }  
 
         SOAPMessage message = smc.getMessage();  
         try {  
             message.writeTo(System.out);  
         } catch (Exception e) {  
             System.out.println("Exception in handler: " + e);  
         }  
     }
 
	public void close(MessageContext context) {
		// TODO Auto-generated method stub
 
	}

Vista ADF: Maestro/Detalle editable con LOV, y exportado a Excel

Basándonos en un artículo anterior en el que mostrábamos como hacer una pantalla maestro detalle, hoy le vamos a añadir una caja donde se mostrará el detalle donde podremos modificar los datos de los empleados.

También es útil saber como se hacen las Listas de Valores con esta tecnología, y veremos un ejemplo de como exportar la tabla detalle a Excel.

Aplicación ejemplo en HRApplication.zip.

Lee el resto de este artículo »

Formulario Navegable (Maestro/detalle)

En entornos administrativos nos podemos encontrar con la exigencia de un tipo de formulario master/detail. Por ejemplo para navegar los empleados que tienen cierto departamento, o los clientes que adquirieron cada uno de nuestros productos.

Basándonos en la aplicación de Recursos Humanos de Oracle haremos un maestro detalle para navegar por los departamentos de la empresa.

Aplicación ejemplo en HRApplication.zip.

Lee el resto de este artículo »

Creando una vista básica de JSF: Hello World!!

Veíamos en un post anterior como crear un proyecto básico para Weblogic. A partir de este vamos a crear una vista muy básica con JSF.

JSF tiene varias ventajas:

  • Cross browsing limpio: nos permite abstraernos de javascript y los estilos, y las peculiaridades de cada navegador
  • Encapsula en componentes la vista
  • Es xml de forma que es editable siempre
  • Basado en estándares = XHTML + JavaScript + JSP + Java (JEE5+)
  • Algunas librerías (oracle-ADF, richfaces, icefaces) permiten el desarrollo de Rich Inernet Applications

Lee el resto de este artículo »

Diseño: plantillas y estilos con ADF

Normalmente en todos los proyectos web, queremos que todas las páginas tengan una apariencia coherente en todo nuestro sitio, para mejorar la usabilidad. Lo más habitual en web es poner como parte fija la cabecera (con el login por ejemplo), un menú en la parte superior o lateral, y un pié:

  • Y que estas partes (que forman la plantilla) se incluyan en todas las páginas que desarrollemos sin necesidad de volver a repetir todo.
  • Que cualquier modificación sobre la plantilla se refleje automaticamente en todo nuestro sitio, sin tocar el resto.
  • Y, si es posible, en mi editor WYSIWYG se vea todo (esto en Eclipse no es posible de momento).

Lee el resto de este artículo »

JDeveloper Data Controls

Los Data Controls son objetos que actúan como una capa intermedia entre la capa de vista y la de negocio en la arquitectura de JDeveloper. Estos dan una forma consistente de manejar las colecciones de datos para mostrarse en la vista. Manejan el modelo, y los servicios de negocio, capturando los datos, manejando la transaccionalidad a través de la vista.

Lee el resto de este artículo »

EJB 3.0: Capa de Negocio

En este post nos ocuparemos de como resuelve JDeveloper la capa de negocio. EJB 3.0 es el estándar para resolver esta capa. Se trata de construir los procesos de negocio, que luego serán llamados por la vista, los servicios web, ….

Nos basaremos en el post anterior, donde creamos la capa de persistencia para nuestra pequeña aplicación.

Lee el resto de este artículo »