jueves, 31 de enero de 2008

Tomcat

Servidor web que entre otras cosas se suele utilizar para las páginas jsp(java).

Para más información ver esta web Todo sobre Tomcat

miércoles, 30 de enero de 2008

Programación orienta a aspectos (AOP)

Presenta una nueva forma de modularizar las aplicaciones junto con nuevas formas de relacionar dichos módulos buscando, en últimas, construir aplicaciones más fáciles de construir, mantener y extender.

AOP nos permite modificar dinámicamente nuestro modelo estático para incluir el código necesario para cumplir con los requisitos de secundaria sin tener que modificar el modelo estático original (de hecho, ni siquiera necesita tener el código original). Mejor aún, a menudo podemos mantener este código adicional en una única localización en vez de tener que se esparcen a través del modelo existente, ya que tendríamos que si estuviéramos utilizando OO por su cuenta.

Desarrollo guiado por pruebas (TDT)

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

Ejemplo:

package es.cea.carritocompra.model;
import org.testng.annotations.Test;
public class TestProducto {
@Test
public void pruebaEqualsProductos(){
Producto prod1=new Producto();
prod1.nombre="pantalon";
Producto prod2=new Producto();
prod2.nombre="chaleco";
Producto prod3=new Producto();
prod3.nombre="chaleco";
assert(!prod1.equals(prod3)):" son iguales ";
assert(prod2.equals(prod3)):"no son iguales ";
}
}

Anotaciones

Una de las tantas facilidades que trae la nueva JDK (versión 5) son las llamadas Annotations. Son como meta-tags que se agregan al código y se aplican a declaraciones de paquetes, tipos, contructores, métodos, atributos, parámetros y variables.Ejemplos de este tipo son @Resource, @EJB, y @WebServiceRef. Otras anotaciones, como @RunAs y @DeclareRoles, están relacionados con la seguridad

Caja Negra y Caja Blanca

Caja Negra--> El proceso de una prueba de caja negra es simple, ejecutamos la unidad de prueba con datos y se observa la salida, la comparamos con el resulado esperado. En caso de que la prueba se supere, es decir, el resultado obtenido y el esperado son iguales, lo llamamos “oráculo”.

Caja Blanca-->Con las pruebas de caja blanca lo que buscamos es encontrar fragmentos del programa que no son ejecutados por los casos de pruebas.Si encontramos que el resultado de estas pruebas es menor al 100%, debemos ejecutar otros casos para intentar llegar al 100%. Si aun así no conseguimos ese 100%, deberíamos preguntarnos si sirve de algo ese trozo de código.

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer sólo los detalles que sean necesarios para el resto del sistema.
El ocultamiento permite 2 cosas: restringir y controlar el uso de la Clase. Restringir porque habrá cierto comportamiento privado de la Clase que no podrá ser accedido por otras Clases. Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos dónde se validarán que algunas condiciones se cumplan. En Java el ocultamiento se logra usando las palabras reservadas: public, private y protected delante de las variables y métodos.

Herencia


La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.

Polimorfismo

El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas.

Se puede clasificar el polimorfismo en dos grandes clases:
Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.

Ejemplo de poliformismo
https://j2eenoe.googlecode.com/svn/trunk/poliformismo/

martes, 29 de enero de 2008

Crear proyecto con Seam-Gen

Abrimos el proyecto de jboss y nos vamos a la carpeta /seam-gen/ y arrastramos el built.xml dentro de ant,una vez hecho esto desplegamos y le damos a reset,luego a setup y se nos abrira una ventania donde vamos a introducir:

  • Introducir workspace
  • Introducir dirección del servidor JBoss
  • Introducir nombre del proyecto
  • Color de la paleta
  • EAR (para el uso EJB)
  • Nombre del paquete del proyexto
  • Nombre del paquete del UI
  • Nombre del paquete de los test
  • TipoBase de Datos (se recomienda hsql por su facilidad de uso)
  • Nombre del directorio de la base de datos
  • Libreria de la base de datos
  • Conexion 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
  • Pregunta si estan las tablas creadas
  • Cada vez que arranque la BD cree que las tablas.
  • Implementación (dejar en blanco)

Luego le damos a new project y esto creará el proyecto con las características antes metida en el workspace.

