viernes, 27 de febrero de 2009

Struts Basico

en repo: struts-basico
probar jetty y comparar con tomcat


en foro, pagina que explica funcionamiento de struts básico

ActionForm, Action,
Navegacion se evalua en función del resultado del controlador (separación de papeles)
i18n

validadación y envío de errores y mensajes a usuario

Etiquetas de struts:





maven con struts: creación de proyectos

Maven y TestNG

Para utilizar el framework de pruebas TestNG con MAVEN hay que incluir un plugin al archivo pom.xml para que quede de esta forma:


<
build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
</configuration>
</plugin>
</plugins>
</build>


Y después añadir la dependencia (la libreria) de TestNG

<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.8</version>
<classifier>jdk15</classifier>
</dependency>



al final el pom.xml tendrá más o menos esta forma.


jueves, 26 de febrero de 2009

Maven Basico Practica

Estructura de directorios de un proyecto maven:


crear un proyecto maven con eclipse


creacion de proyecto/servicio (cada proyecto tendrá solamente una clase en el caso de las implementaciones y una interfaz en el caso de las apis):
  • servicioCalculadoraAPI: contiene interfaz con metodo multiplica 2 long y devuelve String con tipo de moneda
    • servicioCalculadoraImplEuropea
    • servicioCalculadoraImplAmericana
  • servicioTraduccionAPI: contiene interfaz con metodo traduce que recibe una clave: ej: welcome
    • servicioTraduccionAndaluz
    • servicioTraduccionVasco
    • servicioTraduccionCatalan
  • servicioAleatorioAPI: contiene interfaz con metodo que recibe un numero (x) y devuelve un numero aleatorio de 0 a x
    • servicioAleatorioImpl

Creamos una aplicación web (web01) con maven y eclipse y utilizamos las dependencias anteriormente instaladas para su uso desde este proyecto

Creamos otra aplicación web (web02) con maven y eclipse con las mismas dependencias pero la inicialización o instanciación de los servicios los realizamos en listeners de aplicación que activamos o desactivamos selectivamente en el web.xml. Y desde nuestros controladores, unicamente accedemos a estos servicios a través del servletContext.getAttribute("servicioCalculadora") o servletContext.getAttribute("servicioTraduccion")

Maven Basico

Crear un proyecto java básico:
>> cd workspace
>> mvn archetype:create -DgroupId=es.cea -DartifactId=EjemploMaven
>> cd EjemploMaven

http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html


Comandos básicos:
  • >>mvn clean
  • >>mvn compile
  • >>mvn package

Para abrirlo en eclipse
  • >>mvn eclipse:eclipse


Crear un proyecto java web básico:
  • >> cd workspace
  • >> >> mvn archetype:create -DgroupId=es.cea -DartifactId=web00 -DarchetypeArtifactId=maven-archetype-webapp
  • >> cd web00
  • >> mvn tomcat:run-war
  • http://localhost:8080/web00

martes, 24 de febrero de 2009

Proyectos servlet corregidos

Los comentarios/correcciones y evaluaciones en las memorias de los proyectos

PD: parece que tenéis muy buena base de Servlets

lunes, 23 de febrero de 2009

Instalar MAVEN

Instalar maven

(en server/java/apache-maven-2.0.9) o bajarse el zip de maven, desempaquetarlo y poner su directorio bin en el path de busqueda de ejecutables.

En mi caso lo he desempaquetado en C:\, con lo que se me ha creado el directorio C:\maven-2.0.9

Para meter el subdirectorio bin en el path de ejecutables, le doy con el botón derecho del ratón sobre el icono de "Mi PC" y elijo "Propiedades", "Avanzado" y "Variables de Entorno". Busco "Path" y le doy a "Editar". Añado al final ";C:\maven-2.0.9\bin" (con punto y coma delante, para separarlo de lo que ya haya escrito)


En el caso de windows hay que abrir una ventana de comandos nueva después de haber realizado los cambios y para probar que todo va bien, podemos ejecutar

>> mvn --version
Maven version: 2.0.9


