martes, 29 de enero de 2008

Interceptores

Se puede llamar a los interceptores antes de llamar a la acción, después de llamarla o antes y después. Tienen acceso total a la clase Action y al entorno de ejecución permitiendote llamar a los métodos de la clase Action o trabajar con su entorno
Otra característica de los interceptores es la facilidad con la que podemos configurar la pila de interceptores.

POJO

Es un acrónimo de Plain Old Java Object y es utilizado por los programadores en Java para enfatizar el uso de clases simples y que no dependen de un framework en especial.

Simplemente tendrán métodos getters & setters.

Reutilización

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confección de otros programas. Ello implica que los objetos definidos en un programa pueden ser extraídos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el código del objeto.

Refactorización

La refactorización consta en el cambio del nombre de una variable, clase u otro tipo de objeto y su correspondiente cambio en todos las clases y metodos que se use, para así dar un código más limpio.
Por ejemplo en un principio podemos crear la clase Usuario, pero tras un transcurso del programa vemos que el nombre no se claro, así qie se prefiere llamar Cliente, pues cambiaremos el nombre de Usuario por Cliente y en todas las clases y metodos donde se utilice.

Refactorización de código:

Es crear sub-procesos para dejar el código principal más limpio y que no sea tan largo.

Referencias:

Modularidad

Encapsulación

Podemos imaginarla encapsulación como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida. Si introducimos datos por la entrada automáticamente obtendrá un resultado en la salida. No necesita conocer ningún detalle del funcionamiento interno de la caja.

El término encapsulación indica la capacidad que tienen los objetos de construir una cápsula a su alrededor, ocultando la información que contienen a las otras clases que componen la aplicación.


Los lenguajes OOP incorporan la posibilidad de encapsular también las estructuras de datos que sirven como base a las funciones. Aportan por tanto un nivel superior en cuanto a protección de información.

Polimorfismo

Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre, diferenciándolas únicamente en los parámetros de entrada. Dependiendo del objeto que se introduzca como parámetro de entrada, se elegirá automáticamente cual de las operaciones se va a realizar.

Modularidad

La modularidad se basa en la descomposición de un problema en una serie de sub problemas; dividiéndolo en módulos que resultan de segmentar el problema en funciones.

Herencia

Es una relación entre clases por la cual existe un 'herencia' de padre a hija denominando padre a la sucesora y la hija a la que va a 'heredar' los comportamientos de su padre, así cómo sus métodos.

Por lo tanto podemos decir que la herencia está gerarquizada ya que una padre puede tener varias clases hijas:

Dicha jerarquía facilita el poliformismo y el encapsulamiento.

A la hora de crear una clase hija debemos poner:

public class Hija extends Padre {
}

Así mismo debemos implementar sus métodos y atributos.

POO

Programación Orientada a Objetos.- También denominada OOP o POO dependiendo de la traducción de inglés o español. Está basado en objetos. Está basado en:

Herencia
Modularidad
Poliformismo
Simplificación
Independencia
Reutilización
Encapsulación
Refactorizacioón

La POO expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.

Los objetos se componen de atributos (estado) y métodos (comportamientos). Y usan los métodos para relacionarse entre objetos.

POA

Programación Orientada a Aspecto crea un contenedor que sirve entre relación entre clases y asi darle más libertad a dichas clases.

EJB3

Framework dentro de j2ee, se pueden hacer pruebas muy faciles, ya que son POJO.

Caja Blanca y Caja Negra

Ambos sirven para realizar pruebas y se diferencian en:

Caja Blanca.- Es cuando conocemos en todo momento todos los pasos y el seguimiento de la traza y por lo tanto conocemos tanto el resultado de un método como su comportamiento interno.

Caja Negra.- A diferencia de la caja blanca, no conocemos todos los pasos, simplemente sabemos que el método a usar nos devolverá un valor concreto sin saber el comportamiento interno del método.

lunes, 28 de enero de 2008

Nuevo proyecto con SEAM-GEN

Jboss- /seam-gen/built ->ant

Dentro de ant:

->Reset

->Setup

· Introducir workspace

· Introducir dirección del servidor

· Introducir nombre del proyecto

· Color de la paleta

· EAR WAR (usare EAR pork uso EJB)

· Nombre del paquete del proyexto

