¿Qué es realmente Java EE? [cerrado]

100

Java EE tiene este "velo misterioso" a su alrededor para los desarrolladores de Java más jóvenes, uno que he estado tratando de levantar durante bastante tiempo con poco éxito.

La confusión surge de:

  • Java EE parece ser tanto una biblioteca como una plataforma; hay varias formas de "obtener" la biblioteca de Java EE, normalmente de algo como la descarga del SDK de Java EE de Oracle. Sin embargo, la biblioteca Java EE no funcionará ni se compilará a menos que su código se esté ejecutando o tenga acceso a un servidor de aplicaciones Java EE (como JBoss, GlassFish, Tomcat, etc.). ¿Por qué? ¿No pueden las bibliotecas funcionar fuera del entorno del servidor de aplicaciones? ¿Por qué necesito algo masivo como JBoss solo para compilar un código simple para enviar un correo electrónico?

  • ¿Por qué las bibliotecas Java EE no son "estándar" y están incluidas en la descarga regular de JVM y / o en el SDK?

  • ¿Por qué hay tantas ofertas de Java EE cuando en realidad solo hay dos tipos principales de Java estándar (Oracle JVM / SDK | OpenJDK JVM / JDK)?

  • ¿Qué se puede hacer con Java EE que no se puede hacer con Java estándar?

  • ¿Qué se puede hacer con Java estándar que no se puede hacer con Java EE?

  • ¿Cuándo decide un desarrollador que "necesita" Java EE?

  • ¿Cuándo decide un desarrollador que no necesita Java EE?

  • ¿Por qué la versión de la biblioteca Java EE no está sincronizada con las versiones estándar de la biblioteca Java (Java EE 6 frente a Java 7)?

¡Gracias por ayudarme a limpiar la flagelación!

SnakeDoc
fuente
5
Para su información, este tipo de pregunta (muchas preguntas abiertas en una publicación) no se considera constructivo en SO. Lea las Preguntas frecuentes y Cómo pedir para obtener consejos sobre cómo escribir buenas preguntas.
Jim Garrison
6
y ya cerrado ... Sería bueno tener todas estas respuestas en el mismo lugar por personas que lo han usado, en lugar de buscar en toda la red ....
Daniel Ryan
18
SO se vuelve cada vez más rígido e inutilizable. Hubo un tiempo en el que todas las personas inteligentes aquí intentaban ayudarse entre sí. Ahora todas las preguntas se cierran en 5 minutos. Está sobreregulado y es inutilizable y frustrante. ¿Todos los administradores de eliminación de wikipedia vinieron aquí?
user573215
34
Me gusta tu pregunta y ya estaba escribiendo una respuesta, cuando apareció un mensaje que decía que esta pregunta estaba cerrada. AFAI puedo ver en este caso que la regla es el problema. Si bien veo el propósito del control de calidad y las regulaciones en general, dudo que este tipo de reglas funcionen bien en un sitio como este. Cuando comencé a visitar SO, nunca me di cuenta de que hay un problema sin esa regla. Ahora SO está tan regulado en exceso, ya no ayuda y es simplemente frustrante. Ahora mismo es un sitio de archivo. Hay tanta gente inteligente por aquí. Discutamos la tecnología hasta que nuestras cabezas ardan y no se bloqueen entre sí.
user573215
6
Sí, voté para cerrar esta pregunta (así que ve y busca algunas respuestas que he hecho y vota en contra :)). Google podría responder fácilmente a esta pregunta. Java EE y por qué existe es un tema muy candente . Es como preguntar por qué existe Emacs o Silverlight o Flash o cualquier biblioteca / aplicación / marco de software. La pregunta no es una buena pregunta porque son como 40 preguntas y porque no es realmente una pregunta de programación.
Adam Gent

Respuestas:

39

¿Por qué las bibliotecas no pueden funcionar fuera del entorno del servidor de aplicaciones?

