lunes, 9 de diciembre de 2013

Revisión del libro: Developing RESTful Services with JAX-RS 2.0, WebSockets, and JSON

Developing RESTful Services with JAX-RS 2.0, WebSockets, and JSON
Impresionante libro sobre RESTful, JAX-RS, WebSockets y JSON. A pesar que tiene pocos capítulos (sólo cinco), hace una explicación muy detallada y con ejemplos prácticos sobre WebServices y las mejores que viene con HTML5, como por ejemplo el SSE (Server-Sent Events).

Lo que más me ha gustado es que se van describiendo poco a poco los conceptos, con ejemplos básicos, concretos y bien explicado. Y el último capítulo desarrolla un proyecto completo utilizando todo lo aprendido.

También habla sobre la manipulación de documentos JSON, presenta las características de Servlet 3.1 así como las funcionalidades asíncronas que viene con la versión JavaEE7 tanto para los servlets como para EJB 3.1 y 3.2

El libro lo pueden adquirir en PacktPub.com: http://bit.ly/IbbTOm


lunes, 2 de diciembre de 2013

Tutorial JSF 2.2 - Sesión 4: Facelets (Parte I)

Tutorial JSF 2.2 - Sesión 4: Facelets (Parte I)
Los facelets es una declaración bastante ligera de declaración de páginas web. En los JSP, el lenguaje era Java dentro de los JSP, y estos fragmentos se llamaban scriptlets. En cambio, en JSF, se llama facelets.

Los facelets son un tema extenso, así que - como no va a entrar todo en un post - lo haré por partes. No tengo idea de cuantas partes tomará, creo que serán algo de diez. Glup! Pero veremos todo lo que concierne al JSF 2.2, incluyendo al HTML5.

Comencemos...

lunes, 25 de noviembre de 2013

Revisión del libro: Developing Windows Store Apps with HTML5 and JavaScript

Me han dado a leer un libro para revisar y dar mi opinión al respecto. A pesar que no es Java, me pareció interesante verlo ya que trata del HTML5 y JavaScript.

El libro se llama "Developing Windows Store Apps with HTML5 and JavaScript" Si eres desarrollador web, y deseas desarrollar aplicaciones para Windows8, este libro te podrá interesar.

martes, 19 de noviembre de 2013

Tutorial JSF 2.2 - Sesión 3: Ciclo de vida de una aplicación

Tutorial JSF 2.2 - Sesión 3: Ciclo de vida de una aplicación
Siguiendo con el tutorial de JSF 2.2, esta vez veremos el ciclo de vida de una aplicación. Es importante conocer esto, ya que podremos saber cómo viaja una petición desde el cliente web, es procesado por el servidor, y cómo devuelve el resultado.

lunes, 18 de noviembre de 2013

Revisión: Learning JavaScriptMVC

Acabo de leer (aunque me demoré mucho) el libro "Learning JavaScriptMVC" de Wojciech Bednarski , y aquí tengo mi comentario.

domingo, 17 de noviembre de 2013

Oracle Certified Associate, Java SE 7 Programmer: Mi experiencia

Los que me siguen en Facebook y Google+ habrán notado que de cuando en cuando he estado posteando preguntas de "tipo certificación". No era para retarlos, ni para ver quien sabía más. Sencillamente era para compartir con ustedes - los seguidores de este humilde blog - algunas preguntas curiosas que he encontrado mientras estaba estudiando para mi primer examen de certificación: la OCAJP 7. Y, gracias a Dios, y a mucho estudio, aprobé :). Y en este post quiero compartir mi experiencia para poder aprobar este examen.

jueves, 7 de noviembre de 2013

Resumen: Conferencia Buenas Prácticas en Desarrollo de Software No more mocks!!! Move on to Real Testing on JEE

El día de ayer (06/11/2013) se realizó en el "Hotel Sonesta El Olivar" de San Isidro (Lima - Perú) una charla sobre las buenas prácticas en desarrollo de aplicaciones JavaEE a cargo del Ing Carlos Echevarría. El tema principal fue la implementación de pruebas reales de una aplicación en lugar de hacer pruebas unitarias autónomas y evitando el uso de MockObjetos 'inanimados'.

viernes, 11 de octubre de 2013

Cómo cargar una página JSF en MyFaces / ADF dentro de un iframe

Oracle Application Development Framework (más conocido como ADF) está basado en Apache MyFaces. Algunas de sus configuraciones se puede hacer en los archivos de Myfaces, como el trinidad-config.xml. Esta semana me he roto la cabeza tratando de cargar una página JSF de ADF dentro de un iframe que estaba en otro contexto. Noté que sí cargaba la página, sí la identificaba, pero no la mostraba. Comencé a revisar la configuración del archivo web.xml y encontré un parámetro muy escondido.

