jueves, 31 de enero de 2008
Tomcat
Para más información ver esta web Todo sobre Tomcat
miércoles, 30 de enero de 2008
Programación orienta a aspectos (AOP)
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)
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
Caja Negra y Caja Blanca
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
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
Polimorfismo
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 )
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
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
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
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
Para que un objeto hable con otro uno de ellos tiene que ser una propiedad del otro
Entreprise 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
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
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
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
Podemos usar anotaciones para introducir información sobre las clases y métodos que vamos a testear.
Programación orientada a objetos (OOP)
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
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
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.
- p.ej. La legibilidad del código facilita su mantenimiento
- p.ej. Al reorganizar un programa, se pueden apreciar con mayor facilidad las suposiciones que hayamos podido hacer.