jueves, 25 de diciembre de 2014

¿Qué es Log4j?


¿Qué es Log4J? Es un framework/librería Open Source, desarrollada por Apache Software Foundation para Java. permite llevar un "log" de la aplicación en tiempo de ejecución. Muy robusto pudiendo mediante un archivo properties definir nivel del mensaje (importancia), tipo de salida ( consola, archivo log, tabla base de datos), ruta del archivo de salida, tamaño máximo en mb, etc.
La salida está dividida en niveles, según el tipo de error:
- DEBUG, INFO, WARN, ERROR y FATAL.


Entorno de Trabajo:
SO: Windows 7 Ultimate 64 bits.
IDE: Luna Service Release 1.
JDK: Java Versión 1.7.0_51
Nombre/Versión Librería: log4j-1.2.17
Descarga Log4j: http://logging.apache.org/log4j/1.2/download.html

Antes de comenzar, debes:
1.- Crear un Proyeto Java.
2.- Descomprimir la librería Log4j descargada. (La librería tiene el siguiente nombre log4j-1.2.17.jar).
3.- Agregar la librería a tu proyecto (Add to Build Path), para poder utilizar los métodos de la misma.


Comenzaremos con un simple Programa de Log!...

Esctructura:
 

Explicación:

Clase: Prueba_log4J.java

package traineejava.blogspot.com;
// importamos las clases necesarias.
//configuración básica para mostrar log por la consola.
import org.apache.log4j.BasicConfigurator;   
import org.apache.log4j.Logger;

public class Prueba_log4J {

    static final Logger logger = Logger.getLogger(Prueba_log4J.class);
       
    public static void main(String[] args) {
        BasicConfigurator.configure();
        logger.debug("Log de tipo DEBUG, traineejava.blogspot.com");
        logger.info( "Log de tipo INFO,  traineejava.blogspot.com");
        logger.warn(" Log de tipo WARN,     traineejava.blogspot.com");
        logger.error("Log de tipo ERROR, traineejava.blogspot.com");
        logger.fatal("Log de tipo FATAL, traineejava.blogspot.com");
    }
}


BasicConfigurator.configure(): Nos permite utilizar la configuración básica, tomando la consola como nuestra salida.
logger.debug, logger.info, logger.warn, logger.error, logger.fatal, nos permite definir el tipo de mensaje, dependiendo del nivel.


Salida Consola:
0 [main] DEBUG traineejava.blogspot.com.Prueba_log4J  - Log de tipo DEBUG, traineejava.blogspot.com
4 [main] INFO traineejava.blogspot.com.Prueba_log4J  - Log de tipo INFO,  traineejava.blogspot.com
4 [main] WARN traineejava.blogspot.com.Prueba_log4J  -  Log de tipo WARN,     traineejava.blogspot.com
4 [main] ERROR traineejava.blogspot.com.Prueba_log4J  - Log de tipo ERROR, traineejava.blogspot.com
5 [main] FATAL traineejava.blogspot.com.Prueba_log4J  - Log de tipo FATAL, traineejava.blogspot.com

Primera y simple entrega sobre log4j, espero complementar este contenido más adelante. Incluyendo archivo properties, log en archivo, base de datos. Además de aplicacar la última version que se llama log4j2.

Saludos!!!

Principios de EJB...


Despues de muuuucho tiempo que no había escrito, :(, me hice un tiempo y retomaré algunos temitas que estoy aprendiendo: D. Ahora es el turno de aprender de EJB's :O, veremos que sale! Empezaremos con los principios básicos y los tipso de EJB.

 Conceptos Básicos, pero básicos siu.
Aers para empezar, J2EE es una tecnología de SUN para desarrollar multi capas y tal! Es un stándar y es implementado por muchos proporcionadores de contenedores (provider container).

¿Qué nos proporcionan los contenedores? Nos ayudan con funcionalidades como el manejo de transacciones, clustering, caching, mensajería entre aplicaciones o en una aplicación y mucho mucho más jijiji.
Como servidor de aplicaciones usaremos JBOSS, pero espero poder tener el tiempo suficiente en el futuro, uf la vida la vida, para poder montar esta aplicación en algún otro servidor como WEBLOGIC, kiubo!.


Pero, me pregunto a mi mismo, mismo, ¿Qué xuxa es un EJB? 

EJB : EnterPrise Java Bean, es un API que forma parte del stándar para construir aplicaciones web empresariales(JEE, actualmente de Oracle Corporation, posom!). La idea que el programador se abstraiga de los problemas de una aplicación empresarial: concurrencia, transacciones, persistencia, seguridad, milesDeEtc. Tener claro que los ejb se disponen en un contendor dentro del Servidor de Aplicaciones. 
Se accede a él siempre a través de algún intermediario, existen dos tipos Proxy Local (Permite el acceso al EJB desde la misma máquina virtual) y Proxy Remoto (Permite el acceso desde una máquina remota).
No confundir los EJB con los JavaBeans, éstos últimos no pueden utilizarse en entornos distribuidos al no soportar nativamente la invocación remota (RMI), kiubo!


Exiten 3 tipos principales de EJB:

1.         Entity Beans: Pueden ser usado para mapear el acceso a una tabla de una base de datos a través de una clase (ORM: Object Relational Mapping). El servidor de aplicaciones te permite cargar, actualizar o eliminar los valores de una instancia de una clase directamente a la base de datos.

2.         Session Beans: Usados para implementar la funcionalidad de tu aplicación, existen dos tipos:
            a)         Stateful (con estado): Usado ejemplo para un carro de compras. El estado sería mantener los ítems comprados y la cantidad, en la sesión de tu aplicación y disponer de estos cuando el usuario confirme la compra o cuando desee agregar mas al carro o cuando desee eliminar o asdf, cuando quiera (mientras tenga la sesión abierta).
            b)         Stateless (sin estado): Es una clase, a veces llamada “de vida corta”. Un ejemplo es una clase que envie un mail, sólo llamas al método y dispones de él. Con un servidor de aplicaciones no necesitas instanciar la clase cada vez que necesites sus métodos, éste pasa una instancia desde un pool, siendo más eficiente.       