De hecho, pueden. La mayoría de las bibliotecas se pueden usar directamente de forma independiente (en Java SE) o incluirse en un .war (prácticamente eso es casi siempre Tomcat). Algunas partes de Java EE, como JPA, tienen secciones explícitas en sus respectivas especificaciones que indican cómo deben funcionar y usarse en Java SE.

En todo caso, no es tanto un entorno de servidor de aplicaciones per se lo que está en juego aquí, sino la presencia de todas las demás bibliotecas y el código de integración que las une.

Por eso, las anotaciones se escanearán solo una vez para todas sus clases en lugar de que cada biblioteca (EJB, JPA, etc.) realice este escaneo una y otra vez. También por eso, las anotaciones CDI se pueden aplicar a beans EJB y los administradores de entidades JPA se pueden inyectar en ellos.

¿Por qué necesito algo masivo como JBoss solo para compilar un código simple para enviar un correo electrónico?

Hay algunas cosas mal en esta pregunta:

  1. Para compilar, solo necesita el tarro de API, que está por debajo de 1 MB para el perfil web y un poco más de 1 MB para el perfil completo.
  2. Para ejecutar, obviamente necesita una implementación, pero "masivo" es exagerar las cosas. El OpenJDK, por ejemplo, tiene alrededor de 75 MB y TomEE (una implementación de perfil web que contiene soporte de correo) solo tiene 25 MB. Incluso GlassFish (una implementación de perfil completo) tiene solo 53 MB.
  3. El correo funciona perfectamente bien desde Java SE (y por lo tanto Tomcat) y también utiliza el mail.jar independiente y la activación.jar .

¿Por qué las bibliotecas Java EE no son "estándar" y están incluidas en la descarga regular de JVM y / o en el SDK?

Java EE, en cierto modo, fue uno de los primeros intentos de dividir el ya enorme JDK en fragmentos que son más fáciles de administrar y descargar. La gente ya se está quejando de que las clases gráficas (AWT, Swing) y los Applets están dentro del JRE cuando todo lo que hacen es ejecutar algunos comandos en un servidor sin cabeza. ¿Y luego también desea incluir todas las bibliotecas Java EE en el JDK estándar?

Con el eventual lanzamiento del soporte de modularidad, solo tendremos un JRE base pequeño con muchas cosas que se pueden instalar por separado como paquetes. Quizás algún día muchas o incluso todas las clases que ahora componen Java EE serán también ese paquete. El tiempo dirá.

¿Por qué hay tantas ofertas de Java EE cuando en realidad solo hay dos tipos principales de Java estándar (Oracle JVM / SDK | OpenJDK JVM / JDK)?

Hay más de dos sabores de Java SE. Existe al menos el IBM JDK, el anterior BEA (JRocket, que se fusionará con el de Oracle / Sun debido a la adquisición), varias otras implementaciones de código abierto y una gran cantidad de implementaciones para uso integrado.

La razón por la que Java SE y EE son una especificación es que muchos proveedores y organizaciones pueden implementarlo y, por lo tanto, fomenta la competencia y mitiga el riesgo de bloqueo del proveedor.

Realmente no es diferente con los compiladores C y C ++, donde tiene muchas ofertas en competencia y todas se adhieren al estándar C ++.

¿Por qué la versión de la biblioteca Java EE no está sincronizada con las versiones estándar de la biblioteca Java (Java EE 6 frente a Java 7)?

Java EE se basa en Java SE, por lo que se queda atrás. Sin embargo, las versiones se corresponden. Java EE 5 requiere Java SE 5. Java EE 6 requiere Java SE 6 y así sucesivamente. Es solo que principalmente cuando Java SE X es actual, Java EE X-1 es actual.

Arjan Tijms
fuente
3
esta es una respuesta realmente buena y concisa a las preguntas anteriores. Lo desglosa para que incluso un desarrollador no Java ee pueda comprender los conceptos. Gracias.
SnakeDoc
12

