Gradle, Java

Gradle: Multiproyectos Java

Les dejo una serie de 3 videos que realicé, en donde explico mediante un ejemplo práctico, la construcción de un proyecto Java dividido en módulos o subproyectos construidos sobre Gradle.

Referencias: http://rominirani.com/2014/07/29/gradle-tutorial-part-3-multiple-java-projects/

Java

Entendiendo definitivamente el uso de Interfaces

Mucha información podemos encontrar en internet sobre el concepto y ejemplos de uso de una Interfaz en Java. Se nos dice que las interfaces simulan la herencia múltiple, que son buena técnica para desacoplar el código, etc., sin embargo la gran mayoría de esos ejemplos se limitan a algo como esto y terminamos por no entender realmente el uso real y el poder de las interfaces.

Es claro que el ejemplo anterior es muy sencillo y se puede entender fácilmente, pero aun así seguimos sin entender ¿Por qué usar interfaces? En el ejemplo anterior, ¿Cuál es la diferencia entre usar interfaces y no haberlas usado? Bueno, en este artículo trataré de dar respuesta a ello.

 

Ordenar un arreglo de objetos…

Resulta que en nuestra empresa existen muchísimos flujos por donde viaja la información. El departamento «X» nos deposita en una interfaz que es un archivo de texto, una lista de proveedores externos, en otro archivo nos deposita una lista de productos, etc., información que nosotros debemos mostrar de forma ordenada en un reporte a nuestros usuarios. Así que comenzamos por escribir nuestra primera clase llamada «Despacho»

 

 

Adicional a lo anterior, le creamos setters y getters a cada uno de los atributos de la clase (razonSocial, RFC, etc.) y sobrescribimos el método toString.

 

Esta clase Despacho representa a un proveedor de nuestra empresa. Así que ahora debemos pensar en cómo vamos a ordenar objetos de este tipo. Se me ocurre que vamos a crearle a la clase Despacho el siguiente método.

 

 

¿¿¿Y lo anterior que es???… Bueno, sencillamente es un método que me compara en base al id Despacho el despacho actual contra otro despacho que recibe como parámetro y si el despacho actual tiene un ID mayor al del despacho comparado entonces me retornara un 1, en caso de que el ID del despacho actual sea menor que el del ID del despacho comparado me retorna -1 y en caso de ser iguales me retorna cero. Por el momento no pregunten el por qué de este método.

Posteriormente debemos crear alguna clase que me implemente la funcionalidad de ordenar, así que vamos a crear una clase llamada «Ordenador» y ya que el fin de este tutorial no es explicar algoritmos de ordenamiento, nos vamos a fusilar el código de esta página http://codigomaldito.blogspot.mx/2007/11/ordena-burbuja-en-java.html y lo vamos a implementar en nuestra clase ordenador con algunas ligeras modificaciones, de tal forma que tengamos algo como esto:

 

 

Como podemos observar, el método estático «ordenar» recibe un arreglo de objetos Despacho y en la línea 25 vemos como manda a llamar al método «comparar» que definimos antes.

Ahora ya solo nos resta crear una clase para probar lo anterior y ahí mismo definir objetos despacho simulando que en realidad los estamos leyendo de un archivo de texto.

 

Al correr el ejemplo anterior vemos que nos imprime los objetos desordenados ya que aun no mandamos a llamar al método «ordenar» de la clase Ordenador.

 

Ahora vamos a mandar a llamar al método ordenar, ya que se trata de un método estático, no será necesario crear una instancia de la clase Ordenador.

 

Al correr nuevamente el ejemplo y verificar la salida veremos que ya tenemos los elementos ordenados…

 

Hasta aquí todo va muy bien… ya podemos presentar un reporte al usuario con la información ordenada…. Pero ahora necesitamos ordenar otras clases llamadas Productos, Gestores, etc…. Dedique un momento antes de seguir leyendo como podría implementar esta funcionalidad…

Una de las probables cosas que se nos ocurren es crear un método de ordenamiento para cada objeto que necesitemos, pero obviamente esto es una pésima idea!! ¿¿Se imagina cuanto código duplicado tendríamos??

 

