Развертывание многоуровневого приложения

Я хочу создать и развернуть свое первое многоуровневое приложение Java EE 6 с веб-и бизнес-уровнями, работающими на отдельных физических серверах в Glassfish 3.1.

Я думаю, что понимаю то, что требуется от теоретического высокоуровневого взгляда, но не ясно о специфике и мелких деталях.

Мой текущий план выглядит следующим образом:

  • Создание приложения Maven Enterprise в NetBeans 7.
  • Экспонировать EJB Session Facade через удаленный интерфейс.
  • Пусть компоненты поддержки JSF используют компоненты EJB Session Facade через поиск JNDI.
  • Разверните EJB JAR на одном сервере и веб-WAR на другом.

Я был бы очень признателен за некоторые советы:

  • Структура приложения.
  • Исправьте поиск JNDI с отдельными серверами. Возможна ли инъекция?
  • Создание соответствующих архивов.
  • Конфигурация развертывания для обеспечения связи между уровнями.

2 ответа

Решение

Вы выбрали трудный путь, как другие отмечали в комментариях и ответах...

Давайте начнем со структуры вашего приложения. Вы получите четыре достижения... два, которые вы развернете:

  1. "обычный" jar для интерфейса Remote вашего EJB (jar-of interfaces)

  2. баночка EJB, в которой есть реализация вашего EJB

  3. EAR-архив, который будет содержать jar-of-interfaces (в подкаталоге /lib) и EJB-jar (в 'root').

  4. файл WAR, содержащий код, который использует интерфейс Remote вашего EJB. Это будет иметь jar-интерфейсов в WEB-INF/lib.

Остальная часть этого ответа основана на EJB FAQ. Наиболее применимая часть этого документа находится здесь.

Вы можете добавить EJB в ManagedBean. Вам не нужно будет использовать метод поиска точек в вашем ManagedBean.

Вам нужно будет использовать corbaname для вашего компонента в файле glassfish-web.xml.

Если вы не знаете, что будете обслуживать много запросов в секунду, или у вас слишком большая бизнес-логика с большой нагрузкой на данные и / или ЦП, то вы должны прекрасно начать с развертывания обоих уровней на одном сервере приложений. Начав с развертывания на одном сервере приложений Glassfish с использованием локальных интерфейсов, вы можете пропустить много сложностей в среде выполнения.

Это, в свою очередь, позволит вам использовать простейшую форму @EJB-инъекции на веб-уровне для доступа к фасадам сеансов на бизнес-уровне. Локальные интерфейсы работают быстрее, потому что сервер приложений может передавать ссылки, а не прокси RMI между уровнями, и это позволяет вам пропустить поиск JNDI. Вы всегда можете изменить аннотацию позже или ввести удаленные интерфейсы, если позже вы найдете другие причины для развертывания уровней на отдельных серверах.

Glassfish поддерживает кластеризацию, поэтому вам никогда не придется явно разделять два уровня - все зависит от фактических моделей использования, поэтому мониторинг производительности является ключевым.

Развертывание веб-уровня в качестве WAR и бизнес-логики в качестве EJB-файла является правильным решением. В зависимости от размера и логической структуры вашего приложения вы можете разбить его на несколько модулей.

Maven заботится о создании архивов. Убедитесь, что вы определили подпроект для каждого архива войны и jar, а также подпроект для сборки EAR-файла. Последний проект будет загружать файлы war и jar, созданные другими подпроектами. Объединяя все проекты вместе с основным проектом maven и вуаля, вы можете гибко создавать каждый компонент отдельно, создавать все компоненты или любые промежуточные комбинации.

Другие вопросы по тегам