Aquí hay algunas respuestas rápidamente redactadas a sus preguntas ...

  • ¿Por qué no pueden funcionar las bibliotecas JavaEE sin un servidor de aplicaciones? Los servicios proporcionados por JavaEE (transacciones administradas por contenedores, inyección de dependencias administradas por contenedores, servicio de temporizador, etc.) involucran inherentemente servidores de aplicaciones compatibles con JavaEE (por ejemplo: GlassFish, JBoss, WebSphere, etc.). Por lo tanto, las bibliotecas JavaEE no sirven para nada sin un contenedor de este tipo. " ¿Por qué necesito algo tan masivo como JBoss solo para compilar un código simple para enviar un correo electrónico? " Hay formas de enviar un correo electrónico sin JavaEE ... Pero si quieres hacerlo de la forma JavaEE, necesitas un contenedor JavaEE.

  • ¿Por qué no se incluyen las bibliotecas JavaEE con la descarga de JavaSE? La misma razón por la que muchas bibliotecas no están incluidas: sería una exageración. Dado que ni siquiera puede usar las bibliotecas JavaEE sin un servidor de aplicaciones, ¿por qué molestarse en incluirlas? JavaEE debe descargarse siempre y cuando un desarrollador instale un servidor de aplicaciones y decida utilizar JavaEE.

  • ¿Por qué hay tantas ofertas de JavaEE? ¿Hay realmente " tantas " ofertas de JavaEE? Si es así, enumere algunos de ellos. Más exactamente, creo que hay varias implementaciones de las mismas API .

  • ¿Qué se puede hacer con JavaEE que no se puede hacer sin Java estándar? Un montón. No puede confiar en un servidor de aplicaciones para administrar transacciones o contextos de persistencia sin JavaEE. No puede permitir que un servidor de aplicaciones administre la inyección de dependencias EJB sin JavaEE. No puede usar un servicio de temporizador administrado por aplicación sin JavaEE. La respuesta a esta pregunta debería aclarar la respuesta a la primera pregunta ... La mayoría de los servicios proporcionados por JavaEE requieren un contenedor JavaEE.

  • ¿Qué se puede hacer con JavaSE que no se puede hacer con JavaEE? Um ... no lo sé.

  • ¿Cuándo decide un desarrollador que necesita JavaEE? Esta pregunta es completamente subjetiva ... Pero si necesitas alguno de los servicios proporcionados por JavaEE, empieza a pensar en ello. Si no sabe qué es JavaEE ... probablemente no lo necesite.

  • ¿Cuándo decide un desarrollador que no necesita JavaEE? Ver respuesta anterior.

  • ¿Por qué la versión de la biblioteca JavaEE no está sincronizada con la versión JavaSE? Buena pregunta. No pretendo saber cómo responder ... Pero supongo que la respuesta es: "porque no están sincronizados".

jahroy
fuente
Déjelo, no hay ningún daño ... Solo le sugiero que diga que la funcionalidad de JavaEE se aplica principalmente a servidores / contenedores en lugar de que los requiera .
entonio
9

A vista de pájaro, Java EE es una plataforma, es decir, algo sobre lo que podemos construir.

Desde una perspectiva más técnica, el estándar Java Enterprise Edition define un conjunto de API que se utilizan comúnmente para crear aplicaciones empresariales. Estas API son implementadas por servidores de aplicaciones, y sí, diferentes servidores de aplicaciones tienen la libertad de utilizar diferentes implementaciones de las API de Java EE.

Sin embargo, la biblioteca java ee no funcionará ni se compilará a menos que su código se esté ejecutando o tenga acceso a un servidor de aplicaciones Java EE (como JBoss, GlassFish, Tomcat, etc.).

Compila con las API de Java EE, por lo que solo necesita esas API en el momento de la compilación. En tiempo de ejecución, también necesitará una implementación de estas API, es decir, un servidor de aplicaciones.

¿Por qué necesito algo masivo como JBoss solo para compilar un código simple para enviar un correo electrónico?

