¿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:
- 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.
- 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.
- 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.