Sunday, March 29, 2009

Serializacion & Deserializaciòn de Objetos

En esta oportunidad muestro el manejo de 'Serializacion & Deserializacion de Objetos en Java'. Esto lo elabore en base de Objetos Stream, como sus dos mètodos famosos: 'writeObject' y 'readObject'. Los dos ejemplos que se muestran, realizan lo mismo impreso en consola, la diferencia que es que en el primer ejemplo el seteo de objetos esta en modo 'HardCode' y en el segundo utilizo un bean 'BeanSerializable' para la transmisiòn. En total los dos ejemplos cuantan con tres clases:

BeanSerializable.java

import java.io.Serializable;
import java.util.Date;

/**
* En clase es utilizada para el setedo de datos para su posterior serializacion.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/
public class BeanSerializable implements Serializable{

private static final long serialVersionUID = -7905579217165381885L;

private Integer codigo;
private String nombre;
private String apellido;
private Date fecha;


public static long getSerialVersionUID() {
return serialVersionUID;
}

public Integer getCodigo() {
return codigo;
}

public void setCodigo(Integer codigo) {
this.codigo = codigo;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getApellido() {
return apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}

public Date getFecha() {
return fecha;
}

public void setFecha(Date fecha) {
this.fecha = fecha;
}
}

Serializando_Deserealizando_Objetos_01.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;

/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos en modo 'HardCode'.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/

public class Serializando_Deserealizando_Objetos_01 implements Serializable{

private static final long serialVersionUID = -2071812553599487256L;


public static void main( String[] args ){

try{
/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);

objSalida.writeObject( 123456 );
objSalida.writeObject( "Cesar Ricardo" );
objSalida.writeObject( "Guerra Arnaiz" );
objSalida.writeObject( new Date() );

objSalida.flush();
objSalida.close();


/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );

Integer codigo = (Integer)objEntrada.readObject();
String nombre = (String)objEntrada.readObject();
String apellido = (String)objEntrada.readObject();
Date fecha = (Date)objEntrada.readObject();

objEntrada.close();

System.out.println( "Objeto Deserealizado #01: " + codigo );
System.out.println( "Objeto Deserealizado #02: " + nombre );
System.out.println( "Objeto Deserealizado #02: " + apellido );
System.out.println( "Objeto Deserealizado #03: " + fecha );
}
catch( Exception e ){
e.printStackTrace();
}
}

public static long getSerialVersionUID() {
return serialVersionUID;
}
}

Serializando_Deserealizando_Objetos_02.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;

/**
* En esta clase estoy mostrando el manejo de Serializacion y Deserealizaciòn
* de datos utilizando un Objeto Bean de apoyo.
*
* @version 1.2 - 29 Marzo 2009.
* @author Ricardo Guerra.
*/

public class Serializando_Deserealizando_Objetos_02 implements Serializable{

private static final long serialVersionUID = -7282739136711013954L;


public static void main( String[] args ){

try{
BeanSerializable objeto = new BeanSerializable();

/***************************************/
/**** ENVIAN OBJETOS 'Serializados' ****/
/***************************************/
FileOutputStream salida = new FileOutputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectOutput objSalida = new ObjectOutputStream(salida);

objeto.setCodigo( 123456 );
objeto.setNombre( "Cesar Ricardo" );
objeto.setApellido( "Guerra Arnaiz" );
objeto.setFecha( new Date() );

objSalida.writeObject( objeto );

objSalida.flush();
objSalida.close();


/********************************************/
/**** RECUPERAN OBJETOS 'Deserializados' ****/
/********************************************/
FileInputStream entrada = new FileInputStream( "objTemporal" ); //objTemporal, reconoce el nombre del Objeto de la Memoria.
ObjectInputStream objEntrada = new ObjectInputStream( entrada );

BeanSerializable objetoBean = (BeanSerializable)objEntrada.readObject();

System.out.println( "Objeto: " + objetoBean );

if( objetoBean instanceof BeanSerializable ){
System.out.println( "Si es Instanciado al Objeto" );
}
else{
System.out.println( "No es Instanciado al Objeto" );
}

objEntrada.close();

System.out.println( "Objeto Deserealizado #1: " + objetoBean.getCodigo() );
System.out.println( "Objeto Deserealizado #2: " + objetoBean.getNombre() );
System.out.println( "Objeto Deserealizado #3: " + objetoBean.getApellido() );
System.out.println( "Objeto Deserealizado #4: " + objetoBean.getFecha() );
}
catch( Exception e ){
e.printStackTrace();
}
}

public static long getSerialVersionUID() {
return serialVersionUID;
}
}

Sunday, March 8, 2009

Administra tus Motores de Datos con DbVisualizer v6.5.1

