sábado, 15 de julio de 2017

Spring Framework



He estado fuera mucho tiempo, así que pensé para volver a escribir por acá; ¿con qué tema empezaré? Entonces tomé la decisión de hablar sobre uno de los frameworks mas populares en cuanto a Java se refiere. En esta primer entrada, definiré los conceptos de Spring, e iré abordando sobre los puntos específicos que se requieren para efectuar una aplicación sencilla que pueda ser funcional.

Sin mas, definamos: Spring es un framework para el desarrollo de aplicaciones y contenedor de inversión de control, de código abierto para la plataforma Java 2​.

Eso del "inversor de control" se refiere a la filosofía "no nos llames, nosotros te llamamos", y se refiere a que es Spring quien tiene el control de la aplicación, no los componentes.

Spring Framework comprende diversos módulos que proveen un rango de servicios:

  • Contenedor de inversión de control: permite la configuración de los componentes de aplicación y la administración del ciclo de vida de los objetos Java, se lleva a cabo principalmente a través de la inyección de dependencias.
  • Programación orientada a aspectos: habilita la implementación de rutinas transversales.
  • Acceso a datos: se trabaja con RDBMS en la plataforma java, usando Java Database Connectivity y herramientas de Mapeo objeto relacional con bases de datos NoSQL.
  • Gestión de transacciones: unifica distintas APIs de gestión y coordina las transacciones para los objetos Java.
  • Modelo vista controlador: Un framework basado en HTTP y servlets, que provee herramientas para la extensión y personalización de aplicaciones web y servicios web REST.
  • Framework de acceso remoto: Permite la importación y exportación estilo RPC, de objetos Java a través de redes que soporten RMI, CORBA y protocolos basados en HTTP incluyendo servicios web (SOAP).
  • Convención sobre Configuración: el módulo Spring Roo ofrece una solución rápida para el desarrollo de aplicaciones basadas en Spring Framework, privilegiando la simplicidad sin perder flexibilidad.
  • Procesamiento por lotes: un framework para procesamiento de mucho volumen que como características incluye funciones de registro/trazado, manejo de transacciones, estadísticas de procesamiento de tareas, reinicio de tareas, y manejo de recursos.
  • Autenticación y Autorización: procesos de seguridad configurables que soportan un rango de estándares, protocolos, herramientas y prácticas a través del subproyecto Spring Security (antiguamente Acegi).
  • Administración Remota: Configuración de visibilidad y gestión de objetos Java para la configuración local o remota vía JMX. 
  • Mensajes: Registro configurable de objetos receptores de mensajes, para el consumo transparente desde la a través de JMS, una mejora del envío de mensajes sobre las API JMS estándar.
  • Testing: Soporte de clases para desarrollo de unidades de prueba e integración.

A pesar de que tomé estas definiciones de la wikipedia, es mas cierto que las tomé de base e hice un mini-resumen de la parte que en verdad es importante.

Les dejo un enlace con un tutorial de MitoCode muy bueno sobre conceptos y definiciones. Ya que posteriormente estaré subiendo contenido de configuraciones.



Espero te sea de utilidad ;)

martes, 31 de mayo de 2016

Franz: ¡Una aplicación para el chat de todas tus aplicaciones!


Hola! Hace algún tiempo vengo sintiéndome un poco incómodo por mis programas de mensagería: Skype, Messenger para Facebook y WhatsApp.

Y el problema es que los ocupo demasiado. Pero llega un momento en que me hostiga tener tantas ventanas abiertas. Suele suceder.

Por ello me di a la tarea de buscar una app que as englobara en una sola y encontré "Franz", una app en la que puedes registrar tus servicios de mensajería y ¡estar con todos en una sola ventana!

Aunque parece que no es mas que una interfaz entre el web y el programa, no deja de sorprender su eficiencia.



Es genial, yo la empecé a usar hace poco y la verdad ¡¡es muy eficiente!!.


La puedes descargar de aquí.

Espero te haya sido de utilidad ;)

