martes, 5 de mayo de 2009

Último Día, 60: Evaluación

Para poner condiciones usando las el conjunto #{} para mostrar valores en las vistas (JSF).
Un ejemplo sería el siguiente, que dependiendo si se está logueado o no aparecerá rojo o verde:
style:"color:#{(identity.loggedIn)?'rojo':'verde'}"


Despedida
Hoy ya es el último día en todos este tiempo en el que he estado en la "verdadera" programación en java y más dificil. Podría decirse que ya tengo una cierta base y más con la ayuda de mi propio blog que usaré como apuntes, pero el auténtico reto es la realidad, en el mundo laboral con las prácticas en empresa y con suerte colocarme en ellas.
Espero tener suerte y también para mis compañeros de curso.
Y sobre el blog.. espero poder mejorar las entradas de aquí en adelante y terminar las incompletas.


Por último, como hemos completado un curso (en realidad sólo la teoría) en nuestro currículum podemos ampliar la información que hemos asimilado en estos meses y para ello tenemos lo siguiente:

Systemas operativos:Windows
Lenguajes de programación:Java J2EE
Bases de datos: MySQL. Utilizo habitualmente Hibernate para mapeo O-R.
Programación Web: CSS

IDE's: Eclipse. Plugins de eclipse: subclipse(subversion), testng, jboss, m2eclipse(maven)
Servidores Web: Tomcat y Jetty
Servidores de aplicaciones: JBoss
Frameworks de desarrollo web en java: Servlets, JSP, JSTL, Struts, SpringFramework, JBoss Seam, JSF, EJB

Frameworks de pruebas: TestNG, Mockito

Herramientas de automatización y estandarización en el desarrollo: Ant, Maven, Subversion, log4j, commons-logging


Contenido del master en java j2se y j2ee
Desarrollo de Componentes Web Con Tecnología Java (84 Horas)
  • Introducción al desarrollo de Aplicaciones Web con Java
  • introducción al Control de Versiones utilizando la herramienta Subversion
  • introducción a la POO (Programación Orientada a Objetos) a través del estudio del framework de colecciones de java y su comprobación a través de pruebas con testNG
  • introducción a las excepciones, su diseño y su gestión en un programa
  • introducción al seguimiento del programa por consola (logging) y configuración. Uso de la herramienta Log de la librería commons-logging y log4j de Apache
  • introducción a Apache ANT: herramienta de automatización de tareas en el desarrollo
  • introducción al api jdbc: Java Data Base Connectivity
  • profundización en el uso y creación de anotaciones
  • introducción a la herramienta MAVEN: herramienta de estandarización del desarrollo (automatización de tareas) en proyectos java, destacando la gestión de dependencias
  • servidores web
  • desarrollo de servlets modelo 1 :listeners, filters, servlets
  • introducción a JSP - Java Server Pages. Modelo 2 de desarrollo con Servlets
  • introducción a JSTL - Java Standar Tag Library
  • introducción al patrón de desarrollo Controlador Frontal
  • introducción al patrón de desarrollo MVC - Modelo Vista Controlador

Desarrollo de Aplicaciones J2EE (56,50 Horas)
  • Arquitectura J2EE.
  • servidores de aplicaciones
  • introducción a Struts 1
  • introducción a EL - Expression Language
  • introducción a la internacionalización de aplicaciones
  • introducción a SiteMesh - Patrón Filtro Decorador
  • introducción a Hibernate "con XML"
  • introducción a Spring
  • introducción a DI - Inyección de Dependencias
  • introducción a JSF Java Server Faces

Acceso a Base de Datos. Hibernate (42 Horas)
  • Persistencia de Objetos
  • Configuración de Hibernate
  • Introducción a un proyecto con Hibernate
  • API
  • Propiedades De Hibernate
  • HQL - Hibernate Query Language
  • Hibernate Criteria Query
  • Persistencia De Colecciones

Desarrollo Aplicaciones De Negocio Enterprise JavaBeans (73,50 Horas)
  • Análisis de los componentes EJB
    • Session Beans.
      • stateless
      • statefull
    • Entity Beans.
    • MDB.
  • ciclo de vida y contextos de EJB
  • Uso del lenguaje de consulta de EJB (EJB QL)
  • Implementación de transacciones
  • Manejo de excepciones
  • Implementación de la seguridad
  • introducción a JBoss Seam como herramienta de integración de JSF y EJB


lunes, 4 de mayo de 2009

Día 59: ANT y Ejemplos JBoss-seam

Instalar ejemplos del seam

Abrir el documento "seam_reference.pdf" para tenerlo de referencia.
Mirar el capítulo 1 para lanzar los ejemplos.
Crear un proyecto de la fuente del jboss seam "jboss-seam-2.1.1.GA" para tener todo el código fuente de los ejemplos a mano.