Aqui les comparto una muy buena herramienta gràfica para la administraciòn de motores de base de datos llamada: 'DbVisualizer v6.5.1', es la mejor y mas completa herramienta que he encontrado hasta el momento, ya que permite desde una misma herramienta conectarse a todas las siguientes base de datos:

- db2
- derby
- h2
- hsqldb
- informix
- mysql
- oracle
- postgresql
- sqlserver
- sybase

y en simultaneo ya que de un mismo 'Arbol' se puede manejar varias conexiones para diferentes bases de datos. Ademas, lo mejor que las conexiones que usa la herramienta es en base JARs 'JDBC' (Todos los JARs estan adjuntos en el .ZIP).

Tambien, la herramienta te permite editar, modificar, eliminar datos de las tablas, importar y generar script SQL, etc. Incluso posee un visualizador gràfico de relaciones entre las tablas, partiendo de la tabla seleccionada.

Para visualizar como luce esta herramienta pulsar: Aquì

Para descargar esta muy buena herramienta pulsar Aquì

Para las librerías JDBC requeridas por la herramienta pulsar Aquì

Sunday, March 1, 2009

Manejo de Hilos (Threads) en Java

Aqui muestro el manejo de un Tema muy importante en JAVA. Hilos (Threads) que se utiliza para el manejo de varios proceso simultaneamente (Uno por cada Hilo creado).

En el demo preparado muestro dos formas de como manejar 'Threads', por medio de dos beans similares. El primero haciendo un 'extends Thread' y el segundo haciendo un 'implements Runnable'.

Espero que el demo sea ilustrativo y les de ideas para futuros manejos en otras aplicaciones.

Ademàs, para una informaciòn mas completa he colgado tambien un Tutorial en PDF donde muestras una informaciòn mas completa sobre este tema.

Para descargar la aplicaciòn Demo pulsar Aquì

Para descargar un buen tutorial en PDF pulsar Aquì

Friday, February 27, 2009

Manejo Objectos Generics

Aquì mostrarè un Ejemplo de como manejar Objetos (Setear y Acceder) de tipo Genrics.

Declaramos el Objeto 'BeanGenerico' y le ponemos que sea de tipo '< objetoGenerico extends Object >', que significa que en la variable 'objetoGenerico' se almacenarà cualquier tipo de valor que se le atribuya a la variable:

class BeanGenerico< objetoGenerico extends Object >{

private objetoGenerico codigo;
private objetoGenerico nombre;
private objetoGenerico apellido;
private objetoGenerico dni;
private objetoGenerico cumpleanos;

/*******************/
/**** GET - SET ****/
/*******************/
public objetoGenerico getCodigo() {
return codigo;
}
public objetoGenerico getNombre() {
return nombre;
}
public objetoGenerico getApellido() {
return apellido;
}
public objetoGenerico getDni() {
return dni;
}
public void setCodigo(objetoGenerico codigo) {
this.codigo = codigo;
}
public void setNombre(objetoGenerico nombre) {
this.nombre = nombre;
}
public void setApellido(objetoGenerico apellido) {
this.apellido = apellido;
}
public void setDni(objetoGenerico dni) {
this.dni = dni;
}
public objetoGenerico getCumpleanos() {
return cumpleanos;
}
public void setCumpleanos(objetoGenerico cumpleanos) {
this.cumpleanos = cumpleanos;
}
}


Luego creamos la Clase 'PruebaBeanGenerico', donde se Seteara y Accedera al Objeto anterior:

import java.math.BigDecimal;
import java.util.Date;

public class PruebaBeanGenerico{

static Integer anoPruebaInicio = 2009;
static Integer mesPruebaInicio = 12;
static Integer diaPruebaInicio = 3;

static Integer redondeoAñoFecha = 1900; //Redonde de Año.
static Integer redondeoMesFecha = 1; //Redonde de Mes.


@SuppressWarnings("deprecation")
public static void main( String[] params ){
BeanGenerico beanGenerico = new BeanGenerico();

BigDecimal codigo = new BigDecimal( 10 );
String nombre = new String( "Cesar Ricardo" );
String apellido = new String( "Guerra Arnaiz" );
Integer dni = new Integer(41816133);
Date cumpleanos = new Date( (anoPruebaInicio - redondeoAñoFecha), (mesPruebaInicio - redondeoMesFecha), diaPruebaInicio );

beanGenerico.setCodigo( codigo );
beanGenerico.setNombre( nombre );
beanGenerico.setApellido( apellido );
beanGenerico.setDni( dni );
beanGenerico.setCumpleanos( cumpleanos );

imprimir( beanGenerico );
}

public static void imprimir( Object parametro ){
BeanGenerico beanGenerico = (BeanGenerico)parametro;

System.err.println("");
System.err.println("OBTENIENDO DATOS 'GENERICs'");
System.err.println("Codigo: " + beanGenerico.getCodigo() );
System.err.println("Nombre: " + beanGenerico.getNombre() );
System.err.println("Apellido: " + beanGenerico.getApellido() );
System.err.println("Dni: " + beanGenerico.getDni() );
System.err.println("Cumpleaños: " + beanGenerico.getCumpleanos() );
System.err.println("");
}
}

