Sunday, November 27, 2011

GENERACIÓN DE CÓDIGO QR EN JAVA

Ahora que esta mucho de moda en las empresas, como en celulares, el manejo de códigos generados de un tipo similar a CÓDIGOS DE BARRAS llamados QR. En esta oportunidad mostrare una modalidad para la generación de dicha imagen con un mensaje oculto incrustado dentro de el.

Nos apoyaremos en la librería: barcode.jar:

http://www.barcodelib.com/java_barcode/download.php

El código es el siguiente:

Util_QR:

import java.awt.Desktop;
import java.io.File;
import com.barcodelib.barcode.QRCode;

/**
* @author Cesar Ricardo.
* @clase: TestQR.java
* @descripción descripción de la clase.
* @author_web: http://frameworksjava2008.blogspot.com
* http://viviendoconjavaynomoririntentandolo.blogspot.com
* @author_email: nombre del email del autor.
* @author_company: nombre de la compañía del autor.
* @fecha_de_creación: dd-mm-yyyy.
* @fecha_de_ultima_actualización: dd-mm-yyyy.
* @versión 1.0
**/
public class Util_QR{

private static int modo = QRCode.MODE_BYTE;
private static int udm = 0;
private static int resolucion = 72;
private static float margenIZQ = 0.000f;
private static float margenDER = 0.000f;
private static float margenSUP = 0.000f;
private static float margenINF = 0.000f;
private static int rotacion = 0;
private static float tamanoModulo = 5.000f;

/**
* main
* @param argumentos
**/
public static void main( String... argumentos ){

QRCode codigoQR = null;
String mensajeQR = null;
Desktop aplicacion = null;
File archivoFile = null;
String rutaSalida = null;

try{
rutaSalida = "C:\\CodigoQR.gif";
mensajeQR = " 'HOLA A TODOS'... JAVAMAN, LES DA LA BIENVENIDA A SU BLOG. AQUI PODRAN ENCONTRAR " + " MUCHA INFORMACION Y SOBRE TODO MUCHO CODIGO UTIL...!!!";

codigoQR = new QRCode();

codigoQR.setData( mensajeQR );
codigoQR.setDataMode( modo );
codigoQR.setUOM( udm );
codigoQR.setLeftMargin( margenIZQ );
codigoQR.setResolution( resolucion );
codigoQR.setRightMargin( margenDER );
codigoQR.setTopMargin( margenSUP );
codigoQR.setBottomMargin( margenINF );
codigoQR.setRotate( rotacion );
codigoQR.setModuleSize( tamanoModulo );
codigoQR.renderBarcode( rutaSalida );

archivoFile = new File( rutaSalida );
aplicacion = Desktop.getDesktop();

aplicacion.open( archivoFile );
}
catch( Exception e ){
e.printStackTrace();
}
}
}


Esto generara esta imagen en dicha ruta:



Para descargar el ejemplo completo descargarlo de:AQUÌ.

Sunday, August 14, 2011

DEMO CONEXIÓN JDNI DESDE UN APLICATIVO JAVA.

Hola en esta oportunidad mostrare otra alternativa de conexión a una BD, al momento de realizar una aplicación J2EE. Es mediante como se le conoce JNDI (Java Naming and Directory Interface). y su Pool de Conexiones.

Al comparara con JDBC podremos decir que JDBC implica que se realice una conexión a la DB por cada golpe a la BD que queramos hacer (CRUP) o un simple Query. Este esquema se repite cada vez:
Abrir conexión => Operación => Cerrar Conexión.

Esta forma de trabajar es perfectamente valida, pero resulta ineficiente, ya que se esta desperdiciando un tiempo en cada conexión y desconexión.
Por otro lado, existe la otra alternativa que es la de crear un Pool de Conexiones, es decir, mantener un conjunto de conexiones que nos deja abierto constantemente un numero de conexiones, las cuales se van tomando mientra el sistema los requiera y cuando no la va a usar la devuelve al Pool, osea desde el aplicativo se le da CLOSE y el Pool lo entiende en realidad que esta dicha conexión LIBRE para brindarla a otro. De esta forma nos ahorramos el consumo de tiempo de conexión y desconexión.