Aquí es donde las interfaces llegaran a nuestro rescate. Vamos a crear una interfaz genérica llamada «Comparable».

 

Ahora, nuestra clase Despacho que hemos definido anteriormente, deberá implementar esta interfaz.

La clase despacho ya tenía un método llamado «compare», así que ahora al implementar Comparable ese método pasara a ser la implementación.

Finalmente, vamos a modificar la clase Ordenador para que en lugar de recibir objetos Despacho, reciba un arreglo de objetos Comparable.

 

Con esto ahora ya podemos ordenar cualquier objeto que implemente nuestra interfaz Comparable. Así que no importa si ya tenemos 10 clases que necesitamos ordenar, lo único que tendremos que hacer es implementar Comparable en cada una de ellas y definir el criterio de ordenamiento. Creamos una clase llamada Gestor como a continuación se muestra.

 

Note que tenemos nuevamente el método «compare» pero ahora hemos invertido las condiciones. Con esto ahora conseguiremos tener un ordenamiento descendente.

 

Y la salida al ejecutarlo es:

 

Y ahora necesitamos ordenar productos pero ya no por ID sino por nombre… No importa, a nuestra clase Producto le implementamos Comparable y definimos en el método «compare» el criterio de ordenamiento que sería por nombre.

Todo el ejercicio anterior ha sido un ejemplo muy claro del poder de las interfaces y lo que realmente pueden hacer por nosotros… Aunque bueno, he hecho un poco de trampa puesto que el mismo API de java ya define básicamente clases que hacen lo anterior… Veamos.

En Java ya existe una interfaz Comparable dentro del paquete java.lang que define un método llamado «compareTo». Vamos a ir a la clase Despacho y a quitar nuestra propia interfaz Comparable y sustituirla por la del paquete java.lang.

Y definimos el método «compareTo» (Ojo, no se confunda!!! Nuestro método se llamaba solo «compare» y que nombre así muy a propósito. El método compareTo es de la interfaz Comparable del paquete java.lang.)

 

 

Finalmente les presento a la clase Collections del API de java. Esta clase tiene un método llamado «sort» que recibe una lista de objetos que queremos ordenar, pero para que este ordenamiento funcione, estos objetos deben implementar a la interfaz Comparable del API de java.

 

 

Uffff… pues vaya que trabajamos arduamente! Ya existiendo una clase Collections, nosotros creamos nuestra propia versión de dicha clase y la nombramos Ordenador. Pero a final de cuentas esto nos sirvió para entender más a las interfaces en Java.

 

Java, JPA

JPA con NetBeans y Beans Binding API

Les dejo el primer video de una serie de tutoriales básicos de JPA con NetBeans.

En este primer video solo se describe el ejemplo que se va a realizar, así como una simple y sencilla interfaz gráfica. En el segundo video, se explicara como crear la Unidad de Persistencia y mostraremos los datos en un JTable. Finalmente en el tercer video explicaremos el uso del Beans Binding API para crear de forma muy rápida una interfaz funcional conectada a la BD.

 
Bases de Datos, Java

Desarrollo Rápido de Aplicaciones con Oracle

INTRODUCCIÓN


Cuando escuchamos Oracle, a la gran mayoría nos viene a la mente esa Base de Datos Relacional que tiene fama de ser la mejor de entre las actuales, sin embargo, hace algunos días conocí «Oracle Application Express» conocida como APEX, la cual es una Herramienta para el Desarrollo Rápido de Aplicaciones (RAD) que utilizan una Base de Datos Oracle y se basa en una interfaz web, lo mejor de esto es que se puede descargar gratuitamente y utilizarse incluso sobre Oracle DataBase Express Edition. Con APEX podemos crear rápidamente aplicaciones web que hagan uso de una base de datos Oracle, incluso con APEX podemos conectar con servicios web.


Voy a mostrar de una forma muy rápida de como crear un sencillo formulario de registro, por lo que tenemos dos formas de seguir este tutorial,

  1. Descargar e Instalar localmente APEX, lo que incluye también tener instalado Oracle DataBase. Queda fuera de este tutorial los pasos de instalación y configuración.
  2. Crear una cuenta gratuita en http://apex.oracle.com , la cual esta sujeta a una previa aprobación. Al final de los pasos de la creación de la cuenta, se te pedirá una justificación por la que deseas obtener una cuenta demo, basta con poner alguna palabra como «education», que en mi caso, la cuenta fue aprobada casi automáticamente.