3.         Mesagge Driven Beans: Usan JMS (Java Messaging System) para enviar mensajes que quedan ubicados en una cola (queue), no requieren ser instanciados. En una aplicación de compra podría enviar una orden de mensaje a un gestor de almacenes, por ejemplo


Saludos desde Los Ángeles, Chile...
Siguiente post, crear un proyecto EJB...

martes, 29 de octubre de 2013

Programación Orientada a Objetos: Ejemplo Encapsulación.

En los post anteriores habíamos revisado los 3 grandes paradigmas y bases de la POO: encapsulación, herencia y polimorfísmo.

Ahora continuaremos con un ejemplo, para dejar en claro el mecanismo de encapsulación, que en palabras simples permite ocultar código/estados de un objeto al resto de los objetos (clases).

Pasos:
1.- Con el IDE que trabajen creen un nuevo proyecto java. En eclipse es File --> New --> Java Proyect
luego, creen dos clases, quedando la estructura de la siguiente manera:


















2.-
En la clase Manzana.java, creen dos atributos:
nombre de tipo String
cantidad de tipo in

En la Clase Encapsulacion.java, se crea el método static void main(String [] args), que permite hacer debug en cualquier clase java y dentro del método, se crea un objeto de tipo Manzana, con la sentencia
new y se define el tipo.



3.- Ahora agregaremos los métodos set/get dependiendo de lo que queramos probar en nuestro ejemplo

3.1.- Modificaremos la clase Manzana.java, verificando que todos sus atributos sean private (privados) y creamos sus accesores gets/sets:
 
En este caso, en la clase Encapsulacion.java al crear el objeto man de tipo Manzana, si intentamos ver las opciones del objeto, no podemos ni accesar ni settear un objeto de dicha clase. Está completamente oculto en nuestro ámbito.


3.2.- Segunda prueba, modificaremos la clase Manzana.java, verificando que todos sus atributos sean public (públicos) y creamos sus accesores gets/sets:

En este caso, nos damos cuenta al establecer como públicos los atributos del objeto Manzana, al crear un nuevo objeto en una clase externa, como en Encapsulacion.java se puede acceder a los accesores sin problema, pudiendo settear u obtener cualquier atributo, en cualquier momento durante la ejecución de un programa.


3.3.- Última opción, modificaremos la clase Manzana.java, verificando que todos sus atributos sean private (privados) y creamos sus accesores gets/sets. Sólo debes modificar cualquier gets dejandolo como público:

Al hacer esto, nos damos cuenta que sólo podemos acceder al valor de un atributo del objeto sin modificarlo. Esta es la gran ventaja de la encapsulación, puedes dar "acceso" a los atributos de tus objetos según los permisos que otros objetos merezcan. Es mucho mejor restringir el acceso a todos y brindarlo de a poco que viceversa. Así evitas que "alguien" cambie el valor de un objeto mientras está en ejecución un programa y obtengas un error no manejado.

Eso ha sido todo por hoy, espero haber aclararo las dudas y haber sido lo más claro posible.
Saludos...







lunes, 28 de octubre de 2013

Conceptos básicos de JAVA2: POLIMORFISMO Y HERENCIA.

Continuamos leyendo el libro de JAVA7. El el turno de definir conceptos básicos de JAVA. Antes de construir la casa, debes tener buenos cimientos :)

Primero, definamos que, Java se basa en la programación orientada a objetos (object-oriented programming, OOP)

¿Qué es OPP?
OPP es un enfoque de programación.
Desde un punto de vista general, un programa se puede organizar de dos formas: sobre su código (lo que sucede) o sobre sus datos (lo que se ve afectado). La OOP organiza el programa en torno a los datos y el principio clave es el control del acceso al código por parte de los datos.
Se definen los datos y las rutinas que permiten actuar sobre los mismos. Así, un tipo de datos define el tipo de operaciones que se pueden aplicar sobre los datos.


Rasgos comunes de la programación orientada a objetos (OOP)

