Ivy
Publicado por
ManuWar
0
comentarios
JBoss Seam ( EJB3+JSF )
He aquí una serie de manuales:
- seam-gen: seam generator
- ¿qué es seam? http://seamcity.madeinxpain.com/archives/31
- biyection: http://seamcity.madeinxpain.com/archives/28
- conversaciones: http://seamcity.madeinxpain.com/archives/29
- configuración de seam: http://seamcity.madeinxpain.com/archives/30
- programación orientada a aspectos: http://ejemplos-seam.blogspot.com/2007/07/crear-estadisticas-en-seam-con.html
Publicado por
ManuWar
0
comentarios
Tutoriales Struts
- http://es.wikipedia.org/wiki/Apache_Struts
- http://www.programacion.com/java/tutorial/joa_struts/
- http://www.laliluna.de/tutorial-struts-eclipse-espanol.html
- http://j2ee.masslight.com/Chapter4.html
- http://150.185.75.30/atiwiki/index.php/STRUTS
- http://www.geocities.com/neos_software/articles/j2ee/struts-holamundo.html
- http://struts.apache.org/1.2.4/userGuide/index.html
- http://struts.sourceforge.net/
- http://struts.sourceforge.net/struts-flow/index.html
- http://struts.apache.org/1.2.4/userGuide/building_view.html
- Struts hibernate plugin http://www.hibernate.org/105.html
Publicado por
ManuWar
0
comentarios
Struts Minimal
Pincha aquí para ver como se crea un proyecto Struts con las API´s básicas (está en inglés).
Publicado por
ManuWar
0
comentarios
Objeto Criteria de Hibernate
Pincha aquí para ver ejemplos de Criteria.
Publicado por
ManuWar
0
comentarios
Crear proyecto Servlet con Maven para Eclipse
- Accede a la consola y nos ubícate en el workspace del Eclipse.
- Ejecuta el siguiente comando: mvn archetype:create -DgroupId=nuestroservlet -DartifactId=miproyectoServlet -DarchetypeArtifactId=maven-archetype-webapp . En el parámetro DartifactID se indica el nombre del proyecto. Para Maven, todo proyecto ha de estar engloblado en un grupo, para ello usa el parámetro DgroupId.
- El comando anterior creará un nuevo directorio en tu workspace cuyo nombre coincide con el que le hayas puesto a tu proyecto (parámetro DartifactId). Accede a él. Podrás observar, que en él, hay un fichero llamado pom.xml, ¿ Te suena verdad ? :p.
- Lanza: mvn -Declipse.workspace="la ruta del workspace" eclipse:add-maven-repo. Cuidado! Lo que esta entrecomillado debes de poner la ruta del workspace. Esto añade una variable nueva (M2_REPO) al Eclipse para sepa donde esta el repositorio (puedes comprobarlo arrancando Eclipse y luego en Windows->Preferences->Classpath Variables).
- Si estas ubicado en la raiz del nuevo proyecto, lanza mvn eclipse:eclipse .
- Ya puedes cerrar la consola ya que se ha terminado de crear el proyecto Servlet. Arranca eclipse y abre un nuevo proyecto java existente.
- Crea tus Source Folder necesarios (por ejemplo: src/main/java , src/main/resources , src/main/webapp y src/test/java). Estos source folder han de tener concordancia con el fichero build.xml.
- Edita el fichero pom.xml y añade las dependencias y plugins necesarios para la futura aplicación web. Observa que en él se refleja el grupo y el artificio que le has puesto previamente. Una forma de editar el fichero pom.xml automáticamente, es activar maven en el eclipse (paso 9) y luego boton derecho sobre dicho fichero para añadir las dependencias y plugin. Un ejemplo sería:
<?xml version="1.0" encoding="UTF-8"?><project>
<modelVersion>4.0.0</modelVersion>
<groupId>nuestroservlet</groupId>
<artifactId>miproyectoServlet</artifactId>
<packaging>war</packaging>
<name>miproyectoServlet Maven Webapp</name>
<version>1.0-SNAPSHOT</version>
<url>http://maven.apache.org</url>
<build>
<finalName>miproyectoServlet</finalName>
<plugins>
<!-- Necesario.Indicamos la versión del jre que utilizará
el plugin maven para el eclipse.-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- Necesario, ya que contiene las API de los Servlet.-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>compile</scope>
</dependency>
<!-- Necesario si usamos TDD con TestNG en vez de JUnit.-->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.1</version>
<classifier>jdk15</classifier>
<scope>test</scope>
</dependency>
<!--Necesario en caso de que se trabaje con el fichero build.xml
de ANT. -->
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-ant-tasks</artifactId>
<version>2.0.7</version>
</dependency>
</dependencies>
</project> - Activa Maven (boton derecho sobre el proyecto, Maven2->Enable).
- Haz un Update Source Folder.
- Inserta en la raiz del proyecto el fichero build.xml de ANT. En este haz de poner la ruta del Tomcat. Si no tienes ganas de crearte uno, haz un copy-paste desde otro proyecto (aplicación web) que lo tenga.
- DeployWar.
- Comprueba en el browser si todo ha salido con éxito (éste ha de mostrar Hello World!, que es el ejemplo que viene por defecto).
- A partir de aquí, modifica y crea tus propios servlet modificando previamente el fichero web.xml.
Todo esto ha sido sacado de las siguientes URL´s:
Publicado por
ManuWar
0
comentarios
Hibernate con un ejemplo
- src en donde colocaremos nuestros códigos fuentes.
- test para realizar las pruebas, ya que aplicaremos TDD.
A continuación, creamos un nuevo directorio llamado lib, en donde colocaremos nuestras librerías, siendo en este caso los .jars de Hibernate (estos son los contenidos en el directorio lib del paquete extraido y el .jar del directorio raíz de éste). También hemos de incluir obligatoriamente en lib el driver JDBC según la base de datos con la que vayamos a trabajar (MySQL según ejemplo). Opcionalmente, pero recomendable, pondremos las librerías EasyMock, TestNG... Luego refrecamos nuestro proyecto y añadimos todas las librerías al build path.
En cuanto a los ficheros de configuración, copiamos los ficheros hibernate.cfg.xml y log4j.properties ubicados en doc\tutorial\src y lo pondremos en nuestro source folder src. Por mayor comodidad, usaremos ant en nuestro proyecto, así que copiaremos build.xml del directorio doc\tutorial y lo pondremos en el raiz de nuestro proyecto.Configuración de Hibernate (hibernate.cfg.xml) para MySQL :
<?xml version='1.0' encoding='utf-8'?> |
Si tienes algún problema a la hora de configurar el driver JDBC , tal vez te sirva de ayuda este fichero (No abrir con bloc de notas).
En el fichero log4j.xml, podemos configurar el tipo de salida que muestre por la consola (recordamos que los principales son, de mayor prioridad a la de menos: DEBUG, INFO, WARN y ERROR).
<?xml version="1.0" encoding="UTF-8" ?> |
Todo lo comentado, ha sido relacionado con la instalación y configuración de hibernate, ya va siendo hora de ir al grano ....
Toda aplicación, necesita un único objeto perteneciente a la clase SessionFactory, que como su nombre indica se trata de una fábrica de sesiones. Luego, le pediremos sesiones a éste, mediante los cuales, podremos hacer transacciones con la base de datos. Veamos un ejemplo de como se crea :
package es.nuwi.hotel.util; import org.hibernate.SessionFactory;
|
El ejemplo que usaremos tendrá la siguientes asociaciones-relaciones:
Como observamos un hotel va a tener n empleados y n habitaciones. Cada empleado puede trabajar en más de un hotel. Una habitación pertenece a un hotel y suponemos que en una habitacion sólo va a ver un único cliente. El cliente solo podrá alquilar una única habitación. En nuestro ejemplo, usaremos asociaciones bidireccionales en vez de unidireccionales.
Creamos los POJOS, los cuales serán objetos persistentes. Éstos han de llevar obligatoriamente una propiedad de tipo Long :
Fichero Hotel.java :
package es.nuwi.hotel.objpersistentes;
|
Fichero Empleado.java :
package es.nuwi.hotel.objpersistentes;
|
Fichero Habitacion.java :
package es.nuwi.hotel.objpersistentes;
|
Fichero Cliente.java :
package es.nuwi.hotel.objpersistentes;
|
Configuramos las asociaciones antes mencionadas. Para tener una cierta concordancia, los nombres de estos ficheros coinciden con los de la clase y cuya extensión es .xbm.xml, aunque no tiene siempre porque ya que en un mismo fichero pueden asociarse varias clases y en cuanto a la extensión, ésta puede ser cambiada. Para que no de ningún error, la propiedad tipo Long ha de ser la primera :
Fichero Hotel.hbm.xml :
<?xml version="1.0" encoding="UTF-8"?> |
Fichero Empleado.hbm.xml :
<?xml version="1.0" encoding="UTF-8"?> |
Fichero Habitacion.hbm.xml :
<?xml version="1.0" encoding="UTF-8"?> |
Fichero Cliente.hbm.xml :
<?xml version="1.0" encoding="UTF-8"?> |
Estas configuraciones han sido sacadas de la siguiente URL: http://www.hibernate.org/hib_docs/reference/en/html/associations.html.Veamos el reflejo del ejemplo sobre el DBMS:
- Al crear una relación MANY-TO-MANY se ha creado una nueva tabla ( empleados-hoteles ) con dos campos primarios (hotel_id y empleado_id) los cuales son además claves ajenas (foreign key) de las tablas hotel y empleado respectivamente. Recordamos que una clave ajena apunta a los campos primarios de otra tabla.
- Al hacer uso de un ONE-TO-MANY y MANY-TO-ONE, de este segundo (many-to-one, es decir, de la tabla habitacion) se crea una columna sienda esta clave ajena de la clave primaria de la primera ( one-to-many, es decir,de la tabla hotel ) .
- En cuanto a ONE-TO-ONE , es exactamente igual igual que el anterior, con la única diferencia de que la clave ajena es además unique (no admite valores repetidos para esa columna). Según el ejemplo, se crea un nuevo campo de la tabla cliente la cual referencia a la clave primaria de la tabla habitacion siendo además único para esta columna.
Por último, lo único que nos queda es mapear los objetos persistentes. Para ello, añadimos las siguientes entradas en el fichero hibernate.cfg.xml, siendo estas entradas la ruta más el nombre en la que se encuentran los ficheros .hbm.xml de nuestro proyecto :
<mapping resource="es/nuwi/hotel/objpersistentes/Hotel.hbm.xml"/> |
Otra característica de este framework, es que podemos crear un fichero llamado import.sql ( ha de llamarse así obligatoriamente ) el cual contiene sentencias SQL (DDL,LMD,...). Esto es de gran utilidad ya que podemos insertar tuplas en nuestro DBMS y hacer pruebas para ver el funcionamiento de nuestra aplicación. En nuestro ejemplo, insertaremos nuevas tuplas :
insert into Hotel(Hotel_id,nombreHotel) values (1,'Hotel LG') insert into Hotel(Hotel_id,nombreHotel) values (2,'Hotel Nuwi') insert into Empleados (Empleado_id,dniEmpleado) values (1,'Mawi') insert into Empleados (Empleado_id,dniEmpleado) values (2,'Ana') insert into Empleados (Empleado_id,dniEmpleado) values (3, 'María') insert into Empleados_Hoteles (Hotel_id,Empleado_id) values (1,1) insert into Empleados_Hoteles (Hotel_id,Empleado_id) values (1,2) insert into Empleados_Hoteles (Hotel_id,Empleado_id) values (2,3) insert into Habitacion (Habitacion_id,Hotel_id) values (1,1) insert into Habitacion (Habitacion_id,Hotel_id) values (2,1) insert into Habitacion (Habitacion_id,Hotel_id) values (3,2) insert into Clientes (Cliente_id,dniCliente,fechaAlquiler,HabitacionCliente) values (1,'28765342H','2008-1-19 11:15',1) insert into Clientes (Cliente_id,dniCliente,fechaAlquiler,HabitacionCliente) values (2,'49382718L','2008-2-21 14:45',2) insert into Clientes (Cliente_id,dniCliente,fechaAlquiler,HabitacionCliente) values (3,'27272129P','2008-4-19 19:30',3) |
Hibenate soporta 3 tipos de herencia:
- Tabla para clase padre e hijas (se admiten valores nulos).
- Tabla por cada subclase (no se admiten valores nulos).
- Tabla por cada clase concreta (No abstracta), tanto padre como hijas.(no valores nulos).
He aquí un ejemplo del primer caso: La clases Cliente tendrá dos subclases, los que pagen en efectivo, donde guardaremos el importe y los que pagen por tarjeta de crédito, donde guardaremos el número de dicha tarjeta :
Creamos los POJO´s de las dos subclases:
Fichero ClienteEfectivo :
package es.nuwi.hotel.objpersistentes; |
Fichero ClienteTarjeta:
package es.nuwi.hotel.objpersistentes; |
Modificamos el fichero Cliente.hbm.xml. Para ello, es necesario crear una nueva columna en la tabla Cliente (discriminador tipoCliente, éste no esta reflejado en ningún campo de la clase), situada obligatoriamente como segunda posición para que no de ningún error (recordamos que la primera es el Primary Key de tipo Long). Dicho discriminador ha de ser de tipos String y no puede contener valores nulos. Luego se especifican los nuevos campos de las subclases pudiendo éstos contener valores nulos y el valor del discriminador que van a usar. El fichero quedaría de la siguiente manera :
<?xml version="1.0" encoding="UTF-8"?> |
Como habrás observado, no hemos creado ningún .hbm.xml para cada subclase ya que lo hemos especificado en el de la clase madre. Será este el que esté mapeado en hibernate.cfg.xml.
Si tienes dudas, tal vez este foro te sirva de ayuda.
Publicado por
ManuWar
0
comentarios
Tutorial sobre las API´s de reflexión
Pinchá aquí para accer al manual sobre las API´s de reflexión.
Publicado por
ManuWar
0
comentarios
Mostrar sentencias SQL de Hibernate por la consola en Spring
|
Publicado por
ManuWar
0
comentarios
Vínculo Asociaciones-Relaciones en Hibernate (xml)
Publicado por
ManuWar
0
comentarios
Anotaciones @RequestMapping y @RequestParam en Spring MVC y la clase ModelMap
@RequestMapping(value="/editalibro.html") |
Ambas anotaciones y clase, se usan dentro del controlador.
Publicado por
ManuWar
2
comentarios
Creación Bean de Sesión con Estado (Statefull) en Spring
- Implementamos el bean:
package org.appfuse.model;
import java.util.ArrayList;
import java.util.List;
public class CarritoCompra {
private List<libro> carrito = new ArrayList<libro>();
public List<libro> getCarrito() {
return carrito;
}
public void setCarrito(List<Libro> carrito) {
this.carrito = carrito;
}
public void añadirLibro(Libro libro) {
if (!carrito.contains(libro))
carrito.add(libro);
}
public void eliminarLibro(Libro libro) {
carrito.remove(libro);
}
} - Utilizamos la anotación @Autowired para aplicar la inyección de dependencias a nuestra aplicación, ya sea desde un controlador u otra clase. Observa que esto también es aplicable a propiedades declaradas como privadas :
@Autowired
private CarritoCompra carritoCompra; - Por último, indicamos al Spring que tenemos un nuevo bean de sessión con estado, por lo que a la declaración típica de bean en el fichero applicationContext.xml le vamos a añadir el valor scope="session", y dentro de ésta <aop:scoped-proxy/>:
<bean id="carritoCompra" class="org.appfuse.model.CarritoCompra"
scope="session">
<aop:scoped-proxy/>
</bean>
Publicado por
ManuWar
0
comentarios
Logging en appfuse (spring)
- Utilizamos en la clase deseada el siguiente objeto.
- protected final Log logger = LogFactory.getLog(getClass());
- Hay que importar en nuestro archivo las siguientes clases:
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- Utilizarlo dentro de nuestro código sustituyendo las lineas:
- System.out.println("mensaje"); por ...
- logger.debug("userId set to: " + variable o llamada a función); donde el objeto logger nos permite indicar varios niveles de logging, cuya jeraquía de mayor a menor es: DEBUG, INFO, WARN, ERROR.
- Configurar el archivo /src/main/resources/log4.xml para indicarle los niveles que queremos imprimir en consola (es posible aplicar a los distintos paquetes de nuestro proyecto un tipo de logging distinto a cada uno) .
Nota: Antes hemos mencionado que existe una jerarquía en los niveles de logging, esto consiste en que si usamos el loggin INFO, se mostrarán también los mensajes de WARN y ERROR, mientras que los de DEBUG no lo harán.
Pienso que esto es sencillo, que no tiene ningún misterio y que no merece la pena poner un ejemplo, así que en caso de duda, hacer un comentario.
Publicado por
ManuWar
0
comentarios
Internalización ( i18n ) en AppFuse
Ejemplo=> webapp.clave=Estamos aprendiendo Internalización.
|
Publicado por
ManuWar
1 comentarios
Ejemplo AppFuse Light 1.8.1 con un DBMS
Cuando tenga time , subiré el ejemplo.
Publicado por
ManuWar
0
comentarios
Instalación AppFuse-Light 1.8
Antes de comenzar, ten instalado una base de datos MySQL, Tomcat, Maven y Ant. A continuación, sigue los siguientes pasos:
- Descárgate: appfuse-light-all-1.8.1.zip.
- Descomprime dicho archivo en workspace del eclipse.
- Abre la consola y desplázate hacia el directorio descomprimido situado en el workspace.
- Opcional: En caso de que trabajes con un repositorio local u otro remoto, edita el archivo /pom.xml de Maven y sustituiye http://download.java.net/maven/2 por href=http://...
- Ejecuta ant new ( cuando solicite el nombre aplicación inserta el deseado).
- Desciende un nivel, verás que hay un directorio con el nombre que le hayas puesto a tu proyecto, accede a él. El otro, el archivo .zip descomprimido, lo dejaremos por si necesitamos crear nuevos proyectos.
- Para generar el proyecto de eclipse, utilizamos Maven:
- mvn eclipse:eclipse . Esto sirve para que prepare el entorno, como por ejemplo el .proyect, el .classpath , ...
- mvn eclipse:eclipse -DdownloadSources=true . Se descargarán las librerías necesarias para el proyecto.
- mvn -Declipse.workspace="La ruta de tu workspace" eclipse:add-maven-repo . Esta línea añade una variable nueva (M2_REPO) al Eclipse.
- Crea en de eclipse un nuevo proyecto java existente.
- Preparar el despliegue de la aplicación con el tomcat de nuestro equipo y la conexion a datos (mysql):
- Edita /build.xml propiedad server.home y pon la dirección del Tomcat.
- Edita src/main/resources/jdbc.properties y ponle el nombre de usuario y contraseña de la base de datos MySQL.
- Utiliza el archivo ant (build.xml) del proyecto para construir, desplegar ... En especial, utiliza un DeployWar.
*** Todo esto esta sacado de la siguiente URL: https://appfuse-light.dev.java.net/
Publicado por
ManuWar
1 comentarios
Creación proyecto Spring MVC Basic. Gracias Maven!
- Abre la consola ( Desde Windows: Inicio->Ejecutar->Escribimos "cmd"), y una vez abierta la ventana desplázate hacia el directorio del workspace del Eclipse.
- Ejecuta el siguiente comando para que Maven se descargue las librerías necesarias de Spring MVC Basic en el repositorio local que tengas puesto en el fichero de configuración settings.xml de este (el valor del atributo DartifactID puedes cambiarlo, es el nombre que le darás a tu proyecto):
mvn archetype:create
-DarchetypeGroupId=org.appfuse.archetypes
-DarchetypeArtifactId=appfuse-basic-spring
-DremoteRepositories=http://static.appfuse.org/releases
-DarchetypeVersion=2.0.1
-DgroupId=com.mycompany.app
-DartifactId=SpringMVCBasic - El comando anterior creará un nuevo directorio en tu workspace cuyo nombre coincide con el que le hayas puesto a tu proyecto. Accede a él. Podrás observar, que en él, hay un fichero llamado pom.xml, ¿ Te suena verdad ? :p.
- Poner al final del fichero pom.xml del proyecto el nombre de usuario y la contraseña de la base de datos MySQL. Servirá para más adelante (paso 7 en concreto).
- Ahora, ejecuta lo siguiente para que se generen los ficheros del proyecto ( .project, .classpath ... ), los ficheros de configuración y se descarguen las herramientas para la creación del proyecto (ten paciencia, es una de las claves del buen programador): mvn eclipse:eclipse .
- A continuación, lanza mvn -Declipse.workspace="la ruta del workspace" eclipse:add-maven-repo. Cuidado! Lo que esta entrecomillado debes de poner la ruta del workspace. Esto añade una variable nueva (M2_REPO) al Eclipse para sepa donde esta el repositorio.
- Lanza: mvn install . Se descargaran todas las dependencias asociadas al proyecto y lo dejará preparado. Si te da algún error, relacionado con el Tomcat, como me pasó a mí, descárgatelo desde aquí (Apache Tomcat version 6.0.14). Asegúrate que la versión a descargar coincide con la que te ha dado el error. Una vez descargado, copia el .zip en C:\Documents and Settings\[NombreUsuario]\Configuración local\Temp\cargo\installs.
- Para hacer un war, deploy y ver su funcionamiento, haz un mvn jetty:run-war. También se descargarán más librerías. Jetty es un servidor (como el tomcat) incorporado en el proyecto. Pincha aquí para ver si todo a sido correcto.
- Agrega en el Eclipse el proyecto java existente.
Todo esto esta sacado de la siguiente URL: http://appfuse.org/display/APF/Home . Espero que le haya sido de ayuda! :)
Publicado por
ManuWar
0
comentarios
SVN vs VCS
- Entrar en la dirección http://code.google.com/hosting/ .
- Click en new proyect.
- Rellenar todos los campos que nos pide el formulario de proyecto nuevo.
- Click en ficha source y desde el apartado command-line access copiamos la dirección https. Ejemplo: https://nombreDeNuestroProyecto.googlecode.com/svn/trunk/ .
- Hacemos click en googlecode.com password y obtendremos nuestro password.
- Desde eclipse:
- Menu window>show view>other>svn repository.
- 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.
- Para conectar nuestro código con subversion, botón derecho sobre la carpeta de proyecto a Controlar->Team->Share Project e indicamos la url de antes.
Principales operaciones de SVN:
- Cada vez que queramos subir nuesrtro código al subversion:
botón derecho->team->commit - Cuando queramos bajarnos los archivos o modificaciones del subversion a nuestro equipo(debe haber variado el número de revisión):
botón derecho->team->update - Cuando queremos bajarnos los archivos, haya habido o no alguna modificación, es decir, haya o no variado el número de revisión:
botón derecho->team->revert
Publicado por
ManuWar
0
comentarios
JBoss Seam. Primeros pasos
JBosS SEAM es un framework para desarrollar aplicaciones J2EE sobre el servidor de aplicaciones JBOSS. Más adelante pondré los pasos a seguir.
Publicado por
ManuWar
0
comentarios
Apache MAVEN
- Repositorio local: Por defecto en window esta ubicado en: C:\Documents and Settings\[NombreUsuario]\.m2 . Puede cambiarse en el fichero settings.xml del direcotorio config.
- Generacion automática de proyectos: Struts, Spring,...
- Despliegue de proyectos de forma automática : Actualiza los source folder, es decir, se encarga de las dependencias de las librerías antes mencionadas.
Publicado por
ManuWar
0
comentarios
MVC (Modelo Vista Controlador )
- Modelo: Representa la parte fuerte de la aplicación, es decir, todo aquello con lo que el sistema opera. Se encarga de ejecutar o de llevar a cabo los servicios o eventos dictados por el controlador e interactuar si es necesario con la bases de datos (capa de datos) aplicando para ello persistencia.
- Vista: Interfaz que percibe el usuario, mediante el cual interactua.
- Controlador (Interceptor): Se situa entre los dos anteriores, recibe las peticiones por parte del usuario e inicializa los servicios o eventos correspondientes a dicha petición. Devuelve un modelo a la capa de vista (.jsp,...).
He aquí un pequeño esquema del patrón MVC:
Publicado por
ManuWar
1 comentarios
Java Bean
Ejemplo de un Bean:
|
Publicado por
ManuWar
0
comentarios
Anotaciones
Las Anotaciones son declaradas igual que las interfaces con la única excepción de que lleva precedico el caracter @. Veamos un ejemplo :
|
|
|
|
Publicado por
ManuWar
1 comentarios
POJO
Veamos un ejemplo:
|
Publicado por
ManuWar
0
comentarios
Caja blanca vs Caja negra
Publicado por
ManuWar
0
comentarios
Programas y plugins ( nuestro entorno de desarrollo )
- Pincha aquí para ver un ejemplo de delicious.
Eclipse IDE y plugins (complementos) :
- IDE Eclipse(JEE).
- JBoss tools (plugin compatibilidad con jboss).
- Maven.
- Sysdeo (plugin compatibildad con tomcat).
- UML editor (plugin para modelado UML en eclipse).
Publicado por
ManuWar
0
comentarios
Apache ANT
|
Publicado por
ManuWar
0
comentarios
Refactorización
Para ver un ejemplo de refactorización, pincha en el siguiente enlace:
EJEMPLO REFACTORIZACIÓN. Para conseguir una visión óptima, aumentar la calidad de imagen (botón derecho sobre el flash).
Publicado por
ManuWar
2
comentarios
Servidor de Aplicaciones
Otra característica y obvia antes mencionada implícitamente, es la portabilidad de Java (multi-plataforma) ya que permite que los servidores de aplicaciones J2EE se encuentren disponibles en una gran variedad de Sistemas Operativos (Windows, Linux,...).
Servidores de Aplicaciones más conocidos:
- S.A. privativos : WebSphere (IBM), WebLogic (BEA), Oracle Aplication Server (Oracle Corporation).
- S.A. Libres : JOnAS y JBOSS (nuestro caso).
He aquí un pequeño esquema de un S.A. :
Pincha aquí para ver las características de la plataforma J2EE en una ventana aparte.
Publicado por
ManuWar
0
comentarios
Interceptores / Controladores
Publicado por
ManuWar
1 comentarios
Programación Orientada a Objetos (POO)
El uso de la OOP hoy día es muy variado, aplícandose tanto en Sistemas Operativos (S.O.), Inteligencia Artificial (I.A.),"Aplicaciones Empresariales",SBGDOO (no muy utilizado ya que hay muchos problemas)...
Principales características de la OOP:
A) Clase: Es el núcleo de la POO. Se define como un nuevo tipo de dato que se utiliza para crear objetos de ese tipo.
Ventajas que proporciona la OOP frente a otros lenguajes de programación:
A) Uniformidad: La representación de los objetos lleva implícita tanto el análisis como el diseño y codificación de los mismos.
Publicado por
ManuWar
0
comentarios
Desarrollo guiado por pruebas (TDD)
El Test-Driven Development ( TDD en adelante ) es una técnica que involucra dos partes en el siguiente orden:
- Escribir primero las pruebas (Test First Development), es decir, usando para ello los framework JUNIT o TESTNG (de este último hay una entrada en el blog).
- Refactorización. Ya comentado en otra entrada del blog.
Aplicando TDD sobre la aplicación, conseguimos un software seguro y fiable.
Publicado por
ManuWar
0
comentarios
Programación Orientada a aspectos (POA)
Publicado por
ManuWar
0
comentarios
Enterprise JavaBeans v.3 (EJB3)
Historia de los EJB:
EJB 1.0: La especificación original .
EJB 1.1: La primera incluida dentro de J2EE
EJB 2.0: Incluida en J2EE 1.3, añadía las interfaces Locales y los Message-Driven beans.
EJB 2.1: Incluida en la última revisión de J2EE, la 1.4.
A continuación, veamos el proceso de creación de un EJB:
Hay 3 tipos de EJB:
Con estado (StateFul). Los beans de sesión con estado son objetos distribuidos que poseen un estado. El estado no es persistente, pero el acceso al bean se limita a un solo cliente. Para la creación de un EJB statefull se usan llamadas RMI.
- Sin estado (StateLess). Los beans de sesión sin estado son objetos distribuidos que carecen de estado asociado ( carecen de atributos o propiedades ) permitiendo por tanto que se los acceda concurrentemente. No se garantiza que los contenidos de las variables de instancia se conserven entre llamadas al método, es decir, el componente (objeto) no está asociado al usuario (sólo es creada una única instancia como máximo). Un objetos Stateless también puede usarse para modificar alguna propiedad de un objeto StateFull. Para la creación de un EJB stateless se usa pooling web services.
En el caso de JBOSS SEAM, este distingue 3 tipos de EJB de sesión con estado:
- Objeto Página: Guarda información mientras la página este activa. Se destruye cuando pasa un cierto tiempo o cuando el usuario a cambiado de página web.
- Objeto evento: Ocurre cuando el cliente modifica o actualiza algo en la ventana del navegador.
- Objeto conversación(Task): El cliente pone a próposito que inicie un servicio para conseguir su objetivo.
C) EJB dirigidos por mensaje (Message-driven EJBs(MDB)): : No explicado todavía.
Servicios que nos proporcionan los EJB
A) Messaging (Se trata de una comunicacion asíncrona).
B) Inyección de dependencias.
C) Pooling.
D) Thread-safely.
E) Mantenimiento del estado.
F) AOP-Interceptores. De esto se habla en otra entrada.
G) RMI (Remote Invocation Method).
H) Web Services.
I) Transacciones.
J) Seguridad (gracias a las anotaciones).
He aquí un esquema y su relación con las aplicaciones J2EE:
Publicado por
ManuWar
1 comentarios
Java 2 Enterprise Edition (J2EE)
Publicado por
ManuWar
1 comentarios
TestNG
Veamos un ejemplo muy sencillo :
package es.cea.utilidades; |
Como habreis comprobado en vuestro IDE ECLIPSE, el resultado ha fallado dado que hemos almacenado el valor 2 como parámetro en el constructor y lo estamos comparando con el valor 1.
La anotación @DataProvider consiste en evaluar un mismo método de forma iterativa, veamos un ejemplo para que se comprenda mejor:
|
En este ejemplo, cuando el valor del parámetro (pruebaEntero) valga 1 y 3, el test no tendrá éxito, mientras que para el otro caso (valga 2) si lo tendrá.
Otra característica es el uso de una suite (fichero basado en xml). Esto es de gran utilidad ya que ejecuta a la vez todos aquellos métodos que tengan la anotación @Test del paquete indicado, en vez de ir uno por uno. He aquí un ejemplo:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
Publicado por
ManuWar
1 comentarios
EasyMock
|
Publicado por
ManuWar
1 comentarios