Почему библиотеки не могут работать вне среды сервера приложений?
На самом деле они могут. Большинство библиотек можно напрямую использовать отдельно (в Java SE) или включить в .war (практически всегда это Tomcat). Некоторые части Java EE, например JPA, содержат явные разделы в соответствующих спецификациях, в которых рассказывается, как они должны работать и использоваться в Java SE.
Во всяком случае, здесь речь идет не столько о среде сервера приложений как таковой, сколько о наличии всех других библиотек и кода интеграции, который их объединяет.
Из-за этого аннотации будут сканироваться только один раз для всех ваших классов, а не каждая библиотека (EJB, JPA и т.д.), выполняющая это сканирование снова и снова. Также из-за этого аннотации CDI могут применяться к EJB-компонентам, а менеджеры сущностей JPA могут быть добавлены в них.
Зачем мне нужно что-то масштабное, как JBoss, просто для компиляции простого кода для отправки электронной почты?
В этом вопросе есть несколько ошибок:
- Для компиляции вам понадобится только API-файл jar, размер которого меньше 1 МБ для веб-профиля и чуть более 1 МБ для полного профиля.
- Очевидно, что для запуска вам нужна реализация, но «массивность» - это слишком много. OpenJDK, например, составляет около 75 МБ, а TomEE (реализация веб-профиля, содержащая поддержку почты) - всего 25 МБ. Даже GlassFish (реализация полного профиля) занимает всего 53 МБ.
- Почта отлично работает с Java SE (и, следовательно, с Tomcat), а также с использованием автономных mail.jar и activate.jar .
Почему библиотеки Java EE не являются «стандартными» и включены в обычную загрузку JVM и / или SDK?
Java EE в каком-то смысле была одной из первых попыток разбить и без того массивный JDK на части, которые легче управлять и загружать. Люди уже жалуются, что графические классы (AWT, Swing) и апплеты находятся внутри JRE, когда все, что они делают, - это запускают некоторые команды на безголовом сервере. И вы также хотите включить все библиотеки Java EE в стандартный JDK?
С окончательным выпуском поддержки модульности у нас будет только небольшая базовая JRE со многими вещами, которые можно установить отдельно в виде пакетов. Возможно, однажды многие или даже все классы, которые сейчас составляют Java EE, также станут таким пакетом. Время покажет.
Почему существует так много предложений Java EE, когда на самом деле существует только две основных разновидности стандартной Java (Oracle JVM / SDK | OpenJDK JVM / JDK)?
Java SE существует не только в двух вариантах. Существует как минимум IBM JDK, предыдущий BEA (JRocket, который объединяется с Oracle / Sun в связи с приобретением), различные другие реализации с открытым исходным кодом и множество реализаций для встроенного использования.
Причина того, что Java SE и EE являются спецификацией, заключается в том, что многие поставщики и организации могут их реализовать, и, таким образом, это поощряет конкуренцию и снижает риск привязки к поставщику.
На самом деле ничем не отличается компиляторы C и C ++, где у вас есть много конкурирующих предложений, и все они придерживаются стандарта C ++.
Почему версия библиотеки Java EE не синхронизирована со стандартными выпусками библиотеки Java (Java EE 6 против Java 7)
Java EE основан на Java SE, поэтому он отстает. Однако версии совпадают. Java EE 5 требует Java SE 5. Для Java EE 6 требуется Java SE 6 и так далее. Просто в основном, когда Java SE X актуальна, Java EE X-1 актуальна.