Este manejo es en realidad configuración en los Servidores de Aplicaciones, ya que en realidad la gran mayoría de Servidores de Aplicación dan soporte a: Pool de Conexiones, DataSource, JDNI, etc.

Lo primero es leer sobre la configuración en los servidores de aplicación y aquí hay unos tutoriales paso a paso de cómo realizar dicha configuración en:

1. GLASSFISH - CREACION, CONFIGURACION – JNDI

2. OC4J - CREACION, CONFIGURACION – JNDI

Luego de realizar dicho configuración y validarla desde el servidor de aplicaciones pasaremos al demo del aplicativo que se conectara a dicho Pool de Conexiones.

Cabe resaltar que esto debe haberse configurado previamente en los Servidores de Aplicación como dice el tutorial.
Dentro del web.xml configuraremos:

Parámetros en el contexto de la aplicación, los Servlet que validaran dicha conexión (contendrán los Querys) :

- org.java.servlet.ValidaUsuarioServlet
- org.java.servlet.ReenviaServlet


[!-- *************** PARAMETROS: SERVLETs [COPYRIGTH] *************** --]
[servlet]
[servlet-name]ReenviaServlet[/servlet-name]
[servlet-class]org.java.servlet.ReenviaServlet[/servlet-class]
[init-param]
[param-name]DESCRIPION[/param-name]
[param-value]MANEJO CONEXION JNDI[/param-value]
[/init-param]

[init-param]
[param-name]AUTOR[/param-name]
[param-value]CESAR RICARDO GUERRA ARNAIZ[/param-value]
[/init-param]

[init-param]
[param-name]EMAIL[/param-name]
[param-value]cesarricardo_guerra19@hotmail.com[/param-value]
[/init-param]

[init-param]
[param-name]PAIS[/param-name]
[param-value]PERU[/param-value]
[/init-param]
[/servlet]

[servlet]
[servlet-name]ValidaUsuarioServlet[/servlet-name]
[servlet-class]org.java.servlet.ValidaUsuarioServlet[/servlet-class]
[/servlet]

[servlet-mapping]
[servlet-name]ReenviaServlet[/servlet-name]
[url-pattern]/ReenviaServlet[/url-pattern]
[/servlet-mapping]

[servlet-mapping]
[servlet-name]ValidaUsuarioServlet[/servlet-name]
[url-pattern]/ValidaUsuarioServlet[/url-pattern]
[/servlet-mapping]


También, registraremos el parámetro que indicara el Motor de datos a usarse (Tiene que estar de la mano con el JDBC.properties ).


[!-- ************** PARAMETROS: [DATA-SOURCE] ************** --]
[context-param]
[description]Tipo de BD a la cual se conectara la aplicacion[/description]
[param-name]motor_db_usado[/param-name]
[param-value]2[/param-value]
[/context-param]


Existe el directorio: org.java.conexion, que esta encargado como su nombre lo dice exclusivamente para la conexión. Dentro de el existen lo siguiente:

- AccesoProperties.java = Clase para el acceso al JDBC.properties
- ConexionJNDI.java = Clase que administra el pool de conexiones
- ConstantesJNDI.java = Clase de Constantes exclusivas para la conexión.
- jdbc.properties = Archivo de configuración de los motores de datos y JDBC.
- 1=MySQL.
- 2=Oracle.


En si lo IMPORTANTE aquí al momento de hacer el amarre de la clase conexión con la configuración de Pool de Conexiónes, es saber
El nombre del Pool registrado en dicho Servidor de Aplicaciones en mi caso lo tengo asi:

-Para MySQL: jdbc/__MySQLPool
-Para ORACLE: jdbc/__ORACLEPool

Ahora solo queda la parte de la capa Vista. Que es en si un LOGIN, que validara los datos ingresados contra los existentes en la BD. Dicho Script lo obtienen de la ruta:

Resources/DataBase:

Script_BD_MySql.sql
Script_BD_ORACLE.sql


El login es:

- Usuario: rguerra
- Password: admin.


Si la validación es correcta mostrara datos del usuario logueado y sino mostrara simplemente un error:
ÉRROR EN AUTENTICACIÓN
.

Para descargar el ejemplo completo descargarlo de:AQUÌ.