Контейнеры Java EE против веб-контейнеров
Я относительно новичок в Java EE/EJB, и я много читал о контейнерах Java EE. У меня был опыт работы с веб-контейнером (WAR файл в jboss). Я также знаю, что Jboss также может использоваться как контейнер Java EE.
Мой вопрос в том, в чем разница между контейнером Java EE против веб-контейнера?
Я знаю, что Java EE также может содержать файл .war. Разные ли они и каковы их различия? Существуют ли какие-либо предпочтения поставщика, которые лучше всего подходят?
Ответы
Ответ 1
Прежде всего, "J2EE" - это устаревшая аббревиатура, теперь она просто называется "Java Enterprise Edition" или Java EE.
В отличие от контейнера сервлетов (например, Tomcat), "полные" серверы приложений Java EE также содержат контейнер EJB. EJB являются Enterprise Java Beans, и вы можете много узнать о них, например, здесь (глава IV). EJB теперь находятся в версии 3.2 (Java EE 7 и Java EE 8), предыдущие версии - 3.1 (Java EE 6) и 3.0 (Java EE 5); однако наибольшая разница между v2 и v3.
EJB предназначены для ведения бизнес-логики вашего приложения. Например, сеансовый компонент без состояния может вычислить что-либо или представлять веб-службу или что-то, что нужно вашему приложению. Компоненты, управляемые сообщениями, могут прослушивать очереди сообщений, поэтому они полезны, если вы хотите асинхронную связь. Одиночные бобы гарантируют один экземпляр для боба и т.д.
Что касается типа файла, EJB упаковывается в файл.jar, веб-приложение в.war файл, и если вы хотите смешать их в одном приложении, это будет файл.ear("корпоративный архив").
Помимо EJB, "полный" сервер приложений также заботится о транзакциях, безопасности, ресурсах JDBC... Я бы очень рекомендовал использовать его в контейнере сервлетов, но преимущества сопряжены со сложностью, поэтому вам придется потратить разумное количество времени чтобы узнать, как бороться с Websphere (Payara и WildFly намного проще и являются моими любимыми). JBoss и Weblogic также довольно популярны, и если вы знакомы с Tomcat, взгляните на TomEE.
Ответ 2
контейнер Java EE: Управляет выполнением запуска EJB, JMS, JTA на сервере Java EE, например. JBoss, Glassfish.
Веб-контейнер: Управляет выполнением веб-страниц, сервлетов и некоторых компонентов EJB для приложений Java EE. Веб-компоненты и их контейнер запускаются на веб-сервере, таком как Jetty, tomcat.
Ответ 3
Веб-контейнер и EJB-контейнер представляют собой подмножества контейнеров Java EE. Контейнеры Java EE также включают контейнер клиента приложения и контейнер апплета.
Здесь doc говорит:
Процесс развертывания устанавливает компоненты приложения Java EE в Контейнеры Java EE.
-
Сервер Java EE: часть времени выполнения продукта Java EE. Сервер Java EE предоставляет EJB [контейнер и веб-контейнер] *.
-
Контейнер Enterprise JavaBeans (EJB): управляет выполнением корпоративного beans для приложений Java EE. Предприятие beans и их контейнер запускается на сервере Java EE.
-
Веб-контейнер. Управляет выполнением страниц JSP и компонентов сервлета для приложений Java EE. Веб-компоненты и их
контейнер запускается на сервере Java EE.
-
Клиентский контейнер приложения. Управляет выполнением клиентских компонентов приложения. Клиенты приложений и их контейнер запускается на клиенте.
-
Контейнер апплетов. Управляет выполнением апплетов. Состоит из веб-браузера и Java Plug-in, работающих на клиенте вместе.
* В документе они используют множественную форму, но на самом деле у вас есть только один веб-контейнер и один контейнер EJB на Java EE-сервер.
Ответ 4
Я думаю, может быть, разница между ними - это протоколы, которые они поддерживают.
Например, мы не пытаемся управлять транзакцией в веб-контейнере, например tomcat, мы обычно пытаемся контролировать в web-proj, который развернут в tomcat.while сервер веб-приложений, например ejb, принимает обратное.
Ответ 5
Контейнер java EE Container представляет собой решение для приложений, поддерживающее веб-контейнер, EJB 3 и другие API и сервисы Java EE, сервер Oracle WebLogic, сервер GlassFish, сервер приложений IBM WebSphere, сервер приложений JBoss и Caucho Resin - примеры Java EE... Надеюсь, он ответит на ваш запрос
Ответ 6
Приложения можно классифицировать следующим образом: Настольное приложение, такое как графический интерфейс, веб-приложение, такое как динамические веб-страницы, корпоративное приложение, которое относится к основной бизнес-обработке.
Корпоративное приложение: обычно не очень много взаимодействия с пользователем. В этом случае, если вы хотите, чтобы ваше приложение взаимодействовало с разрозненными приложениями, распределенными по интрасети/интернету с помощью веб-служб, JMS или JTA (соединение с сервером транзакций Mainframe), вам требуется Java EE с контейнерами EJB и другими функциями безопасности.
Веб-контейнер: скорее, если вы хотите взаимодействовать с распределенным приложением с использованием JNI или просто разговаривать с РСУБД или просто визуализировать статические или динамические веб-страницы, вам достаточно веб-контейнера. Ваш HTTP-запрос из браузера может вызывать и выполнять программы Java через сервлет. Программа Java может вызывать API JDBC для общения с РСУБД. Аналогичным образом вы можете вызвать программу C или Java с другого сервера с помощью JNI или RMI.