lunes, 16 de mayo de 2016

MySQL y Procedimientos Almacenados


Algo que se vuelve tedioso es cuando una consulta se empieza a hacer muy grande y resulta horroroso ponerla en el $sql del php, o algo similar en otros lenguajes de programación.

La solución que encontré desde hace mucho tiempo es efectuar las consultas mediante llamadas a procedimientos almacenados y es realmente muy fácil.

Lo que se hace difícil es como implementarlo.

Primero que nada se requiere un "cliente" que haga simple la escritura del código, mientras que algunos programadores se van por el sublime text, yo he preferido usar HeidiSQL, un cliente para MySQL bastante potente y ¡gratuito!.

Para efectuar tu procedimiento almacenado te dejo el siguiente "template"


drop procedure if exists _SPProcedimiento_Prueba;

DELIMITER //

create procedure _SPProcedimiento_Prueba(
xClave varchar(8)
)

begin

Select campo_1, campo_2, campo_3 from tabla_campos where tabla_campos.clave = xClave;

end
//
Delimiter ;


call _SPProcedimiento_Prueba('t001')


Lo que el código hace es lo siguiente:
  • En la primera línea "drop procedure..." lo que hace es que se le está indicando que si el procedimiento ya existe, se debe eliminar. Muy útil cuando ya tienes el procedimiento y quieres sobre-escribirlo una y otra vez.
  • Las partes del "DELIMITER" son indicaciones para decirle que tome lo que esté en ese bloque como parte del código.
  • Las partes Begin y End encierran el proceso, tal como si fueran las {} de los lenguajes como C o Java.
  • La línea donde se encuentra el "xClave", es la parte donde se le agregan los parámetros, esto es, variables que quieras incluir en tu código o consulta.
  • La parte "Select..", Es donde podemos implementar las consultas que deseemos hacer, y se puede implementar los parámetros que recibimos (xClave).
  • La parte del "call _SPProcedimiento_Prueba('t001')" es en donde se llama a la rutina, la instrucción es "call", seguida del nombre del procedimiento que se creó.
Lo que resta es mostrar un pantallazo de cómo se ve esto en HeidiSQL, para que se note el porqué se ocupa esta herramienta.



Espero te sea de utilidad ;)


miércoles, 27 de abril de 2016

DUMP de una objeto en Java




En muchas ocasiones me ha ocurrido que quiero revisar el contenido de mis objetos y revisar cuales son los valores que tiene asignados, infortunadamente no hay una función en Java que permita hacer ese comportamiento similar al print_r() o var_dump() del tan famoso PHP.

Afortunadamente leí por ahí un truco y quiero compartirlo con ustedes. Es una implementación simple pero con mucho potencial y consiste en recorrer en un ciclo todos los campos de una clase, sabiendo el nombre, se obtiene su valor y se imprime por consola. Veamos:

Field[] fields = obj.getClass().getDeclaredFields();
try {

     //recorremos el array obtenido a través de nuestro objeto
    for (Field field : fields) {  
               
        //field.getName() da el nombre del campo y field.get obtiene el valor
        System.out.println(field.getName() + " : " + field.get(obj));  
           
     }
} catch (IllegalArgumentException | IllegalAccessException ex) {
      Logger.getLogger(JavaDump.class.getName()).log(Level.SEVERE, null, ex);
}


Como pueden ver, es muy simple el aplicarlo, solo hay que crear la clase que se quiere extraer, y mandarsela como parámetro a esta función.

Si te interesa el proyecto, dejo el proyecto de Netbeans y las clases por separado, para que en caso de no tener este IDE, puedas intentarlo por tu cuenta.

Aquí el proyecto de NetBeans

Aquí las clases por separado

Espero te sea de utilidad ;)

viernes, 20 de noviembre de 2015

Eliminar una base de datos PostgreSQL de manera Forzada


En esta ocasión me tocó resolver algo sencillo pero un poco difícil de notar.

