Почему я не могу использовать сессионный компонент в качестве компонента поддержки JSF в Java EE 5 - PullRequest
3 голосов
/ 26 января 2011

AFAIK, вся цель JBoss Seam - объединить EJB и JSF.

Книга «Шов в действии» гласит:

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

Но я не смог найти причину / мотив такой невозможности, почему они изолированы от веб-уровня? Почему я не могу использовать EJB в качестве поддерживающего бина? Хотите просветить меня?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Но я не смог найти причину / мотив такой невозможности, почему они изолированы от веб-уровня?

Традиционно это было сделано для обеспечения разделения между бизнес-логикой и представлением связанного кода. Смешивать это - то, что делает большинство новичков, и это всегда приводит к системам, которые трудно поддерживать в долгосрочной перспективе.

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

Строгая изоляция предотвращает эти ошибки. Тем не менее, это также поднимает планку для тех же самых начинающих, чтобы начать работу с EJB, и придает EJB репутацию довольно сложной задачи (хотя с EJB3 это не совсем так). В последнем выпуске Java EE 6 стало возможным много смешивания, позволяющего определять EJB без интерфейсов в веб-модуле. С аннотациями CDI они могут непосредственно использоваться в качестве вспомогательных компонентов.

В зависимости от вашего представления, это шаг вперед (проще, меньше ограничений, меньше необходимых артефактов), но его также можно рассматривать как шаг назад (снова способствует смешиванию представления и бизнес-логики, что осуждает скриптлеты в JSP пытался помешать).

0 голосов
/ 27 января 2011

Шов не предназначен для этого.CDI (Weld) есть, однако.С CDI вы можете @Inject EJB-компонент в бине JSF.(Как отметил Арджан - вы можете сделать это и без CDI, а поскольку CDI - это JavaEE6, вы можете попробовать использовать @EJB private RemoteInterface bean)

Но это не касается сущностей JPA.Хотя JPA считалась частью EJB, а его предшественниками были «Entity Beans», особый тип EJB, лучше не думать об EJB и JPA как об одном.JPA является стандартом ORM.EJB - это сервисная / компонентная модель.

@Entity объектами управляет EntityManager.Они не управляются ни контейнером ejb, ни швом, ни даже CDI.Это потому, что они не соответствуют компонентной модели, которую используют эти три.Сущности обычно создаются разработчиком.С CDI / EJB / Seam это платформа, которая создает экземпляры компонентов, управляет ими и выполняет внедрение.

...