Al usar la opción new-project se crea un nuevo proyecto con una estructura de directorios que a primera vista parece algo compleja. Sin embargo vamos a ver como cada carpeta tiene una función o definida.

  • bootstrap: Contiene el JBoss Embeddable EJB 3.0 container, para poder desplegar EJBs fuera del servidor de aplicaciones.
  • classes: Contienen los archivos de bytecodes (.class) de los componentes definidos por el desarrollador.
  • dist: Contiene los archivos empaquetados (ear, war, jar) que serán desplegados en el servidor de aplicaciones.
  • exploded-archives: Contiene la estructura de directorios que se puede desplegar directamente en el servidor de aplicaciones.
  • lib: Contiene todas las librerías(.jar) con las dependencias necesarias para la compilación y ejecución de la apliación.
  • nbproject: Contiene los archivos necesarios para trabajar en el proyecto con netbeans.
  • resources: Contiene todos los archivos de configuración.
  • src: Contiene el código fuente de los componentes definidos por el desarrollador, separados en tres bloques: entidades, acciones y test.
  • test-build: Esta carpeta está destinada a almacenar los test de integración.
  • view: Contiene todos los elementos relativos a la vista, como archivos css, imágenes, archivos xhtml…

Para ver este proyecto en el ecplise le damos a new proyect java y le damos a crear desde código existente le ponemos el mismo nombre q tiene el proyecto elegido y ya lo tenemos en el ecplise.

Ahora para crear una entidad en ese proyecto creado le damos al built del seam-gen y pinchamos en new entity :

  • nos pide el nombre de la clase
  • list->en la página para lista los datos
  • details->en la página para editar los datos

Desde la url http:// localhost:808 / nombreProyectoCreado si le damos a nombreEntidadList podemos añadir datos.

Stateful and Stateless (con estado y sin estado )

En OOP podemos distinguir entre objetos con estado(mantenimiento) o sin estado(sin mantenimiento)
El estado se refiere al estado de la información, y la información recaería en las propiedades de nuestros objetos.

Crear un repositorio en google y acceder desde eclipse

Primero entramos en esta direcciónn http://code.google.com/hosting/ y le damos en este enlace Sign in to create a project que nos lleva al inicio de gmail,porque para ello hace falta una cuenta de gmail.
Metemos el usuario y la contraseña y se nos va a la pagina anterior pero ahora con nuestra sesion.
Le damos al enlace Create a new project y nos aparece un formulario,rellenamos los datos y al pasar a la siguiente pagina tenemos que pinchar en la pestaña Source.

Copiamos la ruta que aparece debajo de Command Line Acces q e wla ruta de nuestro blogger y generamos nuestro password(guardar esto que nos servira para poder acceder).
Ya tenemos nuestro blogger creado ahora vamos a configurar el eclipse.

Pinchamos en el menu window>show view>other>svn repository y en la ventana de svn repository pinchamos con el boton derecho y seleccionamos newrepositorio location.
Metemos nuestra direccion de blogger url=https://nombreblogger.googlecode.com/svn/trunk/ usuario=usuario gmail sin el @gmail.com y la clave generada anteriormente.

Ya tenemos todo listo para poder subir nuestro proyecto a nuestro blogger y para ello pinchamos en el proyecto que queramos subir con el boton derecho,elegimos Team>Share Proyect.
Si queramos bajarnos los archivos o modificaciones del subversion a nuestro equipo: botón derecho>team>update.
Cada vez que queramos nuestro código al subversion: botón derecho>team>commit

lunes, 28 de enero de 2008

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace.

Sobreescritura de métodos

La sobreescritura de métodos se utiliza para reutilizar código ya existente.
Es utilizar el mismo método,nombre,retorno etc pero dando un código diferente dependiendo de los objetos de clase que los utilice.

Ejemplo:
Tenemos 3 clases:
Una es Circulo otra es Cuadrado y una tercera que es Dibujo que esta contiene el método dibujar();

La clase Circulo si utiliza el método dibujar() el resultado será diferente al que dé cuando ese método es utilizado por la clase Cuadrado,pero ambos están llamando al mismo método.

viernes, 25 de enero de 2008

Comunicación entre objetos

Esto es para toda la vida.
Para que un objeto hable con otro uno de ellos tiene que ser una propiedad del otro

Entreprise JavaBeans

No hay que confundir los Enterprise JavaBeans con los JavaBeans.

Con la tecnología J2EE Enterprise JavaBeans es posible desarrollar componentes (enterprise beans) que luego puedes reutilizar y ensamblar en distintas aplicaciones que tengas que hacer para la empresa.

Con estos componentes es posible reutilizar en mayor nivel de funcionalidades e incluso es posible modificar estas funcionalidades y adaptarlas a cada entorno de trabajo particular sin tocar el código del componente desarrollado.

Un componente es un objeto tradicional con un conjunto de servicios adicionales soportados en tiempo de ejecución por el contenedor de componentes.
El contenedor de componentes se denomina contenedor EJB y es algo así como el sistema operativo en el que éstos residen.

