¿Qué es un POJO, EJB y un Bean?

logo-java1Voy a lanzar una serie de post dedicados a conceptos interesantes sobre Java con motivo de la aparición de Java 8 para que nunca olvidemos quiénes somos y de dónde venimos.

Hoy hablaremos de tres conceptos claves sobre tipos de clases.

POJO son las iniciales de "Plain Old Java Object", que puede interpretarse como "Un objeto Java Plano Antiguo". Un POJO es una instancia de una clase que no extiende ni implementa nada en especial. Para los programadores Java sirve para enfatizar el uso de clases simples y que no dependen de un framework en especial. Este concepto surge en oposición al modelo planteado por los estándares EJB anteriores al 3.0, en los que los Enterprise JavaBeans (EJB) debían implementar interfaces especiales.

Por ejemplo, un Controller de Spring tiene que extender de SimpleFormController, e implementar los métodos abstractos de ese tipo: por eso, no es un POJO. Un Servlet, tiene que extender de HttpServlet por lo que tampoco es un POJO. En cambio, si defines una clase Cliente con atributos y unas cuantas operaciones, tienes un simple y modesto POJO.

Un Enterprise Java Bean (EJB) es un componente de negocio Java Enterprise, y para su ejecución necesita un contenedor EJB/J2EE (JBoss, WAS, OAS, etc). El hecho de usar EJB's te da acceso a los servicios del Contenedor EJB (manejo de transacciones, seguridad ,persistencia, etc) que simplifican bastante la construcción de soluciones empresariales.

Un JavaBean (o también conocido simplemente como Bean) es una clase simple en Java que cumple con ciertas normas con los nombres de sus propiedades y métodos.

Un JavaBean debe tener un constructor sin argumentos, tiene declarados todos sus atributos como privados y para cada uno de ellos un método setter y getter, añadiéndole la palabra "set" o "get" al nombre del atributo y deben ser serializables. Mediante estos JavaBeans, desarrollamos nuestro modelo de objetos (o modelo de dominio) para la aplicación.

Por ejemplo:

public class ClienteBean implements java.io.Serializable {
   private String nombre;
   private int edad;
 
   public ClienteBean() {
      // Constructor
   }
 
   public String getNombre() {
     return nombre;
   }
 
   public void setNombre(String nombre) {
     this.nombre = nombre;
   }
 
   public int getEdad() {
     return edad;
   }
 
   public void setEdad(int edad) {
     this.edad = edad;
   }
}