miércoles, 25 de septiembre de 2013

Tutorial JSF 2.2 - Sesión 2: Navegación

La navegación en JSF hace fácil la navegación entre páginas y permite manejar procesamiento adicional que sea necesario al momento de ir entre una página y otra.

Hay dos tipos de navegación: la implícita y la definida por el usuario.
En este post veremos estos dos con un ejemplo simple.

viernes, 20 de septiembre de 2013

Mostrar únicamente el contenido del portlet en Liferay

Este es un post corto, ya que es un tip.

Los portlets  tienen tres estados de ventana:
  • Minimizado (minimized)
  • Maximizado (maximized)
  • Normal (normal)
El primero hace que el portlet se muestre "cerrado", y que solo muestre el título.
El segundo hace que el portlet se muestre en toda la página web del portal.
El tercero es el común: se muestra dentro del diseño del portal.

Pero estos tres estados tienen algo en común: muestra el portlet dentro del diseño del portal, incluyendo sus javascript, los diseños, la cabecera, su theme, etc etc etc. Está muy bien si lo que queremos es mostrar todo el look&feel del portal adornando nuestro portlet.

Ahora bien: si estamos haciendo un portlet que su contenido queremos que no salga incrustado (la palabra 'embebido' suena feo en castellano) en el portal ¿cómo le hacemos?

miércoles, 18 de septiembre de 2013

Configurando NetBeans con contenedores web / javaee

Por la mala experiencia que tengo con los instaladores en Windows, prefiero que los aplicativos sean unos archivos que se puedan descomprimir. Si no hay más remedio que instalarlos, pues lo hago.

NetBeans tiene una versión "portable" siendo el instalador un archivo .zip con todo el IDE dentro. Lo bueno de esto es que el mismo .zip puede ser ejecutado en cualquier plataforma que tenga instalado el JDK. (Ese es el gran motivo por lo que uso poco el Eclipse).


Lo malo de esto es que no incluye los servidores Java EE.



Es algo obvio el motivo, ya que el instalador nativo genera todos los archivos y configuraciones necesarias para que el IDE funcione.... en cambio un .zip solo contiene el contenido.

Pero no hay de qué preocuparse, porque podemos configurar el NB con un Tomcat, GlassFish y demás servidores, sean nuevos, o existentes. Aquí hablaremos un poco de esto.

martes, 17 de septiembre de 2013

Tutorial JavaServer Faces 2.2 - Java EE 7 - Sesión 1

¡Ahora sí! Mi primer tutorial de JSF! Lo tengo esperando desde la versión 2.0 :) Pero más vale tarde que nunca.
Yo era muy defensor de Struts 1x, y lo veía con malos ojos al JSF 1.x. Cuando apareció la versión 2.0 con el JavaEE 6, lo probé y me resultó mucho más fácil que el Struts. Por ello, me propuse (desde post anteriores... muy anteriores) a hacer un tutorial de JSF. Espero que me puedan seguir, y si tienen alguna duda, no duden en escribir en los comentarios de este post, en el Google Plus, y en el Facebook.

¡Comencemos!

miércoles, 11 de septiembre de 2013

Mapeo Manual de Objetos a base de datos

