Lenguaje de proposito general creado por Sun Microsystem.
Sus principales características son:
Enterprise JavaBean (EJB)
Esta tecnología pretende que el programador sólo tenga que escribir la logica de negocio de la aplicación y encargarse por si misma de otras caracteristicas importantes en sistemas distribuidos de cierta envergadura, caracteristicas que además son muy complejas de implementar, como por ejemplo:
La idea es que definiendo una arquitectura con los EJB's adecuados sólo con programar la lógica de negocio se obtengan sistemas que cumplan con todos estos requisitos que de tener que programarlos de 0 sería una autentica locura. Aunque claro no todo es tan bonito como lo pintan y es una tecnología bastante compleja. Como tecnologías similares se podría nombrar a COM+ de microsoft y a los componentes CORBA.
Los EJBs pueden ser de tres tipos: Session Stateless, Session Statefull, Entiity. Son objetos que se ejecutan en un contenedor que les proporciona diversos servicios y gestiona sus ciclos de vida. En realidad estos contenedores no son demasiado grandes como programas, JBoss o OC4J creo que andan entre los 20 y 35 Megas la última vez que los vi.
Cada EJB tiene asociado tres clases (o alguna es interfaz, no recuerdo ahora exactamente): 1) Bean: El código propiamente dicho de tus funciones y de la implementación de los métodos del ciclo de vida. 2) Remote: La que define el interfaz para ser llamado remotamente, que exporta ese bean 3) Home: La clase que permite crear a un cliente un EJB.
Y además tienen asociados un xml de configuración. (nº de instancias posibles, qué clases lo implementan, si guarda sesión o no…) que usa el contenedor para realizar su trabajo.
Los EJBs de tipo session los puedes ver como objetos, que pueden ser remotos, que implementan una serie de métdos, en principio “métodos de negocio”. Los session stateful, pues guardan el estado del objeto EJB entre una llamada y otra del mismo cliente.
Los Entity son representaciones de datos, y en su implementación, o bien defines en su clase los métodos de carga, almacenamiento, modificación respecto a el almacenamiento externo (BMP: Bean Managed Persistence), o bien defines en los ficheros de configuración los atributos que tiene y su relación con campos de la BBDD (Container Managed Persistence)
Luego el contenedor, se preocupa de cosas como caida ante fallos, recuperaciones, cluster, transacciones….
En realidad no son nada del otro mundo. Ahora con la nueva especificación J2EE parece que se van a simplificar bastante, que no habrá que implementar métodos especiales ni preocuparse tanto del ciclo de vida (en los session), que serán más como POJOs. Y los entity, parece que se van a solapar más con los aactuales métodos de ORM (Object Relational Mapping)