Читаем Изучаем Java EE 7 полностью

В зависимости от того, откуда клиент станет вызывать сессионный EJB-компонент, классу EJB-компонента потребуется реализовывать удаленный или локальный интерфейсы либо не реализовывать вообще никакого интерфейса. Если ваша архитектура включает клиентов, которые находятся вне экземпляра виртуальной машины Java EJB-контейнера, то они должны использовать удаленный интерфейс. Как показано на рис. 7.3, это касается клиентов, работающих на отдельной виртуальной машине Java, в контейнере клиентского приложения (Application Client Container — ACC), или во внешнем веб-контейнере, или в EJB-контейнере. В этом случае клиентам придется вызывать методы сессионных EJB-компонентов с использованием удаленного вызова методов. Вы можете прибегнуть к локальному вызову, если EJB-компонент и клиент будут функционировать на одной и той же виртуальной машине Java. Это может быть вызов одним EJB-компонентом другого EJB-компонента или веб-компонента (сервлета, JSF), работающего в веб-контейнере на той же самой виртуальной машине Java. Кроме того, ваше приложение может использовать как удаленные, так и локальные вызовы в случае с одним и тем же сессионным EJB-компонентом.

Сессионный EJB-компонент может реализовывать несколько интерфейсов или не реализовывать ни одного. Бизнес-интерфейс — это стандартный Java-интерфейс, который не расширяет никаких EJB-специфичных интерфейсов. Как и любой Java-интерфейс, бизнес-интерфейсы определяют список методов, которые будут доступны для клиентского приложения. Для них могут использоваться следующие аннотации:

• @Remote — обозначает удаленный бизнес-интерфейс. Параметры методов передаются по значению и нуждаются в том, чтобы быть сериализуемыми как часть протокола RMI;


Рис. 7.3. Сессионные EJB-компоненты, вызываемые клиентами нескольких типов


• @Local — обозначает локальный бизнес-интерфейс. Параметры методов передаются по ссылке от клиента к EJB-компоненту.

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

В листинге 7.2 показаны локальный (ItemLocal) и удаленный интерфейс (ItemRemote), реализуемые сессионным EJB-компонентом без сохранения состояния ItemEJB. Благодаря этому коду клиенты смогут вызывать метод findCDs() локально или удаленно, поскольку он определен в обоих интерфейсах. Метод createCd() будет доступен только удаленно с помощью RMI.


Листинг 7.2. Сессионный EJB-компонент без сохранения состояния, реализующий удаленный и локальный интерфейсы

@Local

public interface ItemLocal {

··List findBooks();

··List findCDs();

}

@Remote

··public interface ItemRemote {

··List findBooks();

··List findCDs();

··Book createBook(Book book);

··CD createCD(CD cd);

}

@Stateless

public class ItemEJB implements ItemLocal, ItemRemote {

··//…

}

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


Листинг 7.3. Класс EJB-компонента, определяющий удаленный и локальный интерфейсы, а также представление без интерфейса

public interface ItemLocal {

··List findBooks();

··List findCDs();

}

public interface ItemRemote {

··List findBooks();

··List findCDs();

··Book createBook(Book book);

··CD createCD(CD cd);

}

@Stateless

@Remote(ItemRemote.class)

@Local(ItemLocal.class)

@LocalBean

public class ItemEJB implements ItemLocal, ItemRemote {

··//…

}

Если EJB-компонент обеспечивает хотя бы один интерфейс (локальный или удаленный), то он автоматически теряет представление без интерфейса. Тогда потребуется явным образом указать, что он обеспечивает представление без интерфейса, с помощью аннотации @LocalBean в отношении класса EJB-компонента. Как вы можете видеть в листинге 7.3, ItemEJB сейчас обладает локальным и удаленным интерфейсами, а также представлением без интерфейса.

Интерфейсы веб-служб

Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT