miércoles, 30 de enero de 2008

del.icio.us ¿Que es esooooo?

¿A quien no se le ha olvidado alguna vez antes de formatear el Pc salvar la categoria Marcadores o Favoritos?

¿A quien no le ha ocurrido que estando en el trabajo o en algun lugar donde estemos usando un Pc que no es el nuestro habitual ha necesitado algun link que tiene en Marcadores o Favoritos?

Pues ese tipo de casos lo podemos solucionar usando del.icio.us, ademas podemos compatir con otros, ya sean desconocidos, nuestro equipo de trabajo, amigos y familiares, etc...


Aqui teneis un estupendo tutorial para configurar del.icio.us


El tutorial no es mio pero mis agradecimientos al creador.

Contenedor EJBs

Un contenedor de EJBs lo podriamos ver como un gran Objeto que contiene otros Objetos con unas caracteristicas especiales. El contenedor de EJBs nos proporciona una serie de servicios que si tubieramos que implementarlos uno a uno para todos nuestros objetos seria de locos.

Los EJBs pueden ser de ..
  • Sesion (StateFull o StateLess)
  • MDB (Message Drive Bean) Asincronos
  • Entities
Servicios.: "entre parentesis el tipo de EJB al que proporciona el servicio"

  • Messaging (MDB)
  • Inyeccion de Dependencia (StateFull, StateLess, MDB)
  • Pooling (StateLess, MDB)
  • Thread Safety (StateFull, StateLess, MDB)
  • Mantenimiento de Estado (StateLess)
  • AOP Interceptores (StateFull, StateLess, MDB)
  • RMI (StateFull)
  • Web Services (StateLess)
  • Transacciones (StateFull, StateLess, MDB)
  • Seguridad (StateFull, StateLess)

J2EE

¿Que es J2EE?

Esa es la gran pregunta que esta ahora mismo por la red.

Las caracteristicas principales de una aplicacion J2EE son :
  • Alto Rendimiento (muchos usuarios de las aplicaciones al mismo tiempo)
  • Aplicacion Distribuida y Multiusuario.
  • Escalable (Varios servidores para la misma aplicacion)
  • Testetable (desarrollos orientados a test, JUnit, TestNG, EasyMock, etc....)
  • Gestion de Estado
  • Persistencia
  • Transacciones
  • Seguridad
  • Interceptores

Tambien se podria decir que J2EE ha sido la evolucion de Java para implementar aplicaciones Empresariales y de forma distribuida.

EJBs

Los EJBs son objetos Java que estan alojados dentro de un Servidor de Aplicaciones, otra de las caracteristicas de los EJBs es que pueden estar alojados en distintis Servidores y ser accesibles entre ello como si estubieran en la misma maquina.

Los EJBs son manejados por Contenedores de EJBs.

martes, 29 de enero de 2008

POJO

Plain Old Java Object

Aunque creamos que es algo con mucha complicacion POJO no son ni mas ni menos que Objetos creados simplemente con miembros y estos con sus getters and setters correspondientes.

public class Equipo(){
private String nombre;
private Integer puntos;

  public String getNombre() {
return this.nombre;
}

public void setId(String nombre) {
this.nombre = nombre;
}

public Integer getPuntos() {
return this.puntos;
}

public void setId(Integer puntos) {
this.puntos = puntos;
}
}

miércoles, 23 de enero de 2008

Subclipse Instalacion

Este plugin nos sirve para acceder al repositorio publico en cual colocaremos las distintas versiones de los fuentes de nuestra aplicacion.

Su instalacion es secilla pero al menos a mi me ha dado un problema ya que me pide que instale tambien "org.eclipse.buckminster.core" cosa que no es necesaria.

Para que no os ocurra esto cuando esteis en el paso 6 de la instalacion os saldra un arbol de instalacion y teneis que desceleccionar la casilla que pone al final OPTIONAL es decir la que esta en medio de las tres

la direccion para su correcta instalacion es :

http://subclipse.tigris.org/install.html

salu2

rOV

martes, 22 de enero de 2008

Servidor Aplicaciones

Interceptores

OOP

La programacion orientada a Objetos esta basada en varias técnicas, incluyendo herencia, polimorfismo, y encapsulamiento.

¿Que fuerte nooooo? ¿Que es eso?

Pues bien aunque pueda parece una locura en realidad no es mas que una forma de catalogar las cosas para aprovechar al maximo sus caracteristicas.

Vamos con los ejemplo que seguro que se entiende todo mejor.

Objeto -> Mamifero
Objeto -> SerHumano
Objeto -> Vaca
Objeto -> Mono

HERENCIA
Si nos paramos a pensar un poco tanto SerHumano, Vaca y Mono son Mamiferos. Por lo tanto los Objetos SerHumano, Vaca, Mono HEREDAN de Mamifero.

En Java se diria SerHumano extends Mamifero

quiere decir esto que la accion Mamar la tendran todos por Herencia de Mamifero.
despues cada uno tendra sus peculiaridades pero mamar sera comun a los tres.

Esta claro ¿no?

POLIMORFISMO

Esto nos viene a indicar que un determinado Objeto SerHumano puede tener diversas caracteristicas que se pueden cumplir a la misma vez o independientemente cada una.

SerHumano puede ser Bombero , Jugador de Baloncesto, Actor, Padre.

es decir el Objeto SerHumano puede ser polimorfico ya que puede adoptar la forma de cualquiera de las caracteristicas de arriba o todas al mismo tiempo.

Para esto en Java utilizamos las Interfaces

ENCAPSULAMIENTO


El encapsulamiento nos sirve para ocultar las propiedades de los objetos y ponerlas a disposicion de los demas objetos solamente mediante los metodos asociados a dichas caracteristicas.

En el ejemplo de SerHumano que es JugadorDeBaloncesto si quisieramos modificar su mano de lanzamiento a canasta no podriamos decir que ManoDeLanzamiento = DERECHA por ejemplo sino que tendriamos que buscar una accion o metodo que fuera estableceManoDeLanzamiento(DERECHA) y asi el objeto interiormente cambiaria la mano de lanzar realizando las acciones que fueran necesarias estando estas totalmente oculta o encapsuladas a nosotros.

Esto es un resumen a grandes matices de la OOP o Programacion Orientada a Objetos.

El resto son caracteristicas propias de los lenguajes en los que se desarrolle.


rOV

AOP

Para los que quieran ir leyendo un poco acerca de la POA aqui tienen un pdf para ir leyendo un poco.

PROGRAMACIÓN ORIENTADA A ASPECTOS

EJB3

Basicamente se pueden definir EJB3 como POJO + @Anotaciones

Ejemplo de EJB3.

Cliente.class


Los tipos de EJBs son de Sesion con Estado (StateFull) y de Sesion Sin Estado(StateLess)

Los EJBs tambien tienen un ciclo de vida.


  • Un cliente solicita un bean
  • Contenedor invoca new Instance del Bean usan la reflexion
  • Se le Inyecta la Dependencia
  • Bean Ready (El bean esta preparado)

TDD. Desarrollo Orientado a Test.

TDD. Desarrollo Orientado a Test.

Una de las caracteristicas del desarrollo de aplicaciones con J2EE es que gracias a una serie de FrameWorks como son EasyMock, JUnit, TestNG, etc..., los desarrolladores crean las aplicaciones a partir de las pruebas, es decir, se va construyendo un entorno de pruebas que obliga al programador a implementar las entidades necesarias para que estas pruebas cumplan su cometido. Parece un poco caótico pero realmente a la larga es muy positivo ya que todas las entidades desarrolladas han sido probadas y así podremos garantizar su funcionamiento y como dice el profe de J2EE "nosotros nos podemos ir a casa a nuestra hora porque demostramos que nuestro software funciona y otros mientras se quedan hasta las 4 de la madrugada" ;-)

Ejemplo de clase para test.

TestManejoDeAnotaciones.java

TestNG

TestNG es un FrameWork para el desarrollo orientado a pruebas.

Las caracteristicas principales son :

1.- Trabaja con Anotaciones.
2.- Las condiciones a probar se evaluan con la clausula assert(condicion):"mensaje en caso de no cumplirse la condicion";
3.- Gracias a las Anotacion "@Dataprovider" podemos realizar pruebas mandandole al metodo a probar distintos parametros.

EasyMock

EasyMock es una librería que trabaja con JUnit para el desarrollo orientado a pruebas. Pongamos que estamos trabajando en un gran proyecto en el cual cada programador ha recibido de el analista la definicion de las entidades o clases junto con las interfaces que representaran a estas clases.

Por ejemplo :

El programador A tiene que codificar una clase para que se conecte con otra clase y a través del metodo dameTelefono(usuario) pasandole un usuario esta otra clase le devuelva una cadena con el telefono del usuario.

El programador B tiene que codificar una clase que implemente un metodo es decir que tenga un metodo dameTelefono(Usuario usuario) que cuando reciba una llamada con un usuario este realice una llamada al servicio de base de datos y devuelva el telefono del usuario en cuestion.

Este seria el encargo del analista a los programadores. Pero la facilidad que nos da la libreria EasyMock es que el programador A sea totalmente independiente del programador B a la hora de probar y desarrollar su codigo ya que podriamos crear un objeto Mock que nos devolviera lo que nos han dicho que ha de devolvernos el objeto con el que vamos a conectarnos y nosotros no estamos desarrollando.

Para poder crear objetos Mock necesitamos la interface de dicho objeto, en este caso necesitariamos la interface de la clase ServicioDeTelefonos.class que con la que vamos a hablar para que nos devuelva el telefono a partir de un usuario enviado.

Un ejemplo de codificacion seria :


El programador A codificaria :

//Este seria el nombre de nuestro metodo de pruebas ya que la clase que vamos a probar es la de ControladorPeticionesUsuario.class que es la que ha de realizar el programador A
public class void TestControladorPeticionesUsuario(){
//creamos nuestros objetos
ControladorPeticionesUsuario controlador = new ControladorPeticionesUsuario();
Usuario usuario = new Usuario();

//me creo el objeto Mock a partir de la interface ServicioDeTelefonos.class
ServicioDeTelefonos servicioTelefonico = EasyMock.createMock(ServicioDeTelefonos.class);

//reseteamos el objeto Mock antes de empezar a funcionar con el.
EasyMock.reset(servicioTelefonico);


//esta linea es la clave de la utilidad de EasyMock, usando el metodo expect(.....) le indicamos lo que esperamos que haga con el objeto Mock "servicioTelefonico" que hemos creado antes y le decimos que cuando alguien se ponga en contacto con su metodo dameTelefono(usuario) le devuelva la cadena "656656565" mediante .andReturn("656656565") que es lo que nos han indicado en la especificaciones que nos va a devolver.
EasyMock.expect(servicioTelefonico.dameTelefono(usuario)).andReturn("656656565");

//ahora ponemos el objeto Mock "servicioTelefonico a funcionar.
EasyMock.replay(servicioTelefonico);

//inyectamos el objeto Mock a las propiedades de nuestra clase para que puedan hablar.
controlador.servicioTelefonico = servicioTelefonico;

//hacemos la llamada al metodo que estamos probando de nuestra clase. en el interior de ella tendremos que ponernos en contacto con ServicioDeTelefonos que antes hemos referenciado, es decir dentro de nuestro metodo dameTelefono(usuario) tendremos una linea como esta: return this.servicioTelefonico.dameTelefono(usuario);
String telefono = controlador.dameTelefono(usuario);

//por ultimo se hace una llamada al metodo verify(.....) para verificar que el objeto ha sido usado.
EasyMock.verify(servicioTelefonico);

//podriamos verificar que todo ha cumplido su objetivo imprimiendo el telefono que hemos puesto para que devolviera el objeto fantasma o Mock

System.out.println("El telefono es : " + telefono);
}

Es asi de sencillo. si teneis alguna duda o necesitais el tipico empujon ya sabeis por donde andamos......


rOVE

Refactorizaciones

La refactorizacion nos sirve para cambiar el nombre o paquete de alguna clase o incluso alguno de los componentes de estas ya sean miembros o metodos y gracias a la refactorizacion todas las dependencias en nuestro proyecto tambien son cambiadas.