Tu no Sin embargo, si desea utilizar la API de Java EE para enviar correo, necesitará una implementación de esa API en tiempo de ejecución. Esto puede ser proporcionado por un servidor de aplicaciones o proporcionado por una biblioteca independiente que agregue a su classpath.

¿Por qué las bibliotecas Java EE no son "estándar" y están incluidas en la descarga regular de JVM y / o en el SDK?

Porque solo las API están estandarizadas, no las implementaciones.

¿Por qué hay tantas ofertas de Java EE?

Porque la gente no está de acuerdo sobre la forma correcta de implementar ciertas funciones. Porque diferentes proveedores compiten por la participación de mercado.

¿Qué se puede hacer con Java EE que no se puede hacer con Java estándar?

Dado que las implementaciones de Java EE se crean con "Java estándar": Nada. Sin embargo, aprovechar las bibliotecas existentes puede ahorrar una gran cantidad de esfuerzo si está resolviendo problemas empresariales típicos, y el uso de una API estandarizada puede evitar el bloqueo del proveedor.

¿Qué se puede hacer con Java estándar que no se puede hacer con Java EE?

Nada, ya que Java EE incluye Java SE.

¿Cuándo decide un desarrollador que "necesita" Java EE? ¿Cuándo decide un desarrollador que no necesita Java EE?

En términos generales, las API de Java EE resuelven problemas típicos y recurrentes en la informática empresarial. Si tiene estos problemas, por lo general tiene sentido utilizar las soluciones estándar, pero si tiene problemas diferentes, es posible que se requieran soluciones diferentes. Por ejemplo, si necesita hablar con una base de datos relacional, debería considerar usar JPA. Pero si no necesita una base de datos relacional, JPA no lo ayudará.

meriton
fuente
8

¿Qué es Java EE?

Comencemos por la definición de canonicidad en wiki:

Java Platform, Enterprise Edition o Java EE es la plataforma informática empresarial Java de Oracle. La plataforma proporciona una API y un entorno de tiempo de ejecución para desarrollar y ejecutar software empresarial, incluidos servicios web y de red, y otras aplicaciones de red seguras, escalables, confiables y de múltiples niveles.

El punto principal aquí es que Java EE es una plataforma que proporciona una API, no una biblioteca concreta.

¿Qué se necesita para Java EE?

El alcance principal de Java EE son las aplicaciones basadas en red, a diferencia de Java SE orientado al desarrollo de aplicaciones de escritorio con soporte de red simple. Ésta es la principal diferencia entre ellos. Escalabilidad, mensajería, transacciones, soporte DB para cada aplicación ... la necesidad en todo esto ha aumentado con la evolución de la red. Por supuesto, muchas de las soluciones listas que proporciona Java SE son útiles para el desarrollo de redes, por lo que Java EE amplía Java SE.

¿Por qué necesitamos servidores de aplicaciones para ejecutar nuestro código?

¿Por qué necesitamos sistemas operativos? Debido a que hay mucho trabajo doloroso con el hardware que debemos hacer para hacer una aplicación aún más simple. Y sin SO tienes que hacerlo una y otra vez. El sistema operativo simplificado es solo un contenedor programático, que nos proporciona un contexto global para ejecutar nuestras aplicaciones.

Y esto es lo que son los servidores de aplicaciones. Nos permiten ejecutar nuestras aplicaciones en su contexto y nos proporcionan una gran cantidad de funciones de alto nivel que se necesitan para las aplicaciones de red empresariales de alta carga. Y no queremos escribir nuestras propias bicicletas para resolver estos problemas, queremos escribir código que satisfaga nuestras necesidades comerciales.

Otro ejemplo aquí podría ser JVM para Java.

¿Por qué Java EE no contiene un servidor de aplicaciones integrado?

Difícil de decir para mí. Creo que se hizo para mayor flexibilidad. Java EE dice lo que deben hacer, ellos deciden cómo hacerlo.

