Что такое контейнер в J2EE и как он помогает?
Сейчас я читаю спецификацию J2EE 1.4, и есть много терминов, которые я не понимаю.
Это из спецификаций для контейнеров:
Контейнеры обеспечивают поддержку времени выполнения для компонентов приложения J2EE. Контейнеры предоставляют объединенное представление о базовых API-интерфейсах J2EE для приложения компоненты. Компоненты приложения J2EE никогда не взаимодействуют напрямую с другими J2EE компонентов приложения. Они используют протоколы и методы контейнера для взаимодействуя друг с другом и с услугами платформы. Включение контейнера между компонентами приложения и службами J2EE позволяет контейнеру прозрачно внедрять службы, определенные развертыванием компонентов дескрипторы, такие как декларативное управление транзакциями, проверки безопасности, ресурс объединения и управления состоянием.
Поскольку я пришел из мира веб-разработки, я не могу понять, что именно это делает и какова цель контейнера. Что подразумевается под предоставлением поддержки времени выполнения? Как это делает J2EE лучшей системой с точки зрения или масштабируемостью, архитектурой?
Ответы
Ответ 1
Приложения J2EE/Java EE не являются самодостаточными. Для их выполнения они должны быть развернуты в контейнере. Другими словами, контейнер обеспечивает среду выполнения поверх JVM.
Кроме того, приложения полагаются на несколько API, таких как JPA, EJB, сервлет, JMS, JNDI и т.д. Роль контейнера, совместимого с EE, заключается в предоставлении стандартной реализации всех или некоторых из этих API. Это означает, что вы можете теоретически запустить приложение поверх любого контейнера, если оно опирается на стандартные API.
С технической точки зрения, контейнер представляет собой еще одно приложение Java SE с методом main()
. С другой стороны, приложения EE представляют собой набор сервисов /beans/servlets/etc. Контейнер находит эти компоненты и запускает их, обеспечивая реализации API, мониторинг, масштабируемость, надежность и т.д.
Ответ 2
Контейнеры JEE предоставляют оболочку вокруг исходного кода.
Типичными контейнерами являются классические данные EJB bean, а сообщения - bean. В определенной степени сервлеты и портлеты также могут рассматриваться как контейнеры.
Что контейнер предоставляет большое количество услуг: -
- вызов - ваш код загружается и запускается, когда требуется.
- транзакционный контекст - большинство контейнеровочных кодов происходит в контексте транзакции ACID.
Конфигурация
- - такие вещи, как соединения JDBC, передаются вам контейнером.
- security - контейнер будет ограничивать доступ к вашему коду и данным авторизованным пользователям.
Масштабируемость
- - поскольку контейнер отвечает за планирование, он может автоматически запускать дополнительные копии, если загрузка становится тяжелой, или может быть статически настроена на параллельное выполнение нескольких экземпляров.
- Герметизация. Ваша программа предоставляет единый интерфейс для контейнера. Однако внешне он может вывести этот интерфейс в различных формах (Corba, WSDL, JSM и т.д.).
- Общие службы. таких как ведение журнала, услуги, предоставляемые другими EJB. и т.д.
Ответ 3
Что подразумевается под предоставлением поддержки времени выполнения?
Вы пришли из мира веб-разработки, так что вы знаете, что традиционное приложение, созданное для Интернета, должно быть доступно через протокол HTTP.
Java - это язык программирования, который работает по JVM по дизайну.
Итак, как связать HTTP-запросы с вашим Java-кодом?
Что-то должно это сделать. HTTP-сервер, такой как Apache, может это сделать и используя старый общий интерфейс шлюза (CGI), вы можете вызвать свой Java-код, когда сервер Apache получает HTTP-запросы.
Это здорово, но в какой-то момент веб-приложение нуждается в аутентификации - можно написать код для этого, для веб-приложения потребуется некоторый доступ к базе данных - можно написать и код для веб-приложения, потребуется некоторый код интерфейса, который можно также писать с помощью MVC и т.д.
Это веб-приложение нуждается в том, что другие веб-приложения, безусловно, будут иметь и можно увидеть общие потребности: аутентификация, источники данных (например, DB и т.д.) и т.д.
В Java уже много таких требований, как API, как упоминалось в предыдущих ответах, поэтому почему бы не поместить все эти знания и общие требования для повторного использования во что-то, что могло бы поддерживать веб-приложение во время выполнения: контейнер JEE.
Как сделать JEE лучшей системой с точки зрения или масштабируемостью, архитектурой?
Я думаю, что тогда будет вопрос, почему JEE является более масштабируемой системой, чем простой HTTP-сервер с использованием CGI?
Об этом ответили другие, но с моим предыдущим ответом я считаю, что это еще более понятно.
Надеюсь, что это поможет.
Ответ 4
Обычно одно приложение Java использует одну JVM и имеет один процесс уровня ОС для каждого. Контейнер позволяет запускать несколько приложений Java под одной JVM.