domingo, 7 de diciembre de 2008

Configurar ejemplos de seam para testng - Running integration tests from the TestNG Eclipse Plugin

http://www.seamframework.org/Community/GettingStartedDevelopingTheSeamFramework#H-RunningIntegrationTestsFromTheTestNGEclipsePlugin

En el archivo Readme.txt no se especifica las librerias que hay que adjuntar al path, así que es imposible hacerlo con esas instrucciones, sin embargo en el link de arriba viene todo OK!

jueves, 4 de diciembre de 2008

Libro EJB 3.0 aconsejable

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

me lo acabo de comprar porque está en español y me ha parecido muy claro y muy practico, además en la versión 3 de EJB

martes, 2 de diciembre de 2008

Introduccion a Web Beans

Con este framework de desarrollo web J2EE nos encontramos con estos ineludibles conceptos:

  • Componente
  • Contexto
  • Inyección de dependencias (hay ciertos componentes que por su naturaleza no son inyectables por ejemplo MDBs o ¿Singletons? )
  • Eventos y escuchadores de eventos (listeners)
  • Interceptores
  • Decoradores (decorator): tipo especial de interceptor
  • Ciclo de vida
Algunos de estos conceptos coinciden con el SeamFrameWork, ya que el director de desarrollo es el mismo: Gavin King. En realidad creo que el único concepto diferente es el Decorator, del que hablaré más adelante. Igualmente aporta a la herramienta Seam el menor apoyo en Strings para referirse a clases u objetos de la aplicación, es decir es más "typesafe".

Los Web Beans se aplican a JavaBeans, EJBs y Servlets, aunque el framework está preparado para integrarse con "cualquier cosa".

¿qué es un web bean?
Características:
  • scope ---> contexto ( dependiendo del tipo pueden conservar el estado o ser sin estado [statefull - stateless] )
  • a deployment type ---> un tipo de despliegue
  • API types, propiedades
  • annotation types, anotaciones de esas propiedades
  • name (optional)- un nombre (opcional)
  • interceptor binding types - los interceptores del web bean, se indica con la anotación @Interceptors(xxx.class) o a través de la anotación propia del interceptor
  • implementation - implementación
Scope:
Al definir el scope o contexto estamos repercutiendo en el ciclo de vida (lifecycle) del web bean. Stateless beans no guardan el estado mientras que Statefull si lo mantienen. Con el scope también determinamos la visibilidad de bean, ya que los beans de Session @SessionScoped verán a los de su mismo contexto, es decir @SessionScoped


Deployment type:
Al indicar el tipo de despliegue, que por defecto es @Production, podemos separar los escenarios donde viviran dichos beans de @Mock (pruebas), @Staging o @EscenarioGestorCursos.
En función del despliegue, el gestor de beans (Manager) inyectará un bean u otro.



Web Beans Vs Enterprise Web Beans
Razones para elegir Enterprise Web Beans:
  • configuración de transacciones y seguridad a nivel de métodos (no de clase)
  • gestión de la concurrencia
  • pooling de stateless components o (pasivación y activación) mantener estado de statefull components
  • RMI y WebServices
  • Timer y metodos asíncronos
Si no necesitamos lo anterior un Web Bean servirá perfectamente.
Para convertir un Web Bean en un Enterprise Web Bean unicamente añadiremos: @Stateless,
@Stateful or @Singleton.

Producer methods - Metodos Productores
Son métodos que ejecuta el contenedor de Web Beans, es decir: el Manager, cuando crea una instancia de Web Bean. Generalmente los fines de estos métodos es inyectar valores (Web Beans) en contextos de la aplicación, y por tanto que sean visibles a otros Web Beans del mismo contexto.

Es muy interesante el ejemplo que trae el tutorial, al inyectar la conexión de la base de datos en el contexto de request, para de esa forma asegurarnos que la conexión se destruye después de el evento de tipo request.