¿Por qué JVM no incluye Java EE?

Porque se dirigieron a diferentes sectores del mercado. Java EE tiene un montón de funcionalidades que no son necesarias para los escritorios habituales.

¿Por qué hay tantas ofertas de Java EE?

Porque Java EE solo describe el comportamiento. Todos pueden implementarlo.

¿Qué se puede hacer con Java EE que no se puede hacer con Java SE?

Para conquistar internet. Es muy difícil de hacer con los subprogramas y sockets de Java SE :)

¿Qué se puede hacer con Java SE que no se puede hacer con Java EE?

Como se mencionó anteriormente, Java EE extiende Java SE, por lo que con Java EE debería poder hacer todo lo que está disponible para Java SE.

¿Cuándo decide un desarrollador que "necesita" Java EE?

Cuando necesitan el poder de Java EE. Todo lo mencionado anteriormente.

¿Cuándo decide un desarrollador que no necesita Java EE?

Cuando escriben una aplicación de escritorio o consola habitual.

¿Por qué las versiones de Java SE y Java EE no están sincronizadas?

Java siempre ha tenido problemas con sus tecnologías de nomenclatura y control de versiones. Entonces esta situación no es una excepción.

Maxim Kolesnikov
fuente
6

Java EE tiene que ver con el concepto de contenedor.
El contenedor es un contexto de ejecución dentro del cual se ejecutará su aplicación y que le proporcionará un conjunto de servicios. Cada tipo de servicio está definido por una especificación denominada JSR. Por ejemplo, JSR 907, JTA (Java transaction Api) que proporciona una forma estándar de administrar transacciones distribuidas contra diferentes recursos.
En general, hay muchas implementaciones diferentes para un JSR determinado, la implementación que usará depende del proveedor del contenedor, pero eso no le importa, ya que está seguro de que el comportamiento respeta el contrato predefinido: la API JSR.
Entonces, para aprovechar Java EE, debe ejecutar su aplicación dentro de un contenedor. Los dos principales son EJB y el contenedor de servlets que están presentes en cualquier servidor de aplicaciones certificado por Java EE.

El objetivo de todo esto es definir un entorno de ejecución estándar que le permita empaquetar su aplicación solo con lo esencial, id.est. tu negocio. Evita depender de un conjunto desconocido y variado de bibliotecas de terceros que tendría que empaquetar y proporcionar con su aplicación de otra manera, y que pueden ser fuentes de conflicto con otras aplicaciones en el servidor. En Java EE, usted sabe que todos los requisitos estándar no funcionales como seguridad, transacción, escalabilidad, invocación remota y muchos más serán proporcionados por el contenedor (factorizado para todas las aplicaciones que se ejecutan dentro de él) y solo tiene que basar su trabajo en su.

Charla
fuente
2
Puede ver un contenedor como un gran marco, pero Sun (Oracle :() solo proporciona especificaciones y muchas personas las implementan. Mientras que un marco clásico generalmente lo proporciona / implementa un solo actor (springsource y spring, por ejemplo)
Gab
esto es un duplicado, consulte stackoverflow.com/questions/106820/what-is-java-ee para otras respuestas.
Gab
esa pregunta no solo tiene fecha, sino que se refiere a J2EE vs JEE. Esta pregunta / hilo ha provocado una montaña de información más actual y educativa directamente relacionada con JEE y lo que es en esencia. Yo diría que este hilo es mucho más informativo que el enlace con fecha, y la calidad de las respuestas enumeradas aquí es superior a las del enlace.
SnakeDoc
Si alguien supiera qué es realmente Java ee, podría explicarlo de forma que un niño de 6 años pueda entenderlo. cuanto más complicada es una "explicación", menos saben al respecto.
user2914191
@ user2914191 Algunos conceptos necesitan un trasfondo que un niño normal de 6 años aún no ha obtenido, por ejemplo, la entropía en física. Tal vez viniste aquí por error, si es así, puedes volver más tarde.
Gab