· Nombre del paquete del UI

· Nombre del paquete de los test

· Nombre de la Base de Datos

· Nombre del directorio de la base de datos

· Ruta de los drivers (dejar por defecto)

· Conectar con la base de datos (defecto)

· Ruta URL donde se conecte la Base de Datos

· Nombre del root

· Contraseña del root

· Nombre de la Base de Datos

· Existen las tablas creadas

· Cada vez que arranque la BD cree que los datos que teniamos cargados.

· Implementación (dejar en blanco)

->New Project (Creará un nuevo proyecto en el workspace)


Desde Eclipse:

Seleccionar el nuevo proyecto en java y seleccionar desde uno ya creado, seleccionamos el que ha creado el Seam-gen y le pondremos el mismo nombre.

viernes, 25 de enero de 2008

Servicios que proporciona un contenedor EJB

* Statefull

* Stateless

* MDB – message driven bean

* Entities (ofrece otros servicios)


Messaging * (Transacciones y persistencia)

Inyeccion Dependencias * * (Testeable)

Pooling * * (Alto Rendimiento)

Thread- Safety * * * (Seguridad)

Mantenimiento estado * (Gestión Estado)

AOP-Interceptores * * * (Interceptores )

RMI * (APP. Distribuida y multiusuario)

Web Services * (APP. Distribuida y multiusuario)

Transacciones * * *

Seguridad * *

Ciclo de vida


Podemos distinguir 2 tipos:


Stateless

Si alguien quiere crear un Bean y no existe, se crea. Y en el momento que no se use se destruye.

Si alguien quiere un Bean y existe no es necesario crearlo.

Cuando estamos en preparado se lanza un evento, y otro antes de eliminarse.

Statefull

Durante un tiempo el objeto esta vivo en el contenedor. Mantener un objeto con estado es muy dificl de mantener, en J2EE han conseguido crear la vida de un objeto si usar una base de datos.

El cliente entre estado y estado, en vez de estar en estado “preparado”, pasa al estado de Pasivo, que hace que se guarda en el disco duro la información del usuario. Cuando el usuario vuelva e interactue de nuevo, vuelve a pasar al estado “preparado”. Para hacer esto debemos implementar la interfaz implement Serializable.

Para que un objeto pueda ser guardada en disco debe de implementar Serializable.

Los statefull tienen dos metodos, “post construct” y “pre destroy”, pero el Statefull además inclye “pre passive” y “post activate”.

miércoles, 23 de enero de 2008

TestNG

TestNG es un framework para pruebas y testing que trabaja con Java y está basado en un sistema de pruebas de caja blanca.
Este si tiene bastantes diferencias con respecto a JUnit, podemos oabservar el hecho que podemos usar anotaciones para introducir informacion sobre las clases y metodos que vamos a testear.

martes, 22 de enero de 2008

EASY MOCK

Easymock es un framework que sirve para hacer pruebas (Caja Negra) creando clases que no disponemos y simular su comportamiento.


El código sigue este argumento:

Controlador controlador=new Controlador(); //Nos crearemos un controlador
crear datos; //Datos necesarios

INTERFAZ mock=EasyMock.creatMock(INTERFAZ.class); //La interfaz a simular
EasyMock.reset(mock); //Reiniciamos el easymock
EasyMock.expect(mock.funcion(datos)).andReturn(devolver Valor de la funcion); //Esperamos el comportamiento
EasyMock.replay(mock); //Accionamos el mock

controlador.atributo=mock //Asignamos el mock
controlador.funcion(datos); //Probamos la funcion

EasyMock.verify(mock); //Verificamos el comportamiento



EJEMPLO


Cliente cli = new Cliente(); Creamos la clase
Controlador cont = new Controlador(); Creamos el controlador

ServicioContacto servicioContactoMock= EasyMock.createMock(ServicioContacto.class); //Creamos el Mock diciendole k clase es

EasyMock.reset(servicioContactoMock); //Reset
EasyMock.expect(servicioContactoMock.enviaMail(cli)).andReturn(true); //Expect
EasyMock.replay(servicioContactoMock); //Estado alerta //Replay

cont.servicioContacto=servicioContactoMock; //Asiganmos el mock
cont.enviaMail(cli);
EasyMock.verify(servicioContactoMock); //Verificamos comportamiento