LA INTERFAZ WEB DE APEX



Como lo comentamos, APEX esta basado en una interfaz web y con muy pocas líneas de código, podremos tener una aplicación web profesional.


Una vez creada nuestra cuenta, veremos una interfaz similar a la imagen. Podemos crear y administrar aplicaciones web, navegar por las tablas contenidas en nuestro esquema, ejecutar sentencias SQL, administrar usuarios, servicios y monitorear actividad, etc.


En este momento, nos centraremos en la opción «Application Builder»


CREANDO LA APLICACIÓN


Seleccionando la opción Application Builder,

  • Click en botón Create
  • Seleccionar DataBase en el Application Type
  • Crearemos una aplicación desde cero, seleccionando From Scratch
  • Tecleamos un nombre para nuestra aplicación y un ID que ya nos da por defecto, así como seleccionamos el nombre del Schema a utilizar.
  • Con esto ya tenemos creada una aplicación, sin embargo, una aplicación esta compuesta por Pages, por lo que ahora debemos seleccionar el tipo de página que deseamos. Cabe resaltar dos opciones,



    • Form: Creará un clásico formulario donde existirán cajas de texto, introducimos los valores y damos click en guardar.
    • Tabular Form: Creara como su nombre lo indica, un formulario tabular, es decir, nos mostrará los datos existentes en una determinada tabla de base de datos en forma tabular y con la posibilidad de actualizar directamente los datos que deseamos.

  • Seleccionamos Form y en la parte de abajo el nombre de la tabla sobre la cual basaremos el formulario. Por el hecho de crear nuestra cuenta demo en APEX, tenemos una serie de tablas ejemplo, dos de ellas son EMP y DEPT, seleccionamos DEPT por ser la más sencilla y click al botón Add Page.
  • Click en Siguiente.
  • Seleccionamos No Tabs y click en Next.
  • Seleccionamos que NO deseamos copiar componentes compartidos.
  • Una parte importante de las aplicaciones web es un sistema de autenticación de usuarios, APEX nos proporciona ya unos mecanismos muy sencillos de utilizar, seleccionaremos las opciones como lo muestra la imagen,


  • Ahora debemos seleccionar un Theme para nuestra aplicación. Afortunadamente también tenemos posibilidad de crear temas propios. En este caso, yo seleccionaré el Theme 20. Click en Next
  • Finalmente verificamos que la información sea correcta y damos click al botón Create.


Ya tenemos la aplicación creada y podemos ver que esta compuesta de dos página, una de ellas es la página que creamos en los pasos anteriores y la otra es la página de autenticación que en la imagen aparece como «101 – Conectar» debido a la mala traducción 🙂



  • Damos click sobre el ícono 1-Dept
  • En la columna Page Rendering damos doble click sobre P1_DEPTNO


Editamos su propiedad Display As.. y seleccionamos Text Field. Guardamos los cambios.

Regresaremos a la pantalla anterior y solo resta presionar el botón de Run. Se nos mostrará como primer página la autenticación de usuario. Por defecto, el usuario existente es el mismo que el de nuestra cuenta demo de APEX.

Una vez que nos hemos identificado, podremos ver el pequeño formulario de registro de Departamentos, que basamos en la tabla DEPT de la base de datos Oracle que ya existía al momento de crear nuestra cuenta demo.

Podemos especificar que el Deptono sea una secuencia o un trigger para no tener que insertarlo manualmente.
En otro tutorial escribiré como hacer otras cosas más interesantes, pero este fue un primer acercamiento a esta buena herramienta de Oracle que nos puede ayudar a realizar ciertas cosas de manera muy fácil.





App Engine, Java

Introducción al Google App Engine