De esta forma que resuelta la duda de como manejar los Objetos Generics en JAVA.

Manejo 'Enums'

Aqui les comparto un Ejemplo de como manejar la 'Enums' en JAVA. Para el manejo
de una lista de 'Constantes' en su interior y asi ya no estar declarando varias lineas Constantes.

Creamos la Clase 'ManejoEnum' y codificamos de esta maneja:


public class ManejoEnum{

public enum Paises{
PAIS_01( "PERU" ),
PAIS_02( "BRASIL" ),
PAIS_03( "ALEMANIA" ),
PAIS_04( "FRANCIA" );

private String mensaje;

Paises( String mensaje ){
this.mensaje = mensaje;
}

String getMensaje(){
return mensaje;
}

void setMensage( String mensaje ){
this.mensaje = mensaje;
}
}

public static void main( String[] args ){
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
Paises.PAIS_01.setMensage("RUMANIA");
System.out.println( "PAIS SELECCIONADO: " + Paises.PAIS_01.getMensaje() );
}

}


El Ejemplo mostrara en 'Consola' lo siguiente:

PAIS SELECCIONADO: PERU
PAIS SELECCIONADO: RUMANIA

Tuesday, February 24, 2009

Cuando se malogra el 'Autocompletar' en Eclipse

A quién no le ha sucedido alguna vez que estado programando en Eclipse deja de autocompletar los códigos fuente en Java por arte de magia. Sin haber tocado nada y sin causa aparente. Arrancas el Eclipse tranquilamente y donde ayer completaba un .Java y pulsando "Ctrl + Barra Espaciadora" de la forma mas normal y hoy no. La solución es más simple de lo que se cree:

Desde Eclipse:

Window -> Preferences -> Java -> Editor -> Content Assist -> Advanced

Al llegar aquí lo más probable es que tengas desmarcadas todas las opciones y hacer un "Restore Defaults" y verás que se marcan varias opciones. Con esto el Problema del Autocompletar faltante esta solucionado.

Monday, February 23, 2009

Manejo Clases y Mètodos de JAVA.

Hola, en esta oportunidad presento una Clase que he desarrolado con la finalidad de dar a mostrar el manejo de distintan Clases de Java, que son y que no son muy cocidas y usadas, asi como el manejo sus mètodos correspondiente de estas, de una forma muy bien detallada. Las Clases, temas y mètodos de las que estoy mostrando su funcionamiento, son las siguientes:

- Recursividad
- StopWatch
- Validate
- Arreglos ( Dimensionales, Bidimensionales )
- ArrayListToArray
- ArrayUtils
- DateUtils
- StringUtils
- TimeZone
- SimpleDateFormat
- Calendar
- GregorianCalendar
- Date
- System
- HashTable
- Stack
- Enumeration
- Character
- Clases_Envoltorias
- bigInteger
- bigDesimal
- tipos_IF_ELSE
- comparativoCadenasSinConEspacios
- LinkedList
- ArrayList
- Vector
- HashMap
- Aleatorio #01
- Aleatorio #02
- StringBuffer
- Substring
- CompareTo

He subido un .Zip llamado 'Manejo_Clases_Metodos_Java.zip' que contiene en su interior un proyecto J2EE llamada 'Manejo_Clases_Metodos_Java', de Eclipse. Luego en el arbol de Eclipse se mostara la ruta: 'org.java.prueba' con las clases:


- PruebaClasesJava.java
- PruebaClasesJavaGUI.java
- Consola.java
- BeanComboBoxModel.java


La Clase que maneja todo esto la he llamado 'PruebaClasesJava.java' y para probar su funcionamiento se puede hacer de dos formas:

Forma #1:
Simplemente se descomenta el llamado al metodo de la Clase que se desea ver su funcionamiento y se ejecuta el Mètodo: 'public static void main( String[] args )'. El Resultado se mostrara en Consola.

Forma #2:
He colocado una Clase llamada 'PruebaClasesJavaGUI.java', que es en realidad una pequeña aplicacion realizada en 'Java SWING', donde al ejecutarce se puede escoger desde un ComboBox la Clase que se desea ver su funcionamiento, consultarlo y el
resultado se mostrara en un TextArea.

Para visualizar como luce la aplicaciòn pulsar:
Aquì.

Para descargar el paquete de la Clase junto con la aplicaciòn demo pulsar AQUI.