>> mvn archetype:create -DgroupId=es.cea -DartifactId=EjemploMaven

Implementacion MYSQL

Wink: documentación en video

Primero instalamos MYSQL y MySQLTools con la ayuda de los videos

SQL: INTRODUCCIÓN
http://es.wikipedia.org/wiki/SQL
tutorial en español:
http://www.desarrolloweb.com/manuales/9/


Java y SQL-> JDBC Java Database Connectivity

http://es.wikipedia.org/wiki/JDBC

Ejemplo:

http://www.chuidiang.com/chuwiki/index.php?title=Conectar_java_con_mysql

http://www.chuidiang.com/java/mysql/mysql-java-basico.php

http://www.chuidiang.com/java/mysql/EjemploJava.php


Instalar proyecto: mysqlcea desde repo (mysql+testng+tdd+maven)


vincular proyectos en eclipse, exportar jar y wars

Implementacion de DaoBibliotecaMYSQL

Pasar a session el DAO y a listener de evento abrir y cerrar conexion!

Incluir un proyecto como dependencia en otro proyecto en eclipse

exportar como jar

viernes, 20 de febrero de 2009

Tutoriales

Tutoriales muy buenos de sun
http://java.sun.com/docs/books/tutorial/index.html

lunes, 16 de febrero de 2009

Libro EJB3 del curso

Titulo: ENTERPRISE JAVABEANS 3.0 CON ECLIPSE Y JBOSS
Editorial: Marcombo
enlace a libro

miércoles, 11 de febrero de 2009

Proyecto Biblioteca MVC

El proyecto biblioteca tendrá los mismos casos de uso que el anterior desarrollado con servlets

El proyecto se desarrollará con las siguientes tecnologías
  • Patrón de desarrollo MVC (Modelo Vista Controlador)
  • Servlets: Listener, Filters, Servlets
  • JSP
  • JSTL (tags implicitos en JSP, tags de JSTL y tags personalizados)
  • Pruebas


Especial atención a:
  • modularización de la vista con uso de la etiqueta jsp:include
  • paquetes separando aspectos/finalidades/roles de las clases java
  • aislamiento de acceso a datos en una sola clase con una interfaz
  • nomenclatura
  • características standars de proyecto web java.

Plazo y forma de desarrollo:
Forma de desarrollo: equipo
Inicio: 12 febrero
Fin: 20febrero (ambos días incluidos!)

Publicación en el mismo repositorio svn de equipo

Total horas por persona: 24 Horas
Total horas por equipo: 24x4= 96 Horas

JSTL: continuacion

http://jakarta.apache.org/taglibs/site/tutorial.html

http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL.html

La etiqueta tag en el tld puede contener las siguientes porpiedades
  • name
  • tagclass: clase java que implementa javax.servlet.jsp.tagext.Tag
  • bodycontent: jsp, tagdependent, empty
  • atributes: los atributos que puede recibir, especificando su name, required y rtexprvalue

Etiquetas implicitas en jsp:

(fuente wikipedia en español)

Son las etiquetas pertenecientes a la especificación JSP. Proporcionan una funcionalidad básica.

Un primer grupo de etiquetas proporciona funcionalidad a nivel de la página de una manera muy simple:

  • * <jsp:forward>, redirige la request a otra URL
  • * <jsp:include>, incluye el texto de un fichero dentro de la página
  • * <jsp:plugin>, descarga un plugin de Java (una applet o un Bean).

Un segundo grupo permite manipular componentes JavaBean sin conocimientos de Java.

  • * <jsp:useBean>, permite manipular un Bean (si no existe, se creará el Bean), especificando su ámbito (scope), la clase y el tipo.
  • * <jsp:getProperty>, obtiene la propiedad especificada de un bean previamente declarado y la escribe en el objeto response.
  • * <jsp:setProperty>, establece el valor de una propiedad de un bean previamente declarado.


libreria de funciones para aplicar en EL JSTL: functions
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL8.html
http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

lunes, 9 de febrero de 2009

JSTL: la especificacion de JSPs trae JSTL

Tag=Etiqueta=Componente Web