El percance fué que creé una base de datos en postgres "mi_base", la cual pesaba unos 3.4 gigas, cuando se terminó de usar me disponía a eliminarla y ¡Oh sorpresa!, no permitía eliminar, ya que habían "conexiones activas", cosa que no era cierto, ya que el único usuario se había desconectado hacía unos minutos.

Para no dar mas vueltas, la solución está en revisar las conexiones existentes a esa base de datos y matarlas (¡qué sádico!, ¿No?).

Lo primero es loguearse como super usuario en postgres, psql -Upostgres. Posteriormente, hay que consultar la tabla pg_stat_activity se la manera siguiente

SELECT procpid, current_query FROM pg_stat_activity where datname = 'mi_base';

De donde "mi_base" es la base de datos que no se puede eliminar, y revisamos el campo "procpid", ese es el id del proceso que está causando problemas.

Teniendo ese PID identificado, nos disponemos a matarlo (¡qué sádico!, ¿No?).

kill -TERM procpid

De donde procpid es el número entero del proceso a terminar. Hecho esto, lo siguiente ya es normal: ejecutar el drop database.

drop database mi_base;

Con esto ya debería ser posible eliminar la base de datos sin problema. Debo mencionar que la versión del servidor que estoy trabajando es postgres 8.2.



Espero te sea de utilidad :)

domingo, 25 de octubre de 2015

Construyendo una mini aplicación insertar datos con PHP y MySQL




Seguramente sabrás que PHP es uno de los lenguajes de programación mas populares del mundo en cuanto a programación web se refiere.
El dia de hoy, efectué un video en donde, mediante PHP, jQuery, HTML y ajax (si quieres ver la explicación detallada de AJAX puedes hacer click aquí) inserté datos a una base de datos de MySQL.
Sin mas rodeos, dejo el enlace al video donde efectué el proceso.



Espero te sea de utilidad :)

domingo, 18 de octubre de 2015

AJAX: Hacer una llamada al servidor




Hola!
Hace poco tuve que trabajar con JSP y mi servidor java, al principio pensé en que podía hacer, ya que anteriormente web lo trabajé con PHP y también con .Net, luego recordé que AJAX se encarga de la comunicación hacia el servidor con un estándar bastante bien definido y en adelante fue todo miel sobre hojuelas.

Pero no se diga mas, a continuación voy mostrarles una llamada al servidor y trataré de explicar cómo es la función y que debería ponerse en cada lugar.

También les comento que es mediante una función dentro de javascript, para que quede todo bastante claro.


En este segmento de 8 lineas, yo hice una llamada al servidor JSP y recibí datos del proceso. Voy a explicar lo que hace linea unida con una fleca en la imagen.
  1. El parámetro "type" indica de que modo se hará la llamada, en este caso será via POST (también es posible hacerlo via GET.
  2. url: indica la dirección donde se tiene la página del servidor, pudiendo ser por ejemplo "/procesos/llamada.php".
  3. async: indica si será asincrono o síncrono, esta propiedad pronto dejará de usarse, ya que afecta el rendimiento de la página cuando se hace de manera síncrona (contradiciendo el paradigma de ajax).  Mas información sobre async aquí.
  4. data: indica los datos que se van a enviar en el servidor, se hace de la forma "variable : valor", de esta forma le indicamos que "variable" es la variable que va a ser asignada del lado del servidor, y "valor" es la variable que tenemos del lado del cliente en javascript.
  5. success: la variable "xResultado" es una variable que recibe la respuesta del servidor, es decir, todo lo que querramos enviar se almacenará en esa variable, adaptándose al tipo de dato enviado, pudiendo ser un objeto por ejemplo.
  6. La línea del console.log() la ocupo para revisar si se está recibiendo correctamente la información, esto es posible verlo con la herramienta del navegador, en chrome por ejemplo, se puede ver cuando se activa la función "inspeccionar elemento --> console".

Con lo anteriormente explicado, es posible iniciarse a hacer llamadas.

Espero te sea de utilidad :)