Software de reproducción | Java |
---|---|
Lenguaje(s) de programación | Java |
Solicitud(es) | Servidor de aplicaciones |
Estado | Activo |
Licencia | Licencia pública Eclipse o licencia pública general GNU con excepción de Classpath |
Sitio web | jakarta.ee |
Ediciones de la plataforma Java |
---|
|
Jakarta EE , anteriormente Java Platform, Enterprise Edition ( Java EE ) y Java 2 Platform, Enterprise Edition ( J2EE ), es un conjunto de especificaciones que amplía Java SE [1] con especificaciones para funciones empresariales como computación distribuida y servicios web . [2] Las aplicaciones de Jakarta EE se ejecutan en tiempos de ejecución de referencia , que pueden ser microservicios o servidores de aplicaciones , que manejan transacciones, seguridad, escalabilidad, concurrencia y administración de los componentes que están implementando.
Jakarta EE se define por su especificación . La especificación define las API (interfaz de programación de aplicaciones) y sus interacciones. Al igual que con otras especificaciones de Java Community Process , los proveedores deben cumplir con ciertos requisitos de conformidad para declarar que sus productos cumplen con Jakarta EE .
Ejemplos de contextos en los que se utilizan tiempos de ejecución de referencia de Jakarta EE son: comercio electrónico , contabilidad y sistemas de información bancaria .
La plataforma se conoció como Java 2 Platform, Enterprise Edition o J2EE desde la versión 1.2, hasta que el nombre se cambió a Java Platform, Enterprise Edition o Java EE en la versión 1.5.
Oracle mantuvo Java EE bajo el Java Community Process . El 12 de septiembre de 2017, Oracle Corporation anunció que presentaría Java EE a la Fundación Eclipse . [3] El proyecto de nivel superior de Eclipse se denominó Eclipse Enterprise for Java (EE4J). [4] La Fundación Eclipse no pudo llegar a un acuerdo con Oracle sobre el uso de las marcas comerciales javax y Java. [5] Oracle posee la marca comercial del nombre "Java" y la plataforma pasó de llamarse Java EE a Jakarta EE. [6] [7] El nombre hace referencia a la ciudad más grande de la isla de Java y también a la capital de Indonesia, Yakarta . [8] El nombre no debe confundirse con el antiguo Proyecto Jakarta que fomentó una serie de proyectos Java actuales y anteriores en la Apache Software Foundation .
Versión de la plataforma | Lanzamiento [9] | Especificación | Compatibilidad con Java SE | Cambios importantes |
---|---|---|---|---|
EE 11 de Yakarta | Previsto para junio/julio de 2024 | 11 | Java SE 21 | Datos |
Yakarta EE 10 | 22 de septiembre de 2022 [10] | 10 |
| Eliminación de elementos obsoletos en Servlet, Faces, CDI y EJB (Entity Beans y Embeddable Container). Tiempo de compilación de CDI. |
Jakarta EE 9.1 | 25 de mayo de 2021 [11] | 9.1 |
| Compatibilidad con JDK 11 |
Yakarta EE 9 | 08-12-2020 [12] | 9 | Java SE 8 | El espacio de nombres de la API se mueve de javax ajakarta |
EE 8 de Yakarta | 10 de septiembre de 2019 [13] | 8 | Java SE 8 | Compatibilidad total con Java EE 8 |
Java EE 8 | 31 de agosto de 2017 | JSR366 | Java SE 8 | Seguridad basada en HTTP/2 y CDI |
Java EE 7 | 28 de mayo de 2013 | JSR342 | Java SE 7 | Compatibilidad con WebSocket , JSON y HTML5 |
Java EE 6 | 10 de diciembre de 2009 | JSR316 | Java SE 6 | Beans y REST administrados por CDI |
Java EE 5 | 11 de mayo de 2006 | JSR244 | Java SE 5 | Anotaciones de Java y genéricos en Java |
J2EE 1.4 | 11 de noviembre de 2003 | JSR 151 | J2SE 1.4 | Servicios web interoperables WS-I [14] |
J2EE 1.3 | 24 de septiembre de 2001 | JSR58 | J2SE 1.3 | Arquitectura del conector Java [15] |
J2EE 1.2 | 17 de diciembre de 1999 | 1.2 | J2SE 1.2 | Publicación de especificaciones iniciales |
Jakarta EE incluye varias especificaciones que sirven para diferentes propósitos, como generar páginas web, leer y escribir desde una base de datos de forma transaccional y gestionar colas distribuidas.
Las API de Jakarta EE incluyen varias tecnologías que amplían la funcionalidad de las API básicas de Java SE , como Jakarta Enterprise Beans , conectores , servlets , Jakarta Server Pages y varias tecnologías de servicios web .
En un intento por limitar la huella de los contenedores web, tanto en términos físicos como conceptuales, se creó el perfil web, un subconjunto de las especificaciones de Jakarta EE. El perfil web de Jakarta EE comprende lo siguiente:
Especificación | Java EE 6 [16] | Java EE 7 [17] | Java EE 8 [18] Yakarta EE 8 [19] | Yakarta EE 9 [20] Yakarta EE 9.1 [21] | Yakarta EE 10 [22] |
---|---|---|---|---|---|
Servlet de Yakarta | 3.0 | 3.1 | 4.0 | 5.0 | 6.0 |
Páginas del servidor de Yakarta ( JSP ) | 2.2 | 2.3 | 2.3 | 3.0 | 3.1 |
Lenguaje de expresión de Yakarta ( EL ) | 2.2 | 3.0 | 3.0 | 4.0 | 5.0 |
Compatibilidad de depuración de Jakarta con otros lenguajes (JSR-45) | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 |
Biblioteca de etiquetas estándar de Jakarta ( JSTL ) | 1.2 | 1.2 | 1.2 | 2.0 | 3.0 |
Caras de Yakarta | 2.0 | 2.2 | 2.3 | 3.0 | 4.0 |
Servicios web RESTful de Jakarta ( JAX-RS ) | 1.1 | 2.0 | 2.1 | 3.0 | 3.1 |
WebSocket de Yakarta ( WebSocket ) | — | 1.0 | 1.1 | 2.0 | 2.1 |
Procesamiento de JSON en Jakarta ( JSON-P ) | — | 1.0 | 1.1 | 2.0 | 2.1 |
Vinculación JSON de Jakarta ( JSON-B ) | — | — | 1.1 | 2.0 | 3.0 |
Anotaciones de Yakarta ( CA ) | 1.1 | 1.2 | 1.3 | 2.0 | 2.1 |
Beans empresariales de Jakarta ( EJB ) | 3.1 Lite | 3.2 Lite | 3.2 Lite | 4.0 Lite | 4.0 Lite |
Transacciones de Yakarta ( JTA ) | 1.1 | 1.2 | 1.2 | 2.0 | 2.0 |
Persistencia de Yakarta ( JPA ) | 2.0 | 2.1 | 2.2 | 3.0 | 3.1 |
Validación de frijoles de Yakarta | 1.0 | 1.1 | 2.0 | 3.0 | 3.0 |
Frijoles gestionados por Yakarta | 1.0 | 1.0 | 1.0 | 2.0 | — |
Interceptores de Yakarta | 1.1 | 1.2 | 1.2 | 2.0 | 2.1 |
Contextos de Yakarta e inyección de dependencias ( CDI ) | 1.0 | 1.1 | 2.0 | 3.0 | 4.0 |
Inyección de dependencia en Yakarta | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 |
Seguridad en Yakarta | — | — | 1.0 | 2.0 | 3.0 |
Autenticación de Yakarta | — | 1.0 | 1.1 | 2.0 | 3.0 |
Concurrencia de Yakarta | — | — | — | — | 3.0 |
Aunque por definición todas las implementaciones de Jakarta EE proporcionan el mismo nivel básico de tecnologías (es decir, la especificación de Jakarta EE y las API asociadas), pueden diferir considerablemente con respecto a características adicionales (como conectores , agrupamiento , tolerancia a fallas , alta disponibilidad , seguridad , etc.), tamaño instalado, huella de memoria , tiempo de inicio, etc.
Referencia al tiempo de ejecución [23] [24] [25] | Revelador | Plataforma Jakarta EE 10 | Productos compatibles con la plataforma Jakarta EE 9/9.1 | Productos compatibles con el perfil web Jakarta EE 9/9.1 | Productos compatibles con la plataforma Jakarta EE 8 | Productos compatibles con el perfil web de Jakarta EE 8 | Licencias |
---|---|---|---|---|---|---|---|
Pez de cristal | Eclipse | Sí 7.0.0 | Sí 6.0.0/ 6.1.0 | Sí 6.0.0/ 6.1.0 | Sí 5.1.0 | Sí 5.1.0 | Software libre |
Libertad abierta | IBM | Sí 22.0.0.13-beta, [26] 23.0.0.3 [27] | Sí 21.0.0.12 | Sí 21.0.0.12 | Sí 19.0.0.6, 20.0.0.3 | Sí 19.0.0.6, 20.0.0.3 | Software libre |
Libertad de WebSphere | IBM | Sí 23.0.0.3 [27] | Sí 21.0.0.12 | Sí 21.0.0.12 | Sí 20.0.0.3 | Sí 20.0.0.3 | Software propietario |
Mosca salvaje | Sombrero rojo | Sí 27.0.0.Alpha5 | Sí 23.0.1-Vista previa/25.0.0-Vista previa | Sí 23.0.1-Vista previa/25.0.0-Vista previa | Sí 18.0.0 | Sí 18.0.0 | Software libre |
Aplicación de aplicación de programas JBoss | Sombrero rojo | No | No | No | Sí 7.3.0 | Sí 7.3.0 | Software libre |
TomEE | apache | No | No | Sí 9.0.0-M7 [28] | No | Sí 8.0.x | Software libre |
Servidor Payara | Servicios Payara Limitada | Sí 6.2022.1 Alfa 4 | Sí 6.2021.1 Alfa 1 | No | Sí 5.22.0, 5.23.0 | Sí 5.23.0 | Software libre |
Servidor de aplicaciones Thunisoft | Tecnología de la información de Beijing Thunisoft | No | Sí 3.0 | No | Sí 2.8 | No | Software propietario |
Jesús | TmaxSoft | No | No | No | Sí 8.5 | No | Software propietario |
Servidor de aplicaciones InforSuite | Middleware de Shandong Cvicse | No | Sí 11 | No | Sí 10 | No | Software propietario |
Hacer referencia al tiempo de ejecución | Revelador | Certificación Java EE 8 – Completa | Certificación Java EE 8 – Web | Certificación Java EE 7 – Completa | Certificación Java EE 7 – Web | Certificado Java EE 6: página oficial completa de Oracle para compatibilidad con Java EE. | Certificación Java EE 6 – Web | Certificación Java EE 5 | Certificación J2EE 1.4 | Licencias |
---|---|---|---|---|---|---|---|---|---|---|
Edición de código abierto del servidor GlassFish | Oráculo | Sí v5.0 [29] | Sí v5.0 [29] | Sí v4.x [30] | Sí v4.x [30] | Sí v3.x y superiores [31] | Sí, perfil web v3.x | Sí v2.1.x [31] | Software libre | |
Servidor Oracle GlassFish | Oráculo | Sí v3 [32] basado en el servidor de aplicaciones GlassFish de código abierto | Sí, servidor de aplicaciones Sun Java System v9.0 | Sí, servidor de aplicaciones Sun Java System v8.2 | Software propietario | |||||
Servidor Oracle WebLogic | Oráculo | Sí 14.1.1 [33] | Sí 12.2.1 [34] | Sí v12c [35] | Sí v10.3.5.0 | Sí v9 | Software propietario | |||
Mosca salvaje | Sombrero rojo | Sí v14.x [29] | Sí v14.x [29] | Sí v8.1 [36] | Sí v8.0.0.Final | Sí v7.1 [37] | Sí v6.0 [38] y v7.0 [39] | Sí v5.1 [40] [41] | Sí v4.x | Software libre |
Plataforma de aplicaciones empresariales JBoss | Sombrero rojo | Sí v7.2 [42] | Sí v7.0 [30] | Sí v7.0 [30] | Sí v6.0 [43] | Sí v5 | Software propietario | |||
Servidor de aplicaciones IBM WebSphere | IBM | Sí v9.x [29] | Sí v9.x [30] | Sí v8 [44] | Sí v7 | Sí | Software propietario | |||
Servidor de aplicaciones IBM WebSphere Liberty | IBM | Sí v18.0.0.2 [45] | Sí v18.0.0.2 [45] | Sí v8.5.5.6 [46] [47] | Sí v8.5.5.6 [30] | Sí v8.5.5 [48] | Software propietario | |||
Libertad abierta | IBM | Sí v18.0.0.2 | Sí v18.0.0.2 | Software libre | ||||||
Edición comunitaria de IBM WebSphere Application Server | IBM | Sí v3.0 | Sí v2.1 | Software propietario | ||||||
Apache Gerónimo | apache | Sí v3.0-beta-1 [49] [50] | Sí v2.0 | Sí v1.0 | Software libre | |||||
Jesús | TmaxSoft | Sí v8 | Sí v7 [51] [52] | Sí v6 | Sí v5 | Software propietario | ||||
Servidor de aplicaciones Cosminexus | Hitachi | Sí v10.0 [29] | Sí v9 [53] | Software propietario | ||||||
Servidor de aplicaciones Fujitsu Interstage [54] | Fujitsu | Sí v12.0 [29] | Sí v1 Azure/v10.1 [55] [56] | Sí | Software propietario | |||||
WebOTX | Comité ejecutivo nacional | Sí [57] | Sí | Software propietario | ||||||
Servidor de aplicaciones BES | Tierras bajas | Sí v9.5 [30] | ||||||||
Apache TomEE [58] [59] | apache | No 7 (similar a Java EE 7, pero no certificado [60] ) | Sí | Software libre | ||||||
Servidor de resina | Caucho | Sí v4.0 [61] | Sí | Software propietario | ||||||
Siwpas | OW2 | Sí v6.0 [62] | Software libre | |||||||
Jonás | OW2 | Sí v5.3 rc1 [63] | Sí | Sí | Software libre | |||||
SAP NetWeaver | SAVIA | Sí v2.x [64] | Sí | Sí | Software propietario | |||||
Contenedores Oracle para Java EE | Oráculo | Sí | Software propietario | |||||||
Servidor web Oracle iPlanet | Oráculo | Sí Servidor web Sun Java System | Software propietario | |||||||
Servidor de aplicaciones Oracle 10g | Oráculo | Sí | Software propietario | |||||||
Servidor Pramati | Tecnologías Pramati | Sí v5.0 | Software propietario | |||||||
Trifork T4 | Trifork | Sí | Software propietario | |||||||
Servidor de aplicaciones empresariales Sybase [65] | Base de datos Sybase | Sí | Software propietario |
El ejemplo de código que se muestra a continuación demuestra cómo se utilizan juntas varias tecnologías en Java EE 7 para crear un formulario web para editar un usuario.
En Jakarta EE, se puede crear una interfaz de usuario (web) utilizando Jakarta Servlet , Jakarta Server Pages ( JSP ) o Jakarta Faces ( JSF ) con Facelets . El ejemplo siguiente utiliza Faces y Facelets . No se muestra explícitamente que los componentes de entrada utilizan la API de validación de bean de Jakarta EE en segundo plano para validar las restricciones.
<html xmlns= "http://www.w3.org/1999/xhtml" xmlns:h= "http://xmlns.jcp.org/jsf/html" xmlns:f= "http://xmlns.jcp.org/jsf/core" > <f:metadata> <f:viewParam nombre= "user_id" valor= "#{userEdit.user}" convertidor= "#{userConvertor}" /> </f:metadata> <h:cuerpo> <h:mensajes /> <h:form> <h:panelGrid columnas= "2" > <h:outputLabel para= "firstName" valor= "Nombre" /> <h:inputText id= "firstName" valor= "#{userEdit.user.firstName}" etiqueta= "Nombre" /> <h:outputLabel for= "lastName" value= "Apellido" /> <h:inputText id= "lastName" value= "#{userEdit.user.lastName}" label= "Apellido" /> <h:commandButton acción= "#{userEdit.saveUser}" valor= "Guardar" /> </h:panelGrid> </h:form> </h:cuerpo> </html>
Para facilitar la visualización, Jakarta EE utiliza un concepto denominado "Backing Bean". El ejemplo siguiente utiliza Contexts and Dependency Injection (CDI) y Jakarta Enterprise Beans ( EJB ).
@Named @ViewScoped clase pública UserEdit { Usuario privado usuario ; @Inject usuarioDAO privado userDAO ; public String saveUser ( ) { userDAO.save ( this.user ) ; addFlashMessage ( " Usuario " + this.user.getId ( ) + " guardado " ) ; devolver "usuarios.xhtml?faces-redirect=true" ; } public void setUser ( Usuario usuario ) { this.usuario = usuario ; } público Usuario getUser () { return usuario ; } }
Para implementar la lógica empresarial, Jakarta Enterprise Beans ( EJB ) es la tecnología dedicada en Jakarta EE. Para la persistencia real, se puede utilizar JDBC o Jakarta Persistence (JPA). El ejemplo siguiente utiliza EJB y JPA. No se muestra explícitamente que EJB utiliza JTA en secreto para controlar el comportamiento transaccional.
@Stateless clase pública UserDAO { @PersistenceContext EntityManager privado entityManager ; public void save ( Usuario usuario ) { entityManager . persist ( usuario ); } public void update ( Usuario usuario ) { entityManager.merge ( usuario ) ; } pública Lista < Usuario > getAll ( ) { return entityManager.createNamedQuery ( " Usuario.getAll " , Usuario.class ) .getResultList ( ) ; } }
Para definir clases de entidad/modelo, Jakarta EE proporciona Jakarta Persistence ( JPA ) y, para expresar restricciones en esas entidades, proporciona la API Bean Validation. El siguiente ejemplo utiliza ambas tecnologías.
@Entity clase pública Usuario { @Id @GeneratedValue ( estrategia = IDENTIDAD ) privado Entero id ; @Size ( min = 2 , mensaje = "Nombre demasiado corto" ) cadena privada firstName ; @Size ( min = 2 , mensaje = "Apellido demasiado corto" ) private String apellido ; público entero getId () { devolver id ; } público void setId ( entero id ) { este . id = id ; } public String getFirstName () { devolver nombre ; } public void setFirstName ( String firstName ) { this.firstName = firstName ; } public String getLastName () { return apellido ; } public void setLastName ( String apellido ) { this.lastName = apellido ; } }
{{cite web}}
: |author=
tiene nombre genérico ( ayuda )