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!
domingo, 7 de diciembre de 2008
Configurar ejemplos de seam para testng - Running integration tests from the TestNG Eclipse Plugin
Publicado por Juan Antonio Ruz en 2:59 0 comentarios
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
Publicado por Juan Antonio Ruz en 5:29 5 comentarios
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
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
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
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;
... voy por Binding Annotations... capitulo 3.1 ... mañana sigo!
Publicado por Juan Antonio Ruz en 12:40 0 comentarios
Categorías: Web Beans
Videos de presentacion de aplicaciones con RUBY
Publicado por Juan Antonio Ruz en 4:08 0 comentarios
Categorías: RUBY
Ejemplo de seam con maven
Ejemplo booking de seamframework mavenizado y funciona!
http://www.jboss.org/community/docs/DOC-10763
Publicado por Juan Antonio Ruz en 3:51 0 comentarios
lunes, 1 de diciembre de 2008
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
Publicado por Juan Antonio Ruz en 4:23 0 comentarios
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/
Publicado por Juan Antonio Ruz en 3:31 0 comentarios
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/
Publicado por Juan Antonio Ruz en 3:20 0 comentarios
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
Publicado por Juan Antonio Ruz en 3:15 0 comentarios
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 ...
Publicado por Juan Antonio Ruz en 1:23 0 comentarios
domingo, 30 de noviembre de 2008
desarrollo orientada a comportamientos - Behaviour-driven development BDD
Acabo de enterarme que existe este tipo de desarrollo: orientado a comportamientos (behave)...
En teoría es una evolución del desarrollo orientado a pruebas (TDD)...
Y por lo visto aparte de determinar (concretar) en el desarrollo, el numero de escenarios y de pasos y de resultados que constituyen un programa. Por lo visto también hace el desarrollo más inteligible, o lo que es lo mismo lo hace más entendible y comunicable (la gran barrera en el desarrollo en grupo...)
Por ahora me he enterado que existe esta herramienta: JBehave con lo que se puede ir investigando un poquito más
Seguiré escribiendo a medida que lo utilice con los correspondientes enlaces a repositorio svn para descargarse
ciao!
Publicado por Juan Antonio Ruz en 13:21 0 comentarios
miércoles, 5 de noviembre de 2008
problemas con los charset en apache.. si otra vez
arreglado con este comentario ...
encontrado en http://lubrin.org/spip.php?article148
------
Muchisimas gracias por este fantástico tutorial. Se agracede muchísimo la ayuda cuando uno esta empezando…
En mi caso, no veía correctamente los caracteres de acentuación ni mi querida "ñ", que me servía apache. Después de devanarme los sesos di con un apaño.
Decirle al apache que no sirva las páginas en UTF-8 editando el fichero (que en mi caso estaba en:)
/etc/apache2/conf.d/charset
y comentando la línea
# AddDefaultCharset UTF-8
------
Publicado por Juan Antonio Ruz en 5:11 0 comentarios
Categorías: apache2
lunes, 6 de octubre de 2008
Fit - acceptance testing tool
http://fit.c2.com/
Y esto para qué sirve?
bueno en teoría para sacar adelante un software con calidad hace falta que el cliente vaya revisando (es decir: probando) continuamente las diferentes etapas del software a desarrollar, con el objetivo de ir modificando y concretando los casos de uso y las debidas respuestas del programa.
Con este fin existen unas herramientas para pruebas de aceptación
Publicado por Juan Antonio Ruz en 5:40 0 comentarios
Categorías: fit
Acabo de encontrar esta herramienta que sirve para estar en contacto y sobre todo saber en que andamos, es decir en que estamos empleando nuestro tiempo
http://twitter.com/home
y para saber en que ando yo: http://twitter.com/juanantonioruz
saludos!
Publicado por Juan Antonio Ruz en 5:26 0 comentarios
Categorías: twitter
Seam Framework con Ivy en la gestion de dependencias
http://in.relation.to/Bloggers/ManagingTheDependenciesOfASeamgenProjectWithIvy
Si alguno de vosotros ha intentado mavenizar un proyecto que utilice Seam seguramente habrá visto la escasez de recursos y dificultad para realizarlo (en mi caso no he llegado a conseguirlo). Y para más complicación cuando llega la hora de la herencia con MAVEN y su famoso superpom. EN resumen si utilizais Seam-gen podéis integrarlo con Ivy para la gestión de dependencias y la integración continua
Publicado por Juan Antonio Ruz en 5:22 0 comentarios
Ivy (+ANT) como alternativa a MAVEN
Acabo de leer que existe esta herramienta Ivy (http://ant.apache.org/ivy/) para la gestión de dependencias en Java. ¿En qué se diferencia de MAVEN? y ¿Por qué utilizarlo? Pues MAVEN hace más cosas pero relacionadas con otros ámbitos, tal como estandarización de proyectos. Mientras que Ivy trabaja unicamente con las dependencias, y si es verdad lo que prometen, es más fácil de extender nuestros poryectos (en MAVEN con el complicado superpom)
Publicado por Juan Antonio Ruz en 5:16 0 comentarios
Categorías: Gestion de dependencias, Ivy
miércoles, 6 de agosto de 2008
ui:repeat no cambia el valor de un c:set
Dentro de un bucle generado con facelets y su correspndiente etiqueta ui:repeat no conseguimos afectar a una variable de tipo incremento en cada una de las pasadas del bucle. Para ello tenemos que utilizar c:forEach y c:set
Publicado por Juan Antonio Ruz en 9:39 1 comentarios
domingo, 3 de agosto de 2008
arrancar 2 instancias de jboss
http://manoharviswanathan.com/blog/tech/running-multiple-jboss-instances-on-the-same-machine/
arranca jboss en una ip: run.sh -b ip
Publicado por Juan Antonio Ruz en 9:43 1 comentarios
Categorías: JBoss
jueves, 19 de junio de 2008
MAVEN un war que depende de otro war
el pom del primer war (es decir la dependencia es normal y corriente)
el que va a utilizar la dependencia es:
- declaración de la dependencia como tipo war
- cambio en la configuración del plugin de maven : maven-war-plugin para que al crear el war tenga en cuenta la otra dependencia y la empaquete de forma "especial" es decir qeu no empaquete algunos archivos 2 veces por ejemplo web.xml. En este caso solo incluye un archivo indexBasic.jsp
- y por ultimo configuramos nuestro servidor para que tenga en cuenta el directorio nuevo que se ha creado en el paquete war...
y esto permite pasar los archivos jsp y resources de un war a otro.... otra cosa sería que las clases de la aplicación war que vamos a utilizar como dependencia todavía no se escanean bien por el servidor, supongo que hay que hacer una configuración extra.... de lo contrario unicamente en los wars tendremos resources y las clases en los jars...
**** PARA QUE FUNCIONE mvn jetty:run-explode con mvn jetty:run no furula!!
Publicado por Juan Antonio Ruz en 3:51 0 comentarios
jueves, 12 de junio de 2008
Instalar librerias en repositorio local de maven una a una
cuando el repositorio remoto no tiene dicha libreria nos sale por consola el comando que debemos insertar, antes modificamos /path/to/file por el path real a la librería que nos hemos manualmente descargado.
mvn install:install-file -DgroupId=com.google.gdata -DartifactId=gdata-core -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/file
Publicado por Juan Antonio Ruz en 18:03 0 comentarios
Categorías: MAVEN
martes, 10 de junio de 2008
Instalar ANT en MacOS
http://www.asceticmonk.com/blog/?p=388
en ese enlace se habla de exportar variables al PATH en MACOS
Publicado por Juan Antonio Ruz en 4:01 0 comentarios
viernes, 4 de abril de 2008
Tipos de asociación: Composición - Agregación - Dependencia
Tipos de asociación:
La composición está relacionada con el valor del objeto, es decir el objeto que lo contiene se encarga de su ciclo de vida (inicialización, mantenimiento y limpieza)
La agregación está relacionada con la referencia a un objeto:
Publicado por Juan Antonio Ruz en 3:43 1 comentarios
Categorías: java
jueves, 27 de marzo de 2008
Programación pesimista, programación orientada a excepciones (anomalías)
Una excepción en java es simplemente una clase que hereda de la clase java.lang.Exception que extiende a su vez de la clase java.lang.Throwable así que empezamos echando un vistazo a el API de Throwable: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html
Como se comenta en la descripción de la clase:
Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw
statement.
Se puede apreciar que las clases que herendan de Throwable son Error y Exception. Mientras que si lanzamos un error no hay que declarlo en la definición del método, si lanzamos una exception si hay que declarlo:
Aunque no estamos obligados a declarar el error en la definición del método lo podríamos haber hecho de las siguientes maneras:
- public void pruebaLanzaError() throws Error
- public void pruebaLanzaError() throws Throwable
Si entendemos la excepción como un comportamiento anómalo de nuestro programa (o parte de programa), podemos tener en cuenta todos las anomalías de nuestro programa como pueden ser: objetos nulos, valores negativos ...
y actuando en consecuencia es decir lanzando excepciones concretas respondiendo a comportamientos anomalos concretos.
Publicado por Juan Antonio Ruz en 4:20 1 comentarios
Categorías: excepciones, java
jueves, 24 de enero de 2008
Script linux para recorrer directorio y cambiar nombre a archivos
Bueno parecía más difícil de lo que al final fue:
la función para recorrer directorios es la muy famosa ls, la salida que da se lo pasamos a un bucle while y en cada iteración hacemos un cp ___ ____
Al pasarle variables al script las recogemos por el orden de entrada es decir si ejecutamos el script
# hola.sh Manolo
pues dentro del script accedemos a la variable Manolo con $1 ya que $0 es el nombre del script="hola.sh"
así me ha quedado a mi:
ls $2 |
while read name
do
echo "nombre: $name Extension:$1 Directorio: $2"
cp $2/$name $2/$1$name
done
y la llamada
cambiarNombre.sh Miniatura_ /prueba
y tendría el resultado de anteponer la palabra "Miniatura_" a el nombre de los archivos existentes en el directorio prueba
Publicado por Juan Antonio Ruz en 5:49 1 comentarios
Categorías: linux
miércoles, 16 de enero de 2008
Obtener un string con el mensaje (stacktrace) de una excepción
Exception ex = new Exception("something went wrong");
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
System.out.println("stacktrace = " + stacktrace);
Conseguido en
http://www.jguru.com/faq/view.jsp?EID=571084
Publicado por Juan Antonio Ruz en 11:54 1 comentarios
Categorías: java