@Produces @RequestScoped Connection connect(User user) {
return createConnection( user.getId(), user.getPassword() );
}




Inyección de Dependencias

3 tipos de inyección:
  • en el método constructor @Initializer public Checkout(ShoppingCart cart) {...}
  • en el método setter de la propiedad correspondiente: @Initializer void setShoppingCart(ShoppingCart cart)
  • directamente en la propiedad: private @Current ShoppingCart cart;
La inyección se produce en alguna de las fases de la instanciación por parte del Web Bean Manager, pero siempre durante la instanciación. (al acabar la instanciación y la inyección se hace una llamada al método [si existe] anotado con @PostConstruct)

... voy por Binding Annotations... capitulo 3.1 ... mañana sigo!







Videos de presentacion de aplicaciones con RUBY

http://rubyconf2008.confreaks.com/

Ejemplo de seam con maven

Ejemplo booking de seamframework mavenizado y funciona!

http://www.jboss.org/community/docs/DOC-10763

lunes, 1 de diciembre de 2008

webdriver - herramienta de desarrollo para la automatizacion de test de aplicaciones web

Mockito - Nueva generacion de easymock

Otra noticia: para hacer pruebas de caja blanca acaba de aparecer esta herramienta Mockito que promete mejorar EasyMock y Jmock

http://code.google.com/p/mockito/
http://www.infoq.com/news/2008/09/mockito-1.5

FEST - Pruebas a aplicaciones Swing

aquí un tutorial de FEST: http://www.javaworld.com/javaworld/jw-07-2007/jw-07-fest.html

homepage:
http://code.google.com/p/fest/

Selenium web application testing

Es un pluging de Firefox para automatizar pruebas de web evitando el tipico proceso de abrir web, click en enlace, introducir valor en formulario, comprobar resultado .... es decir una herramienta que evita que el desarrollador se deprima!

web: http://selenium.seleniumhq.org/

Jbehave- 2 parte

El objetivo es que el desarrollo se centre en el estudio de los comportamientos de un programa (BDD) en vez de sus salidas (TDD)

En un test de comportamientos existen como minimo 3 archivos:

  • un fichero de texto con una forma estandarizada con la descricpción del comportamiento
  • una clase java que hereda de Scenario y que cumple el rol de describir el escenario
  • una clase java que herada de Steps y que cumple el rol de describir los pasos del comportamiento


Con JBehave primero tenemos que escribir (y guardar) un fichero de texto con la descripcion del comportamiento esperado (Give, When, Then ). El nombre del fichero tiene que coincidir con el nombre de la clase que cumple el rol de Scenario. En el constructor del scenario se le pasa el objeto de tipo Steps (que su clase padre es de tipo Steps) en el que se implementan los metodos que se corresponden con la descripción del comportamiento. Se utiliza anotaciones para identificar dichos metodos con el paso correspondiente del comportamiento especificado en el fichero de texto


repositorio con ejemplo de logging muy simplificado:
http://code.google.com/p/ceacea/source/browse/trunk/jbehave/src/logging?spec=svn26&r=26

librerias necesarias:
  • junit-4.4.jar
  • jbehave-core-2.2-SNAPSHOT.jar





http://www.ibm.com/developerworks/java/library/j-cq09187/index.html?ca=dgr-lnxw9djbehavetdd&S_TACT=105AGX59&S_CMP=GR

el comportamiento se puede entender como un condicional: If, And, Then en vez de Give, When, Then para que resulte más familiar al desarrollador

JIVE o debugging hacia atras

A primera vista para un desarrollador java, JIVE es una herramienta para eclipse para hacer debugging hacia atras y hacia delante. Según su web: JIVE es un espacio interactivo de ejecución de programas para eclipse que proporciona un acercamiento declarativo y visual en la depuración de un programa orientado a objetos. Puede ser usado con fines pedagogicos ...

http://www.eclipsecon.org/2008/?page=sub/&id=444

http://www.cse.buffalo.edu/jive/