Подтвердить что ты не робот

Что такое контейнер в J2EE и как он помогает?

Сейчас я читаю спецификацию J2EE 1.4, и есть много терминов, которые я не понимаю. Это из спецификаций для контейнеров:

Контейнеры обеспечивают поддержку времени выполнения для компонентов приложения J2EE. Контейнеры предоставляют объединенное представление о базовых API-интерфейсах J2EE для приложения компоненты. Компоненты приложения J2EE никогда не взаимодействуют напрямую с другими J2EE компонентов приложения. Они используют протоколы и методы контейнера для взаимодействуя друг с другом и с услугами платформы. Включение контейнера между компонентами приложения и службами J2EE позволяет контейнеру прозрачно внедрять службы, определенные развертыванием компонентов дескрипторы, такие как декларативное управление транзакциями, проверки безопасности, ресурс объединения и управления состоянием.

Поскольку я пришел из мира веб-разработки, я не могу понять, что именно это делает и какова цель контейнера. Что подразумевается под предоставлением поддержки времени выполнения? Как это делает J2EE лучшей системой с точки зрения или масштабируемостью, архитектурой?

4b9b3361

Ответ 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.