tutorial - java standard edition
¿Qué es exactamente un contenedor en J2EE y cómo ayuda? (4)
Estoy leyendo la especificación J2EE 1.4 en este momento y hay muchos términos que no entiendo. Esto es de las especificaciones para contenedores:
Los contenedores proporcionan soporte de tiempo de ejecución para los componentes de la aplicación J2EE. Los contenedores proporcionan una vista federada de las API J2EE subyacentes a los componentes de la aplicación. Los componentes de la aplicación J2EE nunca interactúan directamente con otros componentes de la aplicación J2EE. Usan los protocolos y métodos del contenedor para interactuar entre ellos y con los servicios de plataforma. La interposición de un contenedor entre los componentes de la aplicación y los servicios J2EE permite que el contenedor inyecte de forma transparente los servicios definidos por los descriptores de despliegue de los componentes, como la gestión declarativa de transacciones, las comprobaciones de seguridad, la agrupación de recursos y la gestión estatal.
Como vengo del mundo del desarrollo web, no soy capaz de comprender, qué hace exactamente esto y cuál es el propósito de un contenedor. ¿Qué se entiende por proporcionar soporte de tiempo de ejecución? ¿Cómo hace que un J2EE sea un mejor sistema en términos de escalabilidad o arquitectura?
¿Qué se entiende por proporcionar soporte de tiempo de ejecución?
Viene del mundo del desarrollo web, lo que significa que sabe que una aplicación tradicional hecha para la web debe ser accesible a través del protocolo HTTP. Java es un lenguaje de programación que se ejecuta en una JVM por diseño.
Entonces, ¿cómo vincular las solicitudes HTTP a su código Java?
Algo debe hacer eso. Un servidor HTTP como Apache puede hacer eso y, utilizando la antigua Interfaz de puerta de enlace común (CGI), puede llamar a su código Java cuando el servidor Apache recibe solicitudes HTTP.
Eso es genial, pero en algún momento la aplicación web necesitará autenticación; uno puede escribir código para esto, la aplicación web necesitará acceso a la base de datos, también se puede escribir el código, la aplicación web necesitará algún código de UI que también se pueda escribir con MVC, etc.
Esta aplicación web tiene necesidades que otras aplicaciones web seguramente tendrán y se pueden ver las necesidades comunes: autenticación, fuentes de datos (como DB, etc.), etc.
Java ya tiene muchas de estas necesidades como API, como se menciona en las respuestas anteriores, así que ¿por qué no poner todo este conocimiento y los requisitos comunes para la reutilización en algo que podría ser compatible con la aplicación web en tiempo de ejecución: un contenedor JEE.
¿Cómo hace un JEE un mejor sistema en términos de escalabilidad y arquitectura?
Creo que la pregunta sería ¿por qué JEE es un sistema más escalable que un simple servidor HTTP con el uso de CGI?
Esto ha sido respondido por otros, pero con mi respuesta anterior, creo que es aún más claro.
Espero que esto ayude.
Las aplicaciones J2EE / Java EE no son autónomas. Para poder ejecutarse, deben desplegarse en un contenedor. En otras palabras, el contenedor proporciona un entorno de ejecución en la parte superior de la JVM.
Además, las aplicaciones se basan en varias API como JPA, EJB, servlet, JMS, JNDI, etc. La función del contenedor compatible con EE es proporcionar una implementación estándar de todas o algunas de estas API. Esto significa que teóricamente puedes ejecutar tu aplicación sobre cualquier contenedor siempre que dependa de las API estándar.
Desde una perspectiva técnica, un contenedor es simplemente otra aplicación Java SE con un método main()
. Las aplicaciones EE por otro lado son una colección de servicios / beans / servlets / etc. El contenedor encuentra estos componentes y los ejecuta, proporcionando implementaciones de API, monitoreo, escalabilidad, confiabilidad, etc.
Los contenedores JEE proporcionan una envoltura alrededor de su código fuente.
Los contenedores típicos son el clásico bean de datos EJB y el bean controlado por mensajes. Hasta cierto punto, los servlets y portlets también se pueden considerar como contenedores.
Lo que el contenedor proporciona una gran cantidad de servicios:
- invocación: su código se carga y se inicia cuando es necesario.
- contexto transaccional: la mayoría del código de contenedor ocurre en un contexto de transacción ACID.
- configuración: el contenedor utiliza cosas como conexiones JDBC.
- seguridad: el contenedor restringirá el acceso a su código y datos a usuarios autorizados.
- escalabilidad: dado que el contenedor está a cargo de la programación, puede disparar automáticamente copias adicionales si la carga se vuelve pesada o puede configurarse estáticamente para ejecutar varias instancias en paralelo.
- Encapsulación Su programa expone una única interfaz al contenedor. Sin embargo, externamente puede exponer esta interfaz en una variedad de formas (Corba, WSDL, JSM, etc.).
- Servicios comunes. como el registro, servicios expuestos por otros EJB. etc.
Por lo general, una aplicación Java usa una JVM y tiene un proceso de nivel de sistema operativo para cada una. El contenedor permite que múltiples aplicaciones Java se ejecuten bajo una JVM.