Ejemplo 1
Desplegar el ejemplo registration
Configuraremos las propiedades del ANT

Desplegamos la carpeta "examples" y dentro el "registration" para acceder al archivo "build.xml" (o control+mayuscula+r y buscamos build.xml), aunque en realidad lo mejor es abrir el plugin de ANT (window>show view>Ant) y arrastrar el archivo a él. Trabaja también con el build.xml principal contenido el build y también utiliza un archivo properties.
El archivo "default.build.properties" contenido en el "build". Modificamos la propiedad jboss.home y le indicamos donde tenemos nuestro servidor (en mi caso: C:\Documents and Settings\javaape\Escritorio\JAVA\servers\jboss-4.2.3.GA )
(Si quisieramos arrancar el método principal del ANT nos iriamos a la carpeta del build.xml por consola y escribir "ant deploy".)
Hacemos doble click en el método principal y debería funcionar todo.
Arrancamos el servidor jboss.
Accedemos a la página "http://localhost:8080/seam-registration/register.seam" y debería ir.

Los JSF tienen el faces-config.xml
Los JPA tienen el persistence.xml
Y Los The Seam component deployment descriptor el components.xml

Ejemplo 2
Ahora desplegaremos el blog, hacemos como antes:
"Tiramos" el build.xml a la vista del ANT y arrancamos el método deploy.
Y si tenemos el jboss ya arrancado directamente podemos acceder ya al ejemplo: "http://localhost:8080/seam-blog/"
Una vez accedido a la página vamos "bicheando" un poco sobre su funcionamiento mirando sus clases java y sus archivos de configuración.

Sobre el ANT
Si se desarrolla lo ideal es hacer un explode, para que los cambios se guarden, pero si queremos lanzarlo tenemos que deshacer el explode y hacer un deploy.

Ejemplo 3
Desplegamos el ejemplo "booking" y los mismos pasos que antes.
Para acceder a él: "http://localhost:8080/seam-booking/home.seam"
Aqui se pueden ver y retomar conversaciones, por ejemplo si se está mirando en una pestaña un hotel y en otra pestaña otro hotel y podemos elegir entre los dos.


El resto del tiempo de hoy lo dedicamos de forma libre: a continuar con el proyecto que teniamos entre manos antes de feria.. o investigar un poco estos ejemplos del jboss y tocarlos.

Consejo:Para los tipos de datos que estamos más acostumbrados, String, Objeto X, Objeto Y, usamos los métodos "getLoQueSea" o su "set" pero para los tipos primitivos de datos, por ejemplo un booleano, se debe de usar "isAlgo"

viernes, 24 de abril de 2009

Día 58: EJB y JSF (16ªP) / JBoss-Seam (9ºP)

En la página del login el seam ya tiene preinstalado unos componentes. Los campos de texto usa "credentials" y el chekbox y el botón de "Identity".
Identity es de sesión
Credentials es de evento


@Out



Consejos:
Los EntityManager no funcionará nunca si una clase no es un EJB


---Entrada incompleta---

jueves, 23 de abril de 2009

Día 57: EJB y JSF (15ªP) / JBoss-Seam (8ºP)

Proyecto final del curso
Hoy comenzamos con el plan del proyecto para la evaluación del curso.

El proyecto consiste en los ejercicios que hemos ido haciendo ultimamente desde hace una semana y pico, pero mejorarlos para que:

Componentes obligatorios:
  • Menu de navegación
  • Mensajes a usuarios
  • Login de consola
  • Gestion de excepciones
  • Consultas JPQL
  • Edición de entidades
Todo esto en las horas de clase, que incluyendo las de hoy hacen un total de 24h.

miércoles, 22 de abril de 2009

Día 56: EJB y JSF (14ªP) / JBoss-Seam (7ºP)

Hoy repasamos los interceptores que dimos el lunes y despues terminamos el ejercicio pendiente.
Sobre todo mirar página 174 del pdf "seam_reference"


Los interceptores sirve por ejemplo para:
La seguridad
Para las estadisticas
Para el Logging

(grafico del cuaderno del dia 56)
En la clase A se crea por ejemplo:

Coche coche = new Coche();
Usuario usuario = new Usuario();
usuario.setCoche(coche);
usuario.arranca();

Un objeto (A) envia un mensaje a otro objeto (B)

Primero crear objeto tipo estadistica. Tiene un objeto tipo disco
despues un objeto disco, la relacion entre ellos es N en estadisticas y en disco 1. Tiene una lista de estadisticas.




lunes, 20 de abril de 2009

Día 55: EJB y JSF (13ªP) / JBoss-Seam (6ºP)

