sábado, 28 de junio de 2008

Drupal 6.0. No es J2EE pero me gusta.

Bueno llevaba tiempo detras de volcarme un poco en algo CMS para hacer webs mas o menos profesionales, y me he topado con DRUPAL. Despues de probar con Joomla, PhPNuke, y algunos mas que no recuerdo ninguno me habia convencido o motivado lo suficiente.

Parece que Drupal si, o sera que ahora estoy mas inspirado .....

Bueno pues a medida que vaya experimentando con este gestor de contenidos que por cierto es bastante potente ire plasmando aqui mis conocimientos adquiridos.

Para el que vaya interesandole por aqui e empezado yo.

http://drupal.org.es/drupal/descargas

martes, 27 de mayo de 2008

Un poco de repaso...

Contenedor WEB

Es donde residen los servlets y las pages JSP.

Contenedor EJB

Alojan los EJBs que estan directamente relacionados con los Modelos de datos del negocio.

Aplicaciones J2EE

- Primero fue el Servlet. El servlet recibía peticiones Http y este las procesaba en su metodo:
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)

donde los parámetros request y response tomaban la manija de las transacciones y desde este modulo se desarrollaba la lógica de negocio necesaria para implementar la solución que deseáramos obtener ya fuera conectando con una BD o simplemente realizando algún algoritmo de tratamiento de datos.
Normalmente estos Servlets son clases Java que extienden de CommoAction y su nombre suele ser por convenio MiClaseAction.java este se declaraba como un servlet por ejemplo en el Struts-config.xml y al desplegar la aplicación en el Servidor ya estabamos preparado para escuchar peticiones a través de su metodo execute. Por supuesto que ese Struts-config estará declarado a su vez en el WEB.XML que nunca debe faltar en una aplicación WEB J2EE.

lunes, 4 de febrero de 2008

Spring Framework y los Idiomas.

Ya empiezo a ir conociendo mas cosas acerca de Spring.

Para el tema de los idiomas existen uno ficheros de configuracion que funcionan a modo de clave - valor esos ficheros son:
  • messages.properties (es que fichero por defecto )
  • messages_en.properties (seria el fichero de ingles)
  • messages_es.properties (es el fichero en español)
Estos fichero se localizan en src/main/resources

Luego para incluir la entradas en nuestros JSP hemos de poner la etiqueta
webapp.name"/> donde webapp.name sera una entrada de nuestros ficheros de configuracion y dependiendo del idioma de nuestro navegador leera el archivo message_xx.properties correspondiente y cambiara webapp.name por su valor.

Tambien se podrian hacer subdivisiones locales por ejemplo español de peru seria

message_es_PE.properties


Problemas con el plugin de Maven & Eclipse.

Bueno llevo toda la mañana intentando instala el plugin y nada siempre me sale el mismo error, que me falta el plugin org.eclipse.jdt.source, el caso es lo busco y ese plugin no existe he encontrado otros de org.eclipse.jdt pero ese no.

Os dejo un tutorial muy bueno por si quereis ir mirando algo, este es de otro plugin para Maven & Eclipse pero tiene buena pinta.

domingo, 3 de febrero de 2008

¡¡¡Maven en 5 minutos!!! ¿Es posible eso?




Lo primero que creo que tengo que saber es ¿Que es MAVEN?

De momento lo que he sacado en claro es que es una una herramienta que al menos de momento no dispone de interface grafica, es decir todo o casi todo se ha de hacer desde la linea de comandos.

Maven es una herramienta que mediante comandos es capaz de construir una estructura de directorios para nuestro proyecto con sitio para los fuentes, los iconos, ficheros de configuración y datos, etc. Si le indicamos los jar externos va a internet los busca y si los encuentra los descarga a nuestro proyecto, tambien es capaz de compilar, borrar los class, generarnos el javadoc, crea documentos webs con informes variados como codigo duplicado, tambien si lo deseamos nos genera un zip con la estructura de nuestro proyecto para su distribucion, etc....

Bueno me voy a dejar de lios y me pongo a instalarlo a ver si es tan sencillo, bueno, guapo, etc..., como dicen.

  1. Como todos los soft lo primero es descargalo desde aqui (Maven).
  2. Ahora descomprimimos el contenido del zip y añadimos la ruta a la variable PATH de nuestro SO poniendo al final \bin.
  3. Para comprobar que hemos configurado bien el PATH abrimos una ventana de comandos y tecleamos mvn --version Ooohhhh me ha fallado, me dice que he de crear la variable de entorno JAVA_HOME con la ruta de mi jdk. Pues la crearemos. Tecleo otra vez mvn --version y ahora si me sale en pantalla la version que tengo de maven, la del jdk y el SO que tenemos.
  4. Ahora he tecleado "mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app" y se ha puesto a descargar plugins, jar y archivos actualizados.
  5. Pasado un tiempo que dependera de la conexion a internet que tengas, a mi me ha tardado 1 minuto, te dice que ha creado el directorio c:\my-app y BUILD SUCCESSFUL, si no es asi teclea de nuevo la linea de arriba.
  6. Ahora comprobamos que se nos ha creado una estructura como la de la imagen. Vemos que el path src/main/java es el que contendra nuestro codigo fuente de la aplicacion, src/test/java sera el path de las clases de test y el fichero pom.xml que es el centro de nuestro proyecto Maven y poco a poco lo ire entiendo y al mismo tiempo comentandolo por aqui.
  7. Hemos tecleado un goal que es como se le llaman a las funciones que vamos realizando con Maven archetype:create y ademas le hemos pasado unos parametros
    -DgroupId=com.mycompany.app -DartifactId=my-app y nos ha creado el proyecto my-app con una estructura estandar, tambien tendremos goal y plugins mediante los cuales se nos crearan proyectos base a partir de distintos frameworks como puede ser JBoss
  8. Ahora para construir el proyecto tecleo mvn package y me vuelve a descargar dependencias de internet y finalmente me dice que todo OK.
  9. Para probar que todo ha ido bien tecleo java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App y sale por pantalla el tipico "Hello World".

Y hasta aqui el Maven en 5 minutos que a mi personalmente me ha parecido un poco escaso ya que he intalado algo que no se aun su verdadera utilidad y me he creado un proyecto con el cual no voy a trabajar, lo siguiente sera o creame un proyecto de prueba o intentar añadir Maven a uno de los proyectos existentes en mi WorkSpace.

rOV

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.