Un EJB a través de un "EJB Container" ofrece varios servicios y funcionalidades :
  • Servicios

  • División de Trabajo

  • Diversos Vendedores

  • Procedimientos Remotos ( RMI )

  • Diversos Clientes


Tipode EJB

  • Session EJB's :Stateless (Session) EJB's y Statefull (Session) EJB's.

  • Entity EJB's :(Entity) Bean Managed Persistence y (Entity) Container Managed Persistence.

Representación de alto nivel del funcionamiento de los enterprise beans.

Para más información click en este enlace


J2EE

Son las siglas de Java 2 Enterprise Edition.

Define un estándar para el desarrollo de aplicaciones empresariales multicapa.
J2EE simplifica las aplicaciones empresariales basándolas en componentes modulares ,estandarizando la aplicación sin necesidad de una programación compleja.

Interceptores

Los interceptores son como filtros.
Son métodos de la clase Interceptor que se disparan antes de ejecutar la función especificada por el usuario pudiendo comprobar (o hacer) cualquier cosa antes de realizarse la función que el Interceptor intercepta.

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.

Todos los interceptores deben implementar el interface Interceptor que básicamente tiene 3 métodos, init, destroy e intercept.

EasyMock

A mi poco entender,he cogido algo de idea ,que lo mismo esta equivocada.
EasyMock se puede utilizar con Junit o TestNG, en un entorno de pruebas, o incluso si se le echa imaginación se puede utilizar en la aplicación, es decir, en el src.
El EasyMock trabaja siempre con interfaces.

Por ejemplo, si queremos probar si un cliente esta o no registrado en la ase de datos.

@Test
public void pruebaRegistroUsuario(){
ControladorEvento controlador= new ControladorEvento();
Cliente cliente=new Cliente();
String usuario="usuario";
String clave="clave";
ServicioRegistro servicioRegistroMock=EasyMock.createMock(ServicioRegistro.class);
EasyMock.reset(servicioRegistroMock);//lo ponemos a cero
EasyMock.expect(servicioRegistroMock.registroUsuario(usuario,clave)).andReturn(cliente);
EasyMock.replay(servicioRegistroMock);
controlador.servicioRegistro=servicioRegistroMock;//para q se comuniquen entre controlador y servicio
controlador.servicioRegistro(usuario,clave);
EasyMock.verify(servicioRegistroMock);
}

TestNG

Se utiliza para realizar pruebas de clases y métodos.
Podemos usar anotaciones para introducir información sobre las clases y métodos que vamos a testear.

Programación orientada a objetos (OOP)

En la programación orientada a objetos se basa en interacciones de objeto tal como dice su nombre, para la realización de programas y aplicaciones.

Esta programación utiliza varias técnicas tales como la herencia,el poliformismo,la encapsulación.
La utilización de obtejos hace que los programas sean más fáciles de escribir,utilizar y mantener.

Para verlo mejor vamos hacer un ejemplo:

Tenemos una clase Coche con sus atributos color y su método pintarCoche();
Después tenemos otra clase Mecánico y si queremos acceder a los atributos o métodos de la clase coche,instanciamos un objeto que se hace de esta forma:
Coche c=new Coche();
Y ahora con c podemos acceder a los métodos y atributos de coche:
c.color="amarillo";
c.pintarCoche();

Esto es una manera sencilla de explicar más o menos lo que son los objetos

Interfaces y clases Abstractas

La primera vez que di las interfaces y las clases abstractas me hice un pequeño lio,pues en un primer "vistazo" parecen iguales.
Para remediar este problema me hice un esquema:

Interface --> es simplemente una lista de métodos no implementados(el método definido sin código), además puede incluir la declaración de constantes.
Clase Abstractas --> puede incluir métodos implementados y no implementados o abstractos, miembros dato constantes y otros no constantes.

Ninguna de las dos se puede instanciar.
Una clase puede implementar varias interfaces pero solo una clase abstracta.

Ejemplo:

public class Prueba extends Abstracta implements Interface1,Interface2,Interface3{
}

Refactorización

Cambio realizado a la estructura interna del software para hacerlo más fácil de comprender y más fácil de modificar sin cambiar su comportamiento observable.
Se refactoriza:
1.Para mejorar su diseño
  • a. Conforme se modifica, el software pierde su estructura.
  • b. Eliminar código duplicado simplificar su mantenimiento.
2. Para hacerlo más fácil de entender
  • p.ej. La legibilidad del código facilita su mantenimiento
3. Para encontrar errores
  • p.ej. Al reorganizar un programa, se pueden apreciar con mayor facilidad las suposiciones que hayamos podido hacer.
4. Para programar más rápido