viernes, 18 de abril de 2008

Blogs de referencia

Aquí os dejo las entradas mejores que he visto por vuestros blogs ...
Atención a los comentarios que he realizado sobre las mismas!

las blog muy buenas!
http://www.noelia-java.blogspot.com/

lunes, 25 de febrero de 2008

hibernate join con hql devuelve un List especial!

cuando dentro de una query hql utilizamos el join para relacionar dos o más entidades persistentes, cuando devolvemos el resultado de la busqueda -> list() nos encontramos con un objeto del tipo List especial!, el cual tendremos que recorrerlo para acceder a cada uno de sus elementos


jueves, 21 de febrero de 2008

implementar HashCode y Equals con Eclipse

Atención: señalar la casilla "Use instance of" para que funcione!

martes, 12 de febrero de 2008

Hibernate asociaciones-relaciones

Documentación de configuración de relaciones de entidades en hibernate utilizando xml
http://www.hibernate.org/hib_docs/reference/en/html/associations.html

miércoles, 6 de febrero de 2008

lunes, 4 de febrero de 2008

AppFuse 2.0 Released!

Trabajar con appFuse 2
http://appfuse.org/display/APF/2007/09/18/AppFuse+2.0+Released%21

http://appfuse.org/display/APF/AppFuse+QuickStart

AppFuse i18n (Internationalization)

Para que nuestra aplicación appfuse pueda utilizarse en varios idiomas, tenemos que definir las posibles claves en el archivo /src/main/resources/messages.properties en forma de clave/valor.
Ejemplo:
webapp.name=AppFuse Light

Cada idioma nuevo deberá tener un messages.properties diferente, de forma que si tenemos idioma inglés deberemos tener messages_en.properties, y en español messages_es.properties

Después desde nuestro jsp podemos referenciar dicha clave con el objeto message
fmt:message key="webapp.name" y según la configuración del navegador de usuario que consulte la aplicación (firefox>preferencias>avanzado>general>idiomas>elegir) obtendrá el idioma correspondiente


Toto esto funcionará si nuestro framework está bien configurado, es decir si el archivo /src/main/webapp/WEB-INF/dispatcher-servlet.xml ha declarado el bean:
bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" con el basename=messages

logging en appfuse (spring)