Hoy vamos a realizar una modificación a lo que hemos hecho ya antes y que ahora una entidad tambien cumpla la función de un ejb.



Invocacion = llamar a un método


Mirar página 174 del manual del seam "seam_reference.pdf"


Crear una anotacion.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Interceptors(Espia.class)
public @interface EspiaAnotacion {

}

Si la clase espia detecta que el usuario no esta logueado lo redigirá a la pagina del login.

import org.jboss.seam.Component;
import org.jboss.seam.security.Identity;
Identity identity = (Identity) Component.getInstance("org.jboss.seam.security.identity");
boolean isloggedIn = identity.hasRole("admin");


viernes, 17 de abril de 2009

Día 54: EJB y JSF (12ªP) / JBoss-Seam (5ºP)


Ejercicio1
El objetivo del ejercicio de ahora es, que modificando el ejercicio de ayer, que el enlace de edición vaya a una acción de un ejb y que esa acción rellene un objeto de tipo Disco gracias a un componente, una clase, que hemos creado que se enlaza a la lista, y que nos rediriga a la página de edición simplemente llamando a su url, sin ninguna acción más ya que el disco ya lo tiene.
  • Duplicamos los bean (y sus interfaces): ListaDiscoBean y EditaDiscoBean y en los xhtml igualmente pero en el de lista de disco quitamos el parametro al s:link, o mejor dicho... quitamos el s:link completo y usamos mejor un h:commandButton o un h:commandLink con la acción redirigiendola a "EditaDiscoBean2"
  • Creamos una clase java, que se llame "MiComponente" con una anotación anteponiendo la clase: "@Name("miComp")".
    Le añadimos como atributo: "HtmlDataTable tabla" con sus métodos getter y setter y creamos su método principal:
    public String selecciona(){
    Object o = tabla.getRowData();
    Disco d =(Disco) o;
    return null;
    }
  • Creamos ahora el ejb con la acción que estaba enlazada la lista con el "editar"
    Lo nuevo en esta clase es que hay un objeto del tipo componente que hemos creado antes y con una anotación que lo hace dependiente:
    @In(value="miComp",create=true)
    MiComponente miComponente;

    Y su método principal:
    public String selecciona(){
    disco=(Disco) miComponente.getTabla().getRowData();
    System.out.println(">>>>>>>>>Nombre del disco: "+disco.getNombre()+"!!!!!!!!!!!!!!!!!!");
    return "/editaDisco2.xhtml";
    }

    El return puede devolver directamente la url o podria devolver un valor y poner una regla de navegación en el "pages.xml"
  • Para que a la hora de probar los enlaces la consola no se nos vaya disparada por las consultas sql que se nos muestra editaremos el archivo "persistence.xml" usando el buscador de archivos del eclipse y editamos la propiedad "hibernate.show_sql" a false

Ejercicio2
El objetivo de este segundo ejercicio es el de hacer lo mismo pero con las clases que creamos hace unos dias, específicamente con la clase "Cliente"
Hacer una lista de clientes, que haya un enlace y que se pueda editar.
Como "novedad" usaremos el mismo componente, así que simplemente duplicamos los métodos que nos hagan falta pero para la clase Cliente

Pseudo-Ejercicio3
Bueno, esto es ya a modo personal, no me enteré bien en su día y no lo llegé a hacer pero hoy si me he enterado y lo he hecho.
El objetivo del ejercicio es que a la hora de editar un disco también aparezca un menú desplegable para cambiarle su autor y que se guarde.
Podemos cojer el ejercicio 1 de hoy y mejorarlo con esto.
  • La clase "ListaDiscosBean2":
    • Añadir un nuevo Query en el método de carga que seleccione todos los cantantes.
    • Añadir también una lista de cantantes y su método getter y "subirlo" a la interfaz.
  • La página "listaDiscos2.xhtml":
    • Añadir a la tabla una columna nueva para ver el nombre del cantante (para comprobar que se ha guardado): #{d.cantante.nombre}
  • La página "editaDisco2.xhtml"
    • Añadir el select teniendo cuidado al nombre de la variable que le pongamos para mostrar la lista.
    • Primer nivel// h:selectOneMenu value="#{editaDisco2.disco.cantante}" required="true"
    • Segundo nivel// s:selectItems value="#{listaDiscos2.listaCant} var="_cantante" label="#{_cantante.nombre}" noselectionlabel="#{Selecciona cantante}" \\ cierre
    • Segundo nivel// s:convertEntity \\ cierre
    • \\cierre del primer nivel
  • En la clase persistente "Cantante" añadir el Hashcode y el equals


Consejo:
No nos olvidemos del atajo de eclipse: Control+Shift+R para buscar un archivo que no sepamos donde está!!!