1.- Encapsulación. (Pincha sobre el enlace para más información.)


2.- Polimorfismo.
Palabra que tiene su origen en el idioma griego, que significa multiples formas. Un ejemplo sencillo, lo vemos en el volante de un coche, el volante (la interfaz) es el mismo independiente del mecanismo de control empleado. Es decir, funciona igual en todos los coches, por lo tanto si sabes manejar el volante, puedes conducir cualquier coche.
El concepto de polimorfismo suele expresarse como "una interfaz, múltiples métodos". Puedes diseñar una interfaz genérica para un grupo de actividades relacionadas.

3.- Herencia:
En palabras simples, es el proceso mediante el que un objeto puede adquirir las propiedades de otro objeto.
Pasamos a un ejemplo:
    Una manzana reineta es parte de la clasificación manzana, que a su vez forma parte de la clasificación fruta, que depende de la clase alimento. Lo quiere decir que la clase alimento tiene determinadas cualidades que aplican logicamente a su subclase fruta. Ademas de las cualidades "heredadas de su clase padre" (clase desde la cual extiende), define cualidades propias (jugoza, dulce, etc). La clase manzana define las cualidades concretas de una manzana (crece en los árboles, no es tropical). Una manzana reineta hereda todas las cualidades de las clases anteriores y define sus características propias.
    Sin el uso de jerarquías, cada objeto debería explicitamente definir cada una de sus cualidades, incluso, las que se repiten entre objetos u entre clases, que fácilmente podrían ser agrupadas jerarquicamente.
    :) Gracias a la herencia solo debes definir las cualidades que lo hacen único dentro de la clase.





domingo, 27 de octubre de 2013

Conceptos básicos de JAVA: ENCAPSULACIÓN.

Continuamos leyendo el libro de JAVA7. El el turno de definir conceptos básicos de JAVA. Antes de construir la casa, debes tener buenos cimientos :)

Primero, definamos que, Java se basa en la programación orientada a objetos (object-oriented programming, OOP)

¿Qué es OPP?
OPP es un enfoque de programación.
Desde un punto de vista general, un programa se puede organizar de dos formas: sobre su código (lo que sucede) o sobre sus datos (lo que se ve afectado). La OOP organiza el programa en torno a los datos y el principio clave es el control del acceso al código por parte de los datos.
Se definen los datos y las rutinas que permiten actuar sobre los mismos. Así, un tipo de datos define el tipo de operaciones que se pueden aplicar sobre los datos.


Rasgos comunes de la programación orientada a objetos (OOP)

1.- Encapsulación:
Es un mecanismo de programación que combina dos cosas: el código con los datos que manipula, a tiempo que los protegen de interfaces externas. Al vincularlos, tanto el código como los datos, se crea OBJETO.

En un objeto, el codigo y/o los datos pueden ser privados o públicos.
- privados: el código o los datos privados son conocidos y sólo se accede a los mismos desde otra parte del objeto.
- públicos: cuando el código o los datos son públicos, otras partes del programa pueden acceder aunque se definan en un objeto.

*** Por lo general, las partes públicas de un objeto se usan para proporcionar una interfaz controlada a los elementos privados de un objeto.

Definiciones que debes tener siempre claras:
La unidad básica de encapsulación de java es la clase.
Una clase define la forma de un objeto (especificando los datos y el código que actúa sobre ellos).
Java usa una especificacion de clase para crear objetos. Los objetos son instancias de una clase.
El código y los datos que forman una clase se denominan miembros de la misma.
Los datos definidos de la clase se denominan variables miembros o variables de instancia.
El código que actúa sobre los datos se denominan  métodos miembros o métodos.

sábado, 26 de octubre de 2013

Hola, primer post, primeras ideas...
El blog que les presento, es para comentar las experiencias que vaya adquiriendo con el lenguaje JAVA, en particular con el libro JAVA7, adquirido para profundizar en los conocimientos de desarrollador.

Introducción al Libro JAVA7, Herbert Schildt...
La ultima versión oficial de java es java7 y su kit de desarrollo se denomina JDK7. Ésta es la primera vesión de Java desde que "Sun Microsystem" fue adquirido por Oracle (proceso que comenzó en abril del 2009 y finalizó en enero del 2010).

En cuanto al libro, las principales novedades añadidas a JAVA SE 7, aunque son denominadas "menores" por los genios de ORACLE, son:
1.- String puede ahora controlar la instrucción switch.
2.- Literales enteros binarios.
3.- Instrucción try ampliada, denominada try con recursos, que permite la gestión automática de recursos (Por ejemplo, ahora se puede cerrar automaticamente un flujo de datos cuando deje de ser necesario). En lo personal, a primera vista, me parece muy similar a la clausula "finally", mas adelante veremos de qué se trata.
4.- Interfaz de tipos (a través del operador de rombo) al crear una instancia genérica.
5.- Control mejorado de excepciones en el que dos o más excepciones se pueden capturar por una misma instrucción catch (denominada captura múltiple)

Espero aprender y ahondar mucho más en conocimientos...
Comenzamos.