Con la tecnología de Google App Engine
Google App Engine es un servicio de alojamiento gratuito (1 GB de almacenamiento) de aplicaciones web escritas en Java, Phyton o el propio lenguaje de google llamado «Go». Mediante Google App Engine, google proporciona a los desarrolladores una infraestructura para instalar aplicaciones web en los lenguajes antes descritos.
En el caso de una aplicación web desarrollada en Java, es posible mediante el App Engine desplegarla en la infraestructura que google proporciona y acceder a ella mediante un dominio gratuito del tipo http://name.appspot.com

Google App Engine proporciona un soporte para el desarrollo de aplicaciones Java en sus versiones 5 o 6 y de API’s y Frameworks tales como:

  • JavaServlet API 2.4
  • Java Server Pages
  • Java Server Faces 1.1-2.0
  • JPA y JDO
  • JavaMail
  • Groovy
  • BlazeDS
  • Spring MVC
  • Spring ORM
  • Struts 1.0 – 2.0
  • Tapestry
  • WebORB
  • etc…… más información

Para comenzar a utilizar App Engine, debemos crear una cuenta gratuita entrando al siguiente link , se nos pedira un número de celular a donde se nos enviara un código de confirmación, mismo que deberemos introducir. En el caso de México, el número de celular debe ser de la compañía Movistar (telcel, iusacell, etc., no funcionan), antes del número debemos introducir el código del país, por ejemplo, si fueras de México debes introducir algo como:

+52 xxxxxxxxxx

donde +52 es el código del país México.

Una vez creada la cuenta, mediante el Plugin de Google para Eclipse, podemos crear aplicaciones Java utilizando el SDK de App Engine, además de poder desarrollar aplicaciones utilizando el conocido GWT. Al instalar el plugin para eclipse, podemos también instalar el SDK de App Engine, por lo que no será necesario descargar el SDK y el Plugin por separado.

Ya instalado el plugin, podemos inmediatamente crear una aplicación utilizando App Engine y publicarla muy fácilmente. Para crear un proyecto, basta con seleccionar la opción indicada en la imagen.

En la Guia de Introducción a App Engine que ofrece Google en español, se desarrolla en primera instancia parte del siguiente código en un Servlet.

Al crear el servlet con eclipse y escribir el código anterior, es muy fácil probar la aplicación localmente. El SDK de App Engine, incluye un servidor local que simula todos los servicios que ofrece la infraestructura de App Engine, por lo cual podremos simular nuestra aplicación web localmente antes de instalarla en el servidor de Google.

Para ejecutar la aplicación anterior, basta con ir al menú Run > Debug As > Web Application , y entonces en el navegador teclear:

http://localhost:8080 ó http://localhost:8888

dependiendo del puerto que se inicialice.

Como página principal se muestran los Servlets disponibles, al dar click sobre «Guestbook» se ejecutará el código anterior, el cual presentará una pantalla que pedirá un correo como cuenta de Google para poder autenticar, dado que estamos en el ambiente local, se mostrará una pantalla como la siguiente, pero en caso de que la aplicación ya este publicada en nuestro dominio de App Engine, entonces se mostrará la pantalla de Google donde se pide nuestra cuenta:

Pantalla en servidor Local
Pantalla al instalar la aplicación en dominio de App Engine

Una vez que nos hemos autenticado, entonces se mostrará el mensaje que pusimos en el Servlet, que en este caso será algo como:

Hello, molder.itp
Para publicar la aplicación, primero debemos dirigirnos al archivo appengine-web.xml y en las etiquetas  escribir el id de la aplicación que es el mismo que escribimos al crear nuestra cuenta de App Engine, en mi caso fue "mundo-byte" tal como lo podemos ver en nuestra cuenta,

También debemos indicar el número de versión. Finalmente el archivo de configuración quedará similar al siguiente:

Hecho lo anterior, ya podemos publicar nuestra pequeña aplicación desde Eclipse dando click al ícono mostrado en la siguiente imagen:
Y listo!! el resultado lo podremos visualizar con la url de nuestro dominio, que en mi caso es la siguiente:


http://mundo-byte.appspot.com/guestbook
Hemos visto lo fácil que resulta publicar una aplicación web Java utilizando el AppEngine, sin duda una buena opción para varios desarrollos! Espero más adelante compartir más cosas acerca del App Engine de Google.


Saludos!!