Tecnologías Web, Cloud, Mobile y NoSQL : Java EE, JSF 2, JPA 2, Eclipse, NetBeans, GlassFish, WebLogic, WebSphere Application Server, Apache Tomcat, Google App Engine, Android, MongoDB y muchas cosas más ...
Páginas
Bienvenida
Como todo en la vida, la innovación es la clave del éxito por lo que nos hemos visto en la necesidad de "evolucionar" este blog para abarcar muchos otros temas que estaban quedando de lado en nuestros cursos "oficiales".
Si deseas aprender o profundizar algunos temas en particular, no dudes en contactarnos.
miércoles, 28 de diciembre de 2011
LP-II Ejemplo : Servlets, JSP y PopUp
Despues de un par de ciclos vuelvo a dictar el curso de LP-II. Aunque lo he tomado recien luego de los parciales, algunos alumnos me han pedido que les dé un ejemplo de PopUps. Aunque no soy muy partidario del uso de JavaScript (porque no corre igual en todos los navegadores) , aqui va el ejemplo que he tratado de hacerlo lo más estandar posible para IE, Chrome y FireFox :
La Aplicación es bastante sencilla he obviado el acceso a base de datos y por ello la data está como variables fijas (por eso el paso 1)
1) Tiene un único servlet que se carga al inicio: en el web.xml vean la línea que dice <load-on-startup>1</load-on-startup>
Esto se hace con el fin que en el método INIT del servlet se guarde en el contexto de la aplicación el HashMap "allCars" :
public void init() {
allCars.put("Renault", carsRenault);
allCars.put("Fiat", carsFiat);
allCars.put("Toyota", carsToyota);
this.getServletContext().setAttribute("allCars", allCars);
}
allCars.put("Renault", carsRenault);
allCars.put("Fiat", carsFiat);
allCars.put("Toyota", carsToyota);
this.getServletContext().setAttribute("allCars", allCars);
}
2) La aplicación inicia con la página: pagina1.jsp
Esta página es un formulario que tiene 2 botones: uno sirve para invocar al JavaScript que abre la ventana de popup y el otro sirve para hacer submit del formulario ( invocando al alias denominado "s01" que corresponde al servlet ).
3) Cuando se abre la ventana de popup, se recupera del HashMap que está en el contexto de la aplicación la lista de modelos de auto y se muestran en una tabla (usando JSTL observen bien el detalle ...)
Si el usuario selecciona un modelo, el JavaScript de esta página se encarga de escribir dicho valor en la ventana padre ( esta es la parte dificil pues se debe escribir así para que sea estandar a todos los navegadores, aunque en IE permite saltarse algunas cosas ) y cerrar el popUp.
4) Finalmente, una vez seleccionado el modelo, presionamos el botón "aceptar" para hacer el submit del formulario y se mostrará la página 2 que simplemente es un texto indicando el modelo seleccionado.
Nota: Todas las páginas JSP están con código JSTL. Puedes descargar la aplicación dando click aquí.
¡ Feliz año nuevo !
PD: No te olvides de dejar un comentario. gracias !
martes, 27 de diciembre de 2011
JSF: Manejo de imágenes con PrimeFaces
En este pequeño tutorial, trataremos el manejo de imágenes no sólo desde el punto de vista de JSF, sino tambien almacenando y recuperando la imagen desde la Base de datos utilizando para ellos JPA ( EclipseLink).
En primer lugar explicaré que la implementación de referencia de JSF ( Mojarra ) viene con 4 librerías:
h: HTML
f : Core
ui: Facelets
composite: Librería de componentes compuestos.
Pese a todo ello, la implementación de referencia no me permite trabajar con imágenes que no sean archivos en disco o en las "library" dentro del proyecto.
Entonces, tenía que buscar una extensión ( implementación ) que me permita manipular imagenes como arreglos de bytes en memoria ( que es lo que hace JPA cuando saca la imagen de la Base de Datos ). La librería escogida fue "PrimeFaces" debido a que es ligera y no requiere dependencias de otras librerías.
He ejecutado algunos cambios en la base de datos para que las relaciones entre las tablas y las entidades sean correctas, Aquí está el nuevo modelo de Base de datos.
PARTE 1 : Grabar una imagen
Como vimos en el ejemplo del Banco, queremos registrar a un nuevo cliente, su dirección y su foto que posteriormente serán mostradas.
Para ellos vamos a cambiar alguna partes de la página registroCliente.xhtml para que se visualice así:
Nota que se capturan los datos del cliente ( corresponden a la entidad "Customer" ).
Luego se capturan los datos de la dirección ( corresponden a la entidad "Custadddress" ).
Finalmente se pide la foto que corresponde a la entidad "Customerinfo".
La página debe sufrir las siguiente modificaciones:
Notar que se declara una librería "p" para primefaces.
Cuando se trabaja con archivo, el formulario debe incluir el encoding type:
Finalmente, el archivo se maneja con esta linea de código y en donde se observa el campo está asociado a una managed bean llamado UPLOADController ( archivo FileUploadManagedBean.java ).
Cuando se ejecuta el POST, el managed Bean "UsuarioManagedBean" activa el método "registrar". En este método se convierte lo que captura primefaces en un arreglo de bytes para JPA y se ejecuta el insert de 3 tablas en una sola operación gracias a las relaciones de las entidades:
PARTE 2 : Mostrar una imagen
Una vez registrado el usuario, al momento de ingresar al sistema, se debe mostrar lo siguiente:
Para mostrar esto, el managedBean llamado "LOGIN" ( clase java LoginManagedBean.java) debe convertir el arreglo de bytes de JPA a una clase particular de PrimeFaces
De tal forma que al lanzar la página, se utilice el tag "p" de la forma siguiente:
¿ que te pareció ? ... Bastante fácil con la ayuda de PrimeFaces.
¡¡ Hasta la próxima !!
PD: Si quieres descargar la aplicación completa, da click aquí (pesa como 11 MB) y por favor no te olvides de dejar un comentario.
lunes, 26 de diciembre de 2011
Video Curso : NoSQL MongoDB
MongoDB is one of the new open source databases that focus on the ideas of the NoSQL (Not Only SQL) approach. This database is employed to handle documents in a free schema design that gives to the developer great flexibility to store and use data.
This course focuses in the MongoDB technology as a tool to implement new ways to store and handle data that can be modeled as a document format.
The videos in the course covers download, installation, configuration, schema design, an overview of the database structure, CRUD operations, aggregations and map-reduce, indexing, integration of MongoDB with PHP, Perl, Pyton, Java, Ruby and .NET drivers, replication, sharding, GridFS and other administrative operations of MongDB.
All the examples and scenarios discussed are presented in real world situations.
The main audiences of this course are an IT professional that have basic knowledge of programming and databases who wants to start with NoSQL technology through MongoDB. Since the course focus on beginners and explain every basic concept there is no business requirements needed to be known before the start of the course.
jueves, 22 de diciembre de 2011
Virtual Developer Day: Oracle WebLogic Server 12c
Para registrarse y ver detalles del evento, dar click aquí.
miércoles, 21 de diciembre de 2011
Online Session for Oracle Applications Development Framework (ADF)
Querent Technologies is pleased to invite you to join the upcoming Online Session for Oracle Applications Development Framework (ADF).
Detailed Date and Time of Session
India Standard Time - December 24 at 07:00 AM
Pacific Standard Time - December 24 at 05:30 PM
Central Standard Time - December 24 at 06:30 PM
Eastern Standard Time - December 24 at 08:30 PM
Australian East Standard Time - December 24 at 11:30 AM
UAE Standard Time - December 24 at 05:30 AM
A Free Demo Session is planned on 24th Dec 2011 at 7:00 AM (IST)
Detailed Date and Time of Session
India Standard Time - December 24 at 07:00 AM
Pacific Standard Time - December 24 at 05:30 PM
Central Standard Time - December 24 at 06:30 PM
Eastern Standard Time - December 24 at 08:30 PM
Australian East Standard Time - December 24 at 11:30 AM
UAE Standard Time - December 24 at 05:30 AM
A Free Demo Session is planned on 24th Dec 2011 at 7:00 AM (IST)
miércoles, 16 de noviembre de 2011
JPA: Caso Completo de RelationsShips
Aqui presentamos un caso que comprende todo el tema de relationships en JPA.
El caso es bastante sencillo:
- Hay una entidad propietario que se implementa con una herencia simple ( persona natural y persona juridica ) y que además posee una clase embebida ( direccion).
- Existe una entidad Auto que puede tener servicios relacionados ( mantenimientos ).
Además, cada mantenimiento puede tener varios repuestos utilizados.
El modelo de Objetos y las relaciones es el siguiente:
El proyecto Java ( es un proyecto Java Stand Alone ) lo puedes descargar de aquí. Acuerdate de colocar las librerías para EclipseLink, Hibernate u OpenJPA y del conector de MySQL. EL persistence XML está preparado para funcionar con 3 unidades de persistencia apuntando a una base de datos que debes crear vacía ( con nombre "manytomany" ) .
Luego de ejecutar los programas de Insert, los SQL directos a la base de datos te deben mostrar:
Ejemplos JP-QL: Ahora veremos como navegar entre las relaciones de las entidades. Asegúrate de ver bien los atributos que tiene cada entidad.
Ejemplo 1: Todos los propietarios que tiene automovil
Ejemplo 2: Todos los propietarios que tiene automovil con los servicios ejecutados
Ejemplo 3: El costo total del servicio por auto ( sin considerar repuestos )
Ejemplo 4:El costo total de repuestos por auto
Hasta la próxima.
No te olvides de dejar un comentario.
Etiquetas:
Eclipselink,
Hibernate,
JPA,
MySQL,
OpenJPA
domingo, 6 de noviembre de 2011
Configurando el persistence.xml en JPA
Y la pregunta de rigor sería ¿ Qué contiene el archivo persistence.xml ?
La respuesta es bastante sencilla, contiene las "persistence unit" o Unidades de Persistencia que a su vez, indican con que implementación JPA se trabaja, cuales son las entidades, el tipo de conexión a la base de datos y otros parametros propios de la implementación JPA.
Paso 1: Crear las Entidades Java, lo cual se puede realizar vía
programación del código o por Ingeniería reversa desde la Base de Datos.
Paso 2: Configurar el archivo “persistence.xml” que se ubica en el proyecto
dentro del folder META-INF.
Luego de crear
la Entidad Java, nótese que se marca un error en la clase. Observando el error
dentro de la clase Java indica que “Class "com.ejemplo.jpa.Person" is
mapped, but is not included in any persistence unit”.
Esto se debe a
que falta configurar el archivo persistence.xml.
Paso 3: Definir la unidad de persistencia. En
este caso se llama “DemoJPA”
Paso 4: Registrar el provider (implementación de JPA ) que Eclipse lo
realiza por defecto:
Paso 5: Registrar las entidades
Se debe
registrar una línea por cada entidad del proyecto.
Paso 6: Registrar las propiedades de conexión a la Base de datos:
En JPA 2.0 estas propiedades de conexión a la base de datos son estándares y comienzan con "javax.persistence".
Recordar
cerrar el tag “<properties>”.
NOTA: Se definen las propiedades de conexión
a la base de datos debido a que estamos empleando Java SE con conexión directa
(en el paso 3 se observa que dice “RESOURCE_LOCAL”). En caso de utilizar DataSource no sería
necesario esto (el parámetro del paso 3 sería “JTA”).
¿ Qué pasa si quiero usar otra implementación de JPA ? ... en el siguiente post explicaremos esto.
¿ que te pareció ?. No te olvides de dejar un comentario.
viernes, 28 de octubre de 2011
Entendiendo JPA en pocos pasos ...
ilustrativo de como entender el paso de las tecnologías como JDBC e Ibatis a un modelo de Objetos con JPA.
La verdad que el plasmar el gráfico y la explicación de esa manera no se me habían ocurrido antes, pero más vale tarde que nunca. Y aqui va:
Punto #1:
JPA = Java Persistence API, es una especificación Java basada en el JSR 220.
Al ser una especificación, tiene implementaciones, siendo las más comúnmente utilizadas: EclipseLink (cuyo core se basa en Toplink), Hibernate y OpenJPA.
Punto #2:
En nuestros cursos tradicionales de Base de Datos, aprendimos que una base de datos está compuesta por tablas, las cuales tiene filas (rows) y columnas (fields) y que el modelo actualmente utilizado es el modelo Relacional (RDBMS) que usualmente se modela e implementa utilizando las 3 primeras formas normales ( recordar que hay una 4ta y 5ta forma normal pero que no se utilizan con mucha frecuencia ).
Punto #3:
Cuando pasamos a un modelo OR-M ( object Relational - Mapping ) significa que nuestra fuente de datos está en el modelo relacional, pero la lógica de nuestra aplicación maneja Objetos ( en este caso objetos Java ) y que por tanto, utilizamos una implementación de la API JPA para ello (cualquiera de las tres mencionadas al inicio).
1) El modelo Relacional usa SQL --> Tablas
2) El modelo de Objetos usa JP-QL --> Entidades
Tambien, hay dos entornos bien definidos:
Tambien, hay dos entornos bien definidos:
1) Las tablas viven dentro de una base de datos ( y esta a su vez dentro de un manejador de base de datos RDBMS)
2) Las entidades viven dentro de un "Entity Manager" (que es similar a un SqlClientMap de Ibatis ).
2) Las entidades viven dentro de un "Entity Manager" (que es similar a un SqlClientMap de Ibatis ).
Punto #4
Es así que una "Entidad" JPA equivale a dos cosas:
1) A la definición de una clase Java que sigue las reglas de los JavaBeans: implementa Serializable, constructor por defecto y getters/setters.
2) Al momento de instanciar una Entidad (clase), dicha instancia (objeto) equivale a un registro en la Tabla relacional.
Entonces, ¿ cómo convierto un JavaBean en Entidad ? ... Fácil, le agregamos dos anotaciones :@Entity y @Id
Según el gráfico, JPA interpreta que:
1) La entidad se llama igual que la clase.
2) La Tabla en la base de datos se llama igual que la clase.
Si queremos hacer cambios, podemos usar:
@Entity (name="nombre-entidad" )
@Table (name="nombre tabla")
Recordar que toda entidad JPA debe tener un ID único.
1) La entidad se llama igual que la clase.
2) La Tabla en la base de datos se llama igual que la clase.
Si queremos hacer cambios, podemos usar:
@Entity (name="nombre-entidad" )
@Table (name="nombre tabla")
Punto #5
Además, necesitamos registrar la Entidad en el archivo "persistence.xml".
Ahora bien, si no queremos utilizar anotaciones, tendremos que escribir el XML del archivo "orm.xml" (que me parece más tedioso ).
El archivo persistence.xml contiene la definición de la "Persistence Unit" a partir de la cual se genera un "Entity Manager". La explicación será materia de un siguiente post.
El archivo persistence.xml contiene la definición de la "Persistence Unit" a partir de la cual se genera un "Entity Manager". La explicación será materia de un siguiente post.
Hasta aqui, creo que es bastante sencillo. La parte más "complicada" son las relationships entre entidades que veremos en un siguiente post.
No te olvides de dejar un comentario. ¡ Gracias !
Etiquetas:
DAW-II,
Eclipselink,
Hibernate,
JPA,
OpenJPA
martes, 25 de octubre de 2011
miércoles, 19 de octubre de 2011
Struts 2 y Validaciones ( Parte II )
En este post presentamos un gráfico explicativo del funcionamiento de las validaciones en el framework de Struts2.
- Interceptor “validation” que ejecuta la validación en sí misma (sea manual, xml, custom o anotaciones) y crea una lista de errores para cada campo específico.
- Interceptor “workflow” que verifica la presencia de errores de validación. Si existen, retorna el resultado “input” (por default). Si no hay resultado “input” definido, se lanza un error.
Tambien una aclaración al ejemplo de validación de fechas: Para que obligue a poner una fecha y a la vez valide que la fecha esté dentro del rango, el archivo XML debe tener lo siguiente:
<field name="birthDate">
<field-validator type="requiredstring">
<message key="Debe ingresar una fecha" />
</field-validator>
<field-validator type="date">
<param name="min">01/01/1900</param>
<param name="max">31/12/2012</param>
<message> La fecha debe estar entre 1900 y el 2012</message>
</field-validator>
</field>
<field-validator type="requiredstring">
<message key="Debe ingresar una fecha" />
</field-validator>
<field-validator type="date">
<param name="min">01/01/1900</param>
<param name="max">31/12/2012</param>
<message> La fecha debe estar entre 1900 y el 2012</message>
</field-validator>
</field>
No te olvides de dejar un comentario.
domingo, 16 de octubre de 2011
Lima Hack 2011 - Con el auspicio de la UPC
LimaHack es un evento organizado por especialistas en seguridad informática, con la finalidad contribuir al crecimiento de la cultura de seguridad informática en el país y colaborar en la formación de profesionales en la materia.
El evento es gratuito. Pueden encontrar mayor información en el sitio web.
país y colaborar en la formación de profesionales en la materia.
A diferencia de los eventos realizados anteriormente en Lima, LimaHack es netamente técnico, muestra la seguridad desde la perspectiva del atacante, se realizará con demostraciones en vivo.
ISIT 2011
2nd International Symposium on Innovation and Technology
ISIT 2011
November 28-30, 2011, Lima - PERÚ
Costo para peruanos S/. 100 nuevos soles.
Para información y registro ir al Sitio web
viernes, 14 de octubre de 2011
NoSQL Databases
Hasta que por fin ... Oracle sale al mercado con una base de datos NoSQL: "Oracle NoSQL Database" para hacerle competencia a las ya existentes como: MongoDB y CouchDB o Voldemort y BigData entre otras.
Lamentablemente, la versión "Community Edition" Open Source aun no está disponible. Estaremos atentos.
jQuery Plugin con Google Code
El objetivo de esta sesión fue repasar Struts2, DAO's y JDBC (Recuerda que ya dejaremos de usar JDBC para entrar de lleno a JPA), además de analizar como funciona la "grid" de éste plugin.
Si gustas lo pruebas con Tomcat o con WAS ( igual va a funcionar ).
En esta sesión, por fin nos entregaron los manuales del curso, sin embargo éste tema no está dentro del manual porque considera el ejemplo de la "grid" muy similar a jMesa o a DisplayTag ( acuerdate de LP-II ).
El objetivo es consultar una tabla ( "Person" ) y mostrar los datos dentro de una "grilla":
- Aquí está el material en formato PDF correspondiente a las páginas JSP.
- Descarga la aplicación base aquí. En esta aplicación funciona el ejemplo 1 completamente ( no te olvides de incluir el driver de MySQL en el folder lib del proyecto o en el classptah de tu servidor Tomcat ... sino, te dará un error.
- Descarga el esquema de la base de datos MySQL aquí. La base de datos se llama "quickstart" y sólo tiene una tabla "person".
Como tarea completa las otras 3 opciones del proyecto. Analiza cuidadosamente como los tags dela página JSP envían datos al Action y este a su vez los pasa al DAO.
Por favor ... deja un comentario. ¡ Gracias !
miércoles, 12 de octubre de 2011
Proyecto 2011-II
Aquí dejo el documento con los requerimientos del proyecto final del curso para que lo vayan analizando.
Como estamos en la eliminatorias del mundial para el 2014, el proyecto está relacionado a esto ( así le ponen más empeño y dedicación ).
Deberá implementarse con JPA y JSF. Ante cualquier duda o consulta, por favor coloquen un comentario.
¡ Suerte !
lunes, 10 de octubre de 2011
Nuevo ciclo 2011-II
Bienvenida
Bienvenidos a una nueva edición del curso "Desarrollo de Aplicaciones Web II".
Los aspectos introductorios del curso los pueden ver en este enlace.
A partir de esta edición, los comentarios deben tener autor ( no se aceptan anónimos ). El blog está enlazado tambien con Facebook. Se ruega participación tanto en los comentarios como en las encuestas y demás opciones del curso.
¡ Saludos !
SegurInfo 2011
XVII Congreso y Feria Interamericana de Seguridad de la Información.
Para registrarse en el evento ir al siguiente enlace
Suscribirse a:
Entradas (Atom)