JSP = Java Server Pages
JSTL = Java Standard Tag Library

http://jakarta.apache.org/taglibs/site/tutorial.html


Tutorial de SUN: http://java.sun.com/j2ee/1.3/docs/tutorial/doc/JSTL.html

La especificación JSP viene acompañada de la especificación JSTL, cuyo finalidad es no escribir codigo java en la vista (codigo HTML) para seguir utilizando una pseudosintaxis HTML.

proyecto jsps+jstls en repo


Instalación:
  • incluir librerias en WEB-INF/lib incluidas en jakarta-taglibs-standard-1.0.6/lib
  • incluir documentos descriptores de librerías (tlds*) desde jakarta-taglibs-standard-1.0.6/tld hasta nuestroProyecto/WebContent/tld
  • definir en web.xml los tlds que vamos a utilizar en nuestro jsp

Novedades incluidas:



Implicit Objects

The JSTL expression language defines a set of implicit objects:

  • pageContext - the PageContext object
  • pageScope - a Map that maps page-scoped attribute names to their values
  • requestScope - a Map that maps request-scoped attribute names to their values
  • sessionScope - a Map that maps session-scoped attribute names to their values
  • applicationScope - a Map that maps application-scoped attribute names to their values
  • param - a Map that maps parameter names to a single String parameter value (obtained by calling ServletRequest.getParameter(String))
  • paramValues - a Map that maps parameter names to a String[ ] of all values for that parameter (obtained by calling ServletRequest.getParameterValues(String))
  • header - a Map that maps header names to a single String header value (obtained by calling ServletRequest.getheader(String))
  • headerValues - a Map that maps header names to a String[ ] of all values for that parameter (obtained by calling ServletRequest.getHeaders(String))
  • cookie - a Map that maps cookie names to a single Cookie (obtained by calling HttpServletRequest.getCookie(String))
  • initParam - a Map that maps a parameter names to a single String parameter value (obtained by calling ServletRequest.getInitParameter(String))



** el uri es el identificativo: http://code.google.com/p/cursoj2ee/source/detail?r=88





JSTL -> especificación extensible->herencia->etiquetas personalizadas..
pasos a seguir para realizar una etiqueta o librería de etiquetas personalizadas...
  1. crear la clase java que hereda de tag
  2. crear (si no existe el tld) e incluir el tag recien creado
  3. incluir el tld en el web.xml
  4. incluir el tld en el jsp
  5. usar el tag en el jsp
http://groups.google.com/group/eticom-master-java/web/jstl-y-etiquetas-personalizadas-2




ejemplo c:foreach


viernes, 6 de febrero de 2009

Pruebas a colecciones y diseño en capas de una aplicacion

Diseño en capas.

Separación de los diferentes

Comprobar con pruebas, la ordenacion de listas y la utilización de objetos como claves en mapas

jueves, 5 de febrero de 2009

TestNG

intro a tdd e instalación de plugin de eclipse para testNG

Antes de empezar necesitamos...

Directorios source folders simetricos:

src
---es.cea

test
---es.cea

¿cómo instalo la libreria (no el plugin, sino la libreria) de testng?
boton derecho sobre el nombre del proyecto>Build Path>configure build path>pestaña librerias>add external jars>seleccionaren nuestro disco duro: testng-5.8-jdk15.jar

¿dónde me creo la clase de prueba?
En el source folder "test" en el mismo paquete que la clase a probar

¿qué nombre le pongo?
El mismo nombre que la clase a probar más el sufijo "Test". Ejemplo: si voy a probar el ServicioCalendarios me hago la clase ServicioCalendariosTest

¿cómo hago un método de prueba?
Un método de prueba es un método publico que no devuelve nada y que no recibe parametros. Además lleva la anotación @Test, para lo cual hay que importar la clase org.testng.annotations.Test

¿qué escribo dentro del método de prueba?
el escenario de pruebas
la invocación del "programa"
las aserciones/confirmaciones correspondientes

¿cómo lanzo la prueba?
boton derecho sobre la clase en el package explorer> run as...>testng test

Esencial en Proyecto Java