Nuestro amigo +Edwin Ilovares ha estado publicando un tutorial en el Google Groups de este grupo (https://groups.google.com/forum/?fromgroups#!forum/apuntesdejava) sobre el mapeo de objetos a base de datos. Con esta técnica que nos está mostrando, podremos acceder a la base de datos de una manera transparente, evitando el uso de las clases de JDBC Connection, Statement, ResultSet, etc.


  1. Parte 1
  2. Parte 2a y Parte 2b
  3. Parte 3
  4. Parte 4
Y aquí está el código fuente del proyecto desarrollado:


Muchas gracias +Edwin Ilovares  por tu aporte a la comunidad!.

jueves, 5 de septiembre de 2013

Swing + DB + Spring

Aquí, un pequeño ejemplo sobre el uso de Spring DAO con Swing. https://java.net/projects/apuntes/downloads/download/Swing/DemoSwingDBApp.tar.gz Por si acaso usa Java 7, y Apache DB, con la base de datos "Sample". Espero que les sea de utilidad.

miércoles, 14 de agosto de 2013

JavaEE 7: Adios ManagedBean, Bienvenido CDI

En la reciente versión de Java EE7, los ManagedBean ( o también llamados Bean Administrados) ya no se usarán. Estos beans se usaban como Backend de las páginas JSF. En su lugar, se usarán inyección de dependencias, ya que se instanciarán de la misma manera como lo hacía los ManagedBean.

martes, 23 de julio de 2013

Cómo agregar un javascript o css a un portlet

En liferay, cuando creamos un portlet, éste tiene un .js y un .css asociados directamente al portlet. Modificamos allí, creamos nuestras cascadas o funciones JavaScript y listo. ¿Pero si queremos agregar un .js de terceros únicamente a este portlet? Aquí dejo un tip.

Primero, debemos considerar el taglib liferay-util

<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %>

Luego, debemos agregar los siguientes tags, si queremos que aparezcan nuestro JavaScript o CSS al inicio de la página web.


<liferay-util:body-top>
 <script type="text/javascript" src="<%=PortalUtil.getStaticResourceURL(request,request.getContextPath() + "/js/mi_archivo.js")%>"></script>
 
</liferay-util:body-top>

<liferay-util:body-bottom>
 <script type="text/javascript">
  alert("cargado");
 </script>
</liferay-util:body-bottom>


Y si queremos que aparezca al inicio de todo el HTML, usamos el tag <liferay-util:html-top> Y al final del html <liferay-util:html-bottom>

viernes, 5 de julio de 2013

Apache 2.4 + Tomcat 7 en Windows

¿Para qué usar Apache con Tomcat si Tomcat ya es un servidor web?
Pues bien, sabemos que el Tomcat utiliza el puerto 8080, y el Apache 80. Bastaría con que cambiemos el puerto del Tomcat a 80 y listo, los url deberían ser de la forma http://midominio.com y ya no http://midominio.com:8080

Sabemos que es más elegante evitar que la dirección no tenga puerto. Pero, si tenemos una aplicación en PHP o Python que necesariamente debe correr en Apache ¿qué hacemos? Creamos un subdominio de la forma http://app1.midominio.com http://app2.midominio.com Pues, no está mal.

Lo pondré más especial: no se van a crear subdominios, sino, que todo debe estar dentro del dominio principal, como sub carpetas.  Así, por ejemplo:

http://midominio.com/app1.python
http://midominio.com/app2.php
http://midominio.com/app3.tomcat

y.. algo más divertido... le agregamos otro contenedor java totalmente diferente

http://midominio.com/app4.weblogic

Entonces, ya tenemos un pequeño problema ¿cómo hacemos para convivir Apache con Tomcat, y, de paso, con otro contenedor?

Y la cereza del helado: que el Apache funcione sobre Windows!!!

sábado, 8 de junio de 2013

Java API JSON en Java EE 7 (JSR 353)

El JSON es un formato bastante usado para el envío de datos por internet. Es más ligero que los XML, y es usado en el API de las redes sociales tales como Twitter, Google, Flickr, Facebook, etc.

En Java, para poder procesar (parsing) un texto JSON, existen varias bibliotecas (revisar al pie de la página de http://json.org/json-es.html). Personalmente me gusta el GSon de Google. Pero es tiempo que el mismo Java tenga incorporado su propio API para manejar JSON. En este post hablaremos un ejemplo de cómo consumir un JSON, usando otro ejemplo usado anteriormente.

miércoles, 22 de mayo de 2013

WebSockets en Java EE 7 (JSR 356)

Los WebSockets son una manera de poder comunicarse vía web entre un cliente y un servidor. A diferencia con otras tecnologías parecidas como los RESTful WebService, es que esta tecnología es bidireccional. El RESTful tiene que constantemente pedir al servidor para ver si hay un cambio, y con algunas técnicas "push" se puede simular una comunicación bidireccional. Con WebSockets, la comunicación es nativa.

Ya que estamos cerca del lanzamiento de Java EE 7 implementado en GlassFish 4.0, veremos un pequeño esbozo de esta tecnología.

lunes, 6 de mayo de 2013

¿Por valor o por referencia?

Esta es una pregunta existencial para todo programador Java. Cada uno encuentra una respuesta satisfactoria. Pero ahora veremos, basándonos en el libro para Certificación SCJP 1.5 de Katty Sierra, sobre la respuesta correcta.

lunes, 15 de abril de 2013

RESTful parte 5: REST con autenticación

Hasta el momento hemos visto un CRUD usando RESTful, con un objeto y varios objetos.

Ahora, quiero mostrar el manejo de la seguridad en RESTful usando los estándares de Java EE6.


miércoles, 10 de abril de 2013

Probando Java EE 7 con NetBeans



Ya se acerca JavaEE 7, y que mejor es ir probando sus funcionalidades. Así que comenzaré (y espero continuar) con una serie que habla sobre Java EE 7.

miércoles, 27 de marzo de 2013

JSON WebService Liferay 6.1 (GA2) (Queja)

Este es un post pequeño, y quizás un poco fastidiado por algo que encontré en esta nueva versión de Liferay 6.1 GA2 (es decir, la 6.1.1)

Para crear un JSON WebService, basta con crear un Service en el Portlet y ya está publicado. (Leer aquí http://www.liferay.com/community/wiki/-/wiki/Main/JSON+Web+Services)

Si usamos Tomcat, no existe ningún problema. Es más, podemos ver el API WebService en una web para hacer las pruebas desde la misma web. Por ejemplo: si creamos un portlet llamado "Test-portlet" y creamos un servicio llamado "Calc", podemos entrar a http://localhost:8080/Test-portlet/api/jsonws y vemos todo el API.

Pero... si usamos el GlassFish, no aparecerá la página. Según la gente de LR, cada contenedor tiene manera diferente de reconocer su contexto. Me consta: depuré el código fuente, y desde GlassFish devuelve el contexto "null" mientras que con tomcat devuelve el contexto (o sea, Test-portlet) Y la salida que me dan es llamar a un URL con un formato especial para poder usar el servicio.
Es decir, así

http://localhost:8080/api/secure/jsonws/Test-portlet.calc/sumar/a/3/b/4

Ver: http://issues.liferay.com/browse/LPS-33791

En fin, es opensource, así que quiero darme un tiempo para corregir este problema. Porque si uno necesita implementar liferay en un contenedor que no sea Tomcat - por politicas de la empresa - entonces, tendremos serios problemas.


viernes, 15 de febrero de 2013

JMX en Tomcat Windows Service

JMX es una tecnología que permite la administración y monitoreo de aplicaciones Java. A partir de la versión 6, en el JDK viene incluido el Java VisualVM que es una herramienta que permite monitorear visualmente las aplicaciones Java en la máquina virtual. Lo pueden encontrar dentro de la carpeta bin del JDK.

Cuando lo ejecutan, pueden ver como se está ejecutando las aplicaciones en Java, sus clases, qué tipo de objeto es el que está usándose más, etc. Es muy recomendable usarlo para mejorar el rendimientos de las aplicaciones.

Tomcat también puede ser monitoreado desde Java VisualVM, pero encontré un detalle si ejecuto el Tomcat en modo servicio de Windows: no puedo conectarme desde el Java VisualVM.

La solución es simple: modificar la configuración del servicio de Tomcat.

Ejecutamos el tomcat7w.exe desde el servidores, y nos mostrará la configuración del servicio Tomcat. En la sección "Java" agregar estas líneas en la sección "Java options"

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1001
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false


Luego, reiniciamos el servicio y listo. Ahora, desde el Java VisualVM, entramos a File > Add JMX Connection y agregamos el IP del servidor a monitorear, y el puerto, que en este caso, es 1001 (porque así lo pusimos en el Java Options)



 y listo, a comenzar a monitorear!


martes, 22 de enero de 2013

Recomendaciones para el manejo de excepciones

Cuando se programa, es necesario manejar las excepciones, controlarlas y aprovechar su información.

Considero que hay tres malas prácticas que se deben evitar cuando queremos usar un método que lanza un excepción manejada.

Antes de continuar con este apunte, vamos a repasar lo que es una excepción.

viernes, 18 de enero de 2013

Backup de todas las bases de datos en MySQL



Comparto otro post no java (OPNJ) referente a MySQL.

La idea es simple: quiero hacer backup de todas las bases de datos de MySQL, pero con las siguientes condiciones:

  • Un archivo sql por cada base de datos
  • Que en el nombre del archivo indique la fecha en que se hizo el backup
  • Y que se ejecute en Windows.
Hacemos un archivo .bat con el siguiente contenido:

set USER=root
set PASS=password
set DB_LIST=databases.txt

REM obtenemos todas las bases de datos
echo  show databases where not `Database` like '%%schema' | mysql -u %USER% -p%PASS% --column-names=false > %DB_LIST%

REM recorre el contenido del archivo y ejecuta el comando mysqldump
FOR /F %%G  IN (%DB_LIST%) DO  mysqldump -u %USER% -p%PASS% -B %%G -R --hex-blob=true > %%G-%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%.sql

y ahora, para que se ejecute cada cierto tiempo, usar el "Programador de Tareas de Windows".

 saludos