Para imprimir por consola utilizando el Log de apache

  1. Para imprimir por consola utilizando el objeto
    • protected final Log logger = LogFactory.getLog(getClass());
  2. hay que importar en nuestro archivo las siguientes clases:
    • import org.apache.commons.logging.Log;
    • import org.apache.commons.logging.LogFactory;
  3. utilizarlo dentro de nuestro código sustituyendo las lineas
    • System.out.println("mensaje"); por ...
    • logger.debug("userId set to: " + user.getId(); , donde el objeto logger nos permite indicar varios niveles de logging (DEBUG, INFO, WARN, ERROR)
  4. configurar el archivo /src/main/resources/log4.xml para indicarle los niveles que queremos imprimir en consola

Instalar appfuse-light1.8 y utilizar maven y ant

https://appfuse-light.dev.java.net/

  1. leerse el QuickStart de la aplicación
  2. descargar:appfuse-light-all-1.8.1.zip
  3. descomprimir archivo en workspace de eclipse
  4. abrir consola cd en el directorio recien creado (descomprimido)
  5. configurar maven para que trabaje con repositorio de red local
    1. editar archivo /pom.xml sustituir http://download.java.net/maven/2 por http://...
  6. ejecutar: ant new ( cuando solicite el nombre aplicacion insertar el deseado)
  7. Para generar el proyecto de eclipse:
    1. mvn eclipse:eclipse
    2. mvn eclipse:eclipse -DdownloadSources=true
    3. mvn -Declipse.workspace= eclipse:add-maven-repo
  8. Crear un nuevo proyecto de eclipse con el nombre que le hemos indicado en la instalación y con el path al workspace/nombreapp
  9. Preparar el despliegue de la aplicación con el tomcat de nuestro equipo y la conexion a datos(mysql):
    1. editar /build.xml propiedad server.home
    1. editar src/main/resources/jdbc.properties user y password
  10. Utilizar el archivo ant (build.xml) de nuestro proyecto para construir y desplegar
  11. DeployWar

jueves, 31 de enero de 2008

EasyMock es una librería autónoma

Aclaración sobre EasyMock:
EasyMock se puede utilizar con Junit o TestNG, en un entorno de pruebas, o inclusosi se le echa imaginación se puede utilizar en la aplicación es decir en el src

Anotaciones y AOP

Una aclaración sobre las anotaciones en AOP: El AOP se puede aplicar sin anotaciones, en este caso le indicaríamos al "contenedor" las especificaciones relacionadas con los aspectos a través de ficheros XML que tendría que parsear y traducir.
Con las anotaciones queda más claro para el programador, ya que la información relativa a aspectos/interceptores queda en el mismo fichero java, en vez de utilizar otro fichero (XML) situado en otro directorio de la aplicación

En la versión 2 de EJB todo los componentes se marcaban con XML, y toda la aplicación estaba interceptada, es decir se podía aplicar AOP

viernes, 25 de enero de 2008

Los blogs del curso y lo que le parecen al profe!

  • http://cea-jesussubires.blogspot.com/
    • en desarrollo progresivo!
      • hay que seguir trabajando las entradas (con ejemplos en repositorio) para asimilarlas cada día mejor (aunque van bien), me refiero a herencia, easymock ...
      • me gusta que las entradas son cortas pero con lo que hemos dado en clase mejor que largas investigaciones del universo java
  • http://www.noelia-java.blogspot.com/
    • promete!
      • está bien de entradas, y de "inspiración" (intenta personalizar la teoría), cuando acabe el curso este blog promete!
  • http://cea-roberto-roldan.blogspot.com/
    • Muy bien!:
      • la información justa para recordar lo importante de las explicaciones del curso
      • se utilizan los recursos/herramientas de documentación como delicious
      • se aportan enlaces de interes
      • el estilo es distendido
      • claridad en describir lo especial de cada herramienta tratada en el curso
  • http://cea-mariagd.blogspot.com/
    • en buen camino! aunque todavía falta un poquillo ...
      • está más o menos bien lo que hay en el blog, sobre todo el lenguaje utilizado y que se refiere al curso que estamos dando y no al universo frikie de java,wikipedia,...
  • http://cea-manuelperujo.blogspot.com/
    • en camino!
      • creatividad "gráfica" y humor no falta y hay esperanza de que en breve este blog/programador empieze a ver la luz ...
      • hay que intentar personalizar el lenguaje y contarlo con otras palabras, no hace falta intentar explicar el ¿qué es una herramienta? sino el ¿para qué se usa y desde cuándo?
  • http://cea-j2ee-paco.blogspot.com/
    • hay que ponerse las pilas!
  • http://cea-fidelmazo.blogspot.com/
    • En camino!
      • la intención es buena, queda entender un poco más las herramientas y los contextos donde se utilizan las herramientas, que se supone que es el objetivo del curso y vamos por la mitad ...
      • el esfuerzo en concretar con palabras las herramientas del curso tendrá sus resultados ...
  • http://cea-manolobe.blogspot.com/
    • triple pirueta
      • se reconoce el interés en plasmar lo que se desarrolla en clase aunque hay que pulir algunas cosas
      • estilo distendido e intentando teorizar: está muy bien arriesgarse aunque haya que corregir algunos conceptos, (que en teoría para eso está el resto del curso)
  • http://cea-pacogalvez.blogspot.com/
    • Muy bien!, pero ...
      • lenguaje demasiado especializado (en teoría tenía que entenderse por una persona no demasiado docta en la materia)
      • demasiada información relativa a investigación en relación a los ejemplos personalizados de cada herramienta tradada en el curso
  • http://cea-ruben.blogspot.com/
    • Ánimo !
      • falta que utilices el blog para que pongas lo que sabes! sobre todo para extenderse un poquito, los diagramas son un poco "espaciales" no?
      • lo del chorizo engancha!
  • http://cea-elmrabet.blogspot.com/
    • la intención es buena!, pero ...
      • hay que resumir lo que damos en clase!
      • el código java de ejemplo al repositorio, please!
      • faltan algunas entradas ...
  • http://cea-victorortega.blogspot.com/
    • Muy bien!
      • Se nota que se entienden bien los contenidos y las herramientas, solo faltaría un poco más de desarrollo de la información para que otra persona que consulte el blog pueda utilizarlo como documentación (aunque ya casi se podría, ya que la linea es buena), es decir incuir links a otras páginas, recursos, algunos ejemplos más ...
      • genial como archivo de todo lo interesante (ej: ciclo de vida, seam-gen ...) que se dice en el curso
  • http://cea-josedominguez.blogspot.com/
    • un blog camino de resucitar!
      • hay entradas más encaminadas que otras, pero falta información con palabras de andar por casa para explicar conceptos de andar por casa ...
      • easymock y testng ¿cuándo se rellenan los ejemplos ?
      • el repositorio ...
  • http://www.cea-manunuwi.blogspot.com/
    • Muy bien! aunque todavía faltan algunas entradas (hay que currárselo un poco más!)...
      • Genial los inicios de documentación en video sobre refactorización
      • OK la comprensión de herramientas expuestas en el blog
      • Informaciones pequeñas pero claras
  • http://cea-tamara.blogspot.com/
    • que lista (es la wikipedia y derivados)!
      • hay que recontarlo con nuestras palabras! y que sea lo que se trata e clase, hay que intentar hacer resumenes diarios ¿vale?
      • la foto es muy chula!
  • http://cea-raul.blogspot.com/
    • donde hay estilo ...
      • muy bien como acercamiento (personal) a los conceptos fundamentales del java, (aunque ya digo que son personales) . Hay que teorizar para poder acertar, entre tanto el menda intentará corregir
      • falta mucha info eh!

jueves, 24 de enero de 2008

Crear un repositorio en google y acceder desde eclipse

Para utilizar el subversión de google (gratuito!) hay que seguir los siguientes pasos:
  1. entrar en la dirección http://code.google.com/hosting/
  2. click en new proyect
  3. rellenar todos los campos que nos pide el formulario de proyecto nuevo
  4. click en ficha source y desde el apartado command-line access copiamos la dirección https, ej: https://nombreDeNuestroProyecto.googlecode.com/svn/trunk/
  5. hacemos click en googlecode.com password y obtendremos nuestro password
  6. Desde eclipse
    1. menu window>show view>other>svn repository
    2. en la ventana de svn repository botón derecho del ratón y seleccionar nuevo repositorio location.
      • url=https://nombreDeNuestroProyecto.googlecode.com/svn/trunk/
      • usuario=cuentaUsuarioGMAIL (no incluir @gmail.com, solo nombreUsuario)
      • clave=la generada anteriormente en googlecode.com password
    3. para conectar nuestro código con subversion, botón derecho sobre la carpeta de proyecto a controlar>Team>Share Project
    4. Cada vez que queramos subir nuesrtro código al subversion: botón derecho>team>commit
    5. Cuando queramos bajarnos los archivos o modificaciones del subversion a nuestro equipo: botón derecho>team>update

miércoles, 23 de enero de 2008

Gurus

 
http://martinfowler.com/

http://in.relation.to/Bloggers/Gavin

martes, 22 de enero de 2008

http://code.google.com/p/ceaj2ee/

http://code.google.com/p/ceaj2ee/

viernes, 18 de enero de 2008

Interfaces e implementaciónes

En esta entrada se pretende introducir las interfaces desde los siguientes puntos de vista prácticos:


interface Futbolista{
public Balon pasaBalon();
}


interface Bailarin{
public cambiaPareja(Bailarin nuevo);
}

interface Escalador{
public void cambiaRoca();
}

class Persona implements Futbolista, Bailarin, Escalador{

... implementar metodos
}

class Sevillano extends Persona{
... implementar metodos
}

class Suizo extends Persona{
... implementar metodos
}



  1. ¿para qué sirven o qué ventajas aportan?
  • Para aplicar polimorfismo: es decir para que un determinado objeto, en una determinada situación pueda tratarse de una forma u otra. En el ejemplo anterior, si nuestro objeto persona se utiliza en un ámbito relacionado con el futbol, es mejor tratarlo a través de su interface de Futbolista, de esa forma en el ámbito o situación de un programa de futbol, nuestro objeto no mostrará a los otros objetos relacionados sus metodos relacionados con Bailarin o con Escalador.
      • Esto lanzaría error: Futbolista f=new Persona(); f.cambiaPareja(parejaNueva);
    • El polimorfismo se lleva a cabo a través del casting:
      • Persona p=new Persona(); Futbolista f=(Futbolista)p;
  • Para generar código robusto o lo que es lo mismo para proporcionar independencia a los objetos. Esto quiere decir que si cambiamos una clase de nuestro código, el código afectado por ese cambio en teoría debe corresponderse solo a esa clase (y su clase de prueba). Lo contrario a un programa robusto es un programa frágil, es decir aquel que sufre cualquier modificación realizada en alguna de sus partes como si se realizara en todo el sistema.
    • falta incluir diagrama UML!!

Stateful and Stateless (con estado y sin estado )

En el diseño OOP podemos distinguir entre los objetos con [mantenimiento de] estado y sin [mantenimiento de] estado.
El estado se refiere al estado de la información, y la información recaería en las propiedades de nuestros objetos.

En el siguiente ejemplo, creamos un nuevo objeto de la clase Color, y a continuación le asignamos el valor "verde". Este objeto (Stateful) mantiene la información del valor de color en la variable "valor".


public class Color{
String valor;
}

Color color1=new Color();
color1.valor="verde";


Sin embargo en el ejemplo a continuación se muestra un objeto (Stateless) sin estado, es decir no mantiene ninguna información en sus propiedades o atributos, de hecho no tiene propiedades o atributos, únicamente métodos



public class ServicioPintura{
public void cambiaColor(Mesa mesa, Color color){
mesa.setColor(color);
}
}


Los objetos con estado[Stateful] suelen estar relacionados con los objetos que maneja el usuario del programa, y suelen mantener las decisiones(opciones) del usuario durante un proceso o una sesión de uso. Ejemplos de mantenimiento de estado:
  • los diferentes pasos a seguir para registrarse en una página web
  • un carrito de compra
Los objetos sin estado[Stateless ] (generalmente llamados servicios) únicamente operan con los objetos pero no mantienen el estado de los procesos o resultados que generan. Ejemplos de objetos sin estado:
  • petición RSS
  • web services
  • Todos los servicios que veremos en el curso y como el anterior ejemplo: ServicioPintura

jueves, 17 de enero de 2008

Diagramas de secuencia

Introducción a los UML de secuencia
http://www.creangel.com/uml/secuencia.php