librerías:
  • log4j.jar
  • commons-logging.jar
  • testng.jar

En código:
  • protected final Log logger = LogFactory.getLog(getClass());

Source Folders:
  • src
  • resources
  • test
JavaDoc - documentación:
  • definición de clases
  • métodos y párametros que reciben o devuelven

logging y colecciones

logging
seguir el funcionamiento de nuestro programa en consola con la herramienta:
commons-logging de apache




colecciones

http://groups.google.com/group/eticom-master-java/web/colecciones-de-objetos
http://java.sun.com/j2se/1.4.2/docs/api/java/util/package-summary.html

miércoles, 4 de febrero de 2009

Aplicacion en capas

CONTROLADORES
--------------------
SERVICIOS
--------------------
DAO
--------------------
DATABASE


Aislamos en nuestro proyecto de biblioteca la capa de DAO, es decir todo lo relacionado con la creación, modificación y eliminación de objetos de negocio (libros, autores, generos ...)
Aislar significa centralizar en un paquete y una o varias clases el código correspondiente

JSPs

proyecto de ejemplo de jsps descargable del repositorio del curso en la dirección:
http://code.google.com/p/cursoj2ee/source/browse/trunk/jspEjemplo/



  • imports de clases
  • acceso a aplication
  • acceso a request
  • scripts
  • <%=%>
  • includes
  • ...

POO y Servlets

Programación Orientada a Objetos y Servlets...

  • ¿en que objetos nos apoyamos para realizar el desarrollo de las funcionalidades (a parte de los objetos implicitos del framework y del modelo)?
  • ¿quien invoca los news filters, servlets, listeners?

Proyecto Final Conclusiones:
  • ¿qué logica se ha implementado en los listeners?
  • ¿qué logica se ha implementado en los servlets?
  • ¿qué logica se ha implementado en los filtros?
  • ¿qué tienen en común los objetos almacenados en el SevletContext (setAttribute y getAttribute)?
  • ¿qué tienen en común los objetos almacenados en el Session(setAttribute y getAttribute)?
  • ¿qué tienen en común los objetos almacenados en el Request (setAttribute y getAttribute)?

Refactorizacion:
  • eliminar redundancia
  • mejorar nombres de clases y metodos y parametros
  • encapsular objetos

martes, 3 de febrero de 2009

Controlador Frontal - Front Controller

Patrón controlador Frontal

Patrón Controlador Frontal:
  • que consiste en utilizar un único punto de entrada a cada aplicación. Concretamente, todas las peticiones que realiza el usuario se controlan mediante un único servlet (solo un servlet en web.xml), que se encarga de redirigir las peticiones a los servicios implicados

http://www.programacion.com/java/articulo/corej2ee_patterns/


REPO:
http://code.google.com/p/cursoj2ee/source/browse/trunk/controladorFrontal#controladorFrontal/src

Crear un servicio para calculo de intervalo entre dos fechas

Conversores de datos: Calendar to String, y String to Calendar

A través de TDD generar un ServicioCalendarios que contenga funcionalidad relacionada con fechas y tratamiento de estas, incluyendo la comprobacion del intervalo entre dos fechas (necesario para funcionlidad de reserva en biblioteca)

lunes, 2 de febrero de 2009

TDD: Desarrollo Orientado a Pruebas - Test Driven Development

http://es.wikipedia.org/wiki/Tdd

Pruebas con TestNG

http://testng.org/doc/

instalación de plugin para eclipse

  • Select Help / Software updates / Find and Install.
  • Search for new features to install.
  • New remote site.
  • Enter http://beust.com/eclipse in the URL and whatever description you want.
  • Make sure the check box next to http://beust.com/eclipse is checked and click Next.
  • Eclipse will then guide you through the process.

funcionamiento del plugin para eclipse

http://testng.org/doc/eclipse.html

Ciclo de desarrollo orientado a pruebas:

http://es.wikipedia.org/wiki/Tdd#Ciclo_De_Desarrollo_Conducido_por_Pruebas


Consecuencias del TDD

  • Las pruebas pueden llegar a sustituir a la documentación.