Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Пример trading

Пример trading демонстрирует, как реализовать и использовать простой адаптер исходящих ресурсов, который отправляет запросы в EIS с использованием сокета TCP. Пример демонстрирует сценарий на рис. 56-1 и состоит из следующих модулей:

  • trading-eis: программа на Java SE, которая имитирует EIS

  • trading-rar: реализация адаптера исходящих ресурсов

  • trading-war: веб-приложение, использующее адаптер ресурсов

  • trading-ear: корпоративный архив, содержащий адаптер ресурсов и веб-приложение

Рисунок 56-1. Пример trading

На этом рисунке показаны компоненты торгового примера: развёрнутые WAR и RAR, которые взаимодействуют с EIS через сокет TCP.

Модуль trading-eis — это вспомогательный проект, имитирующий платформу для проведения торговых операций с акциями. Он содержит программу Java SE, которая слушает торговые запросы в виде простого текста по сокету TCP. Программа отвечает на торговые запросы со значением статуса, номером подтверждения и суммой в долларах за запрошенные акции и сборы. Например, пара запрос-ответ будет выглядеть так:

>> BUY 1000 ZZZZ MARKET
<< EXECUTED #1234567 TOTAL 50400.00 FEE 252.00

Модуль trading-rar реализует исходящий контракт архитектуры коннекторов Java EE для отправки запросов и получения ответов от платформы биржевой торговли. Модуль trading-rar предоставляет и реализует пользовательский интерфейс клиента для использования приложениями Java EE. Этот интерфейс проще, чем Common Client Interface (CCI).

Модуль trading-war — это веб-приложение с интерфейсом JavaServer Faces и Managed-бином. Это приложение позволяет клиентам отправлять заявки в EIS, используя адаптер ресурсов, предоставленный модулем trading-rar. Модуль trading-war использует пользовательский интерфейс клиента, предоставленный адаптером ресурсов, для получения соединений с EIS.

Использование адаптера исходящих ресурсов

В большинстве случаев разработчики приложений Java EE используют адаптеры исходящих ресурсов, разработанные третьей стороной. Адаптеры исходящих ресурсов либо реализуют общий клиентский интерфейс (CCI), либо предоставляют пользовательский интерфейс для взаимодействия приложений с EIS. Адаптеры исходящих ресурсов предоставляют приложениям Java EE следующие элементы:

  • Фабрики соединений

  • Дескрипторы соединений

  • Другие интерфейсы и объекты, специфичные для EIS

Приложения Java EE получают объект фабрики соединений посредством инъецирования ресурсов, а затем используют его для получения дескрипторов соединения с EIS. Дескрипторы соединений позволяют приложению отправлять запросы и получать информацию из EIS.

Модуль trading-rar предоставляет пользовательский интерфейс клиента, который состоит из классов, перечисленных в таблице 56-1.

Таблица 56-1 Классы и интерфейсы в пакете javaeetutorial.trading.rar.api

API-компонент

Описание

TradeOrder

Представляет торговую заявку для EIS

TradeResponse

Представляет ответ от EIS на торговую заявку

TradeConnection

Представляет дескриптор подключения к EIS

Предоставляет способ подачи заявок в EIS

TradeConnectionFactory

Позволяет приложениям получать дескрипторы подключения к EIS

TradeProcessingException

Указывает, что возникла проблема при обработке торгового запроса

Managed-бин ResourceAccessBean в модуле trading-war настраивает фабрику соединений для адаптера ресурсов trading-rar с помощью аннотации @ConnectionFactoryDefinition следующим образом:

@Named
@SessionScoped
@ConnectionFactoryDefinition(
    name = "java:comp/env/eis/TradeConnectionFactory",
    interfaceName = "javaeetutorial.trading.rar.api.TradeConnectionFactory",
    resourceAdapter = "#trading-rar",
    minPoolSize = 5,
    transactionSupport =
            TransactionSupport.TransactionSupportLevel.NoTransaction
)
public class ResourceAccessBean implements Serializable { ... }

Параметр name указывает имя JNDI для фабрики соединений. В этом примере регистрируется фабрика соединений в области java:comp. Вы можете использовать аннотацию @ConnectionFactoryDefinition, чтобы указать другую область, такую ​​как java:global, java:app или java:module. Аннотация @AdministeredObjectDefinition также позволяет регистрировать объекты администрируемых коннекторов в пространстве имён JNDI.

Параметр interfaceName указывает интерфейс, реализованный фабрикой соединений, включённой в адаптер ресурсов. В этом примере это пользовательский интерфейс.

Параметр resourceAdapter указывает имя адаптера ресурса, который содержит реализацию фабрики соединений. Префикс # в #trading-rar указывает, что trading-rar является встроенным адаптером ресурсов, который входит в тот же EAR, что и это веб-приложение.

Замечание:

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

Managed-бин получает объект фабрики соединений, используя инъецирование ресурсов следующим образом:

...
public class ResourceAccessBean implements Serializable {
    @Resource(lookup = "java:comp/env/eis/TradeConnectionFactory")
    private TradeConnectionFactory connectionFactory;
    ...
}

Managed-бин использует фабрику соединений для получения дескрипторов соединений следующим образом:

TradeConnection connection = connectionFactory.getConnection();

Адаптер ресурса возвращает дескриптор соединения, связанный с физическим соединением с EIS. Как только дескриптор соединения становится доступным, Managed-бин отправляет заявку и получает ответ следующим образом:

TradeOrder order = new TradeOrder();
order.setNShares(1000);
order.setTicker(TradeOrder.Ticker.YYYY);
order.setOrderType(TradeOrder.OrderType.BUY);
order.setOrderClass(TradeOrder.OrderClass.MARKET);
...
try {
    TradeResponse response = connection.submitOrder(order);
    ...
} catch (TradeProcessingException ex) { ... }

Реализация адаптера исходящих ресурсов

Модуль trading-rar реализует исходящий контракт и пользовательский интерфейс клиента для EIS, используемой в этом примере. Архитектура адаптера исходящих ресурсов показана на рис. 56-2.

Рис. 56-2. Архитектура примера trading

На этом рисунке показаны классы в каждом из модулей торгового примера.

Модуль trading-rar реализует интерфейсы, перечисленные в таблице 56-2.

Таблица 56-2 Интерфейсы, реализованные в модуле trading-rar

Пакет

Интерфейс

Описание

javax.resource.spi

ResourceAdapter

Определяет методы жизненного цикла адаптера ресурса

javax.resource.spi

ManagedConnectionFactory

Определяет фабрику соединений, которую менеджер соединений с сервера приложений использует для получения физических соединений с EIS

javax.resource.spi

ManagedConnection

Определяет физическое соединение с EIS, которым может управлять менеджер соединений

trading.rar.api

TradeConnectionFactory

Определяет фабрику соединений, которую приложения используют для получения дескрипторов соединений

trading.rar.api

TradeConnection

Определяет дескриптор соединения, который приложения используют для взаимодействия с EIS

Когда архив trading-ear развёрнут и ресурс пула соединений настроен, как описано в Использование адаптера исходящих ресурсов, сервер приложений создаёт объекты TradeConnectionFactory, которые приложения могут получить, используя инъецирование ресурсов. Реализация TradeConnectionFactory делегирует создание соединений с менеджером соединений, предоставляемым сервером приложений.

Менеджер соединений использует реализацию ManagedConnectionFactory для получения физических соединений с EIS и поддерживает пул активных физических соединений. Когда приложение запрашивает дескриптор соединения, менеджер соединений связывает соединение из пула с новым дескриптором соединения, который может использовать приложение. Пул соединений повышает производительность приложений и упрощает разработку адаптера ресурсов.

Для получения дополнительной информации см. код и комментарии в модуле trading-rar.

Запуск trading

Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска примера trading.

Здесь рассматриваются следующие темы:

Запуск trading с IDE NetBeans

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/connectors
  4. Выберите каталог trading.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» разверните узел trading.

  7. Кликните правой кнопкой мыши модуль trading-eis и выберите «Открыть проект».

  8. Кликните правой кнопкой мыши проект trading-eis и выберите «Выполнить».

    Сообщения от EIS появляются на вкладке Вывод:

    Trade execution server listening on port 4004.
  9. Кликните правой кнопкой мыши проект trading-ear и выберите Сборка.

    Эта команда упаковывает адаптер ресурса и веб-приложение в EAR-файл и развёртывает его на сервере GlassFish.

  10. Откройте следующий URL в веб-браузере:

    http://localhost:8080/trading/

    Веб-интерфейс позволяет подключаться к EIS и отправлять сделки. В журнале сервера отображаются запросы от веб-приложения и последовательность вызовов, которые предоставляют дескрипторы подключения от адаптера ресурсов.

  11. Перед удалением приложения trading-ear, закройте приложение trading-eis из строки состояния.

Запуск trading с использованием Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В окне терминала перейдите в:

    tut-install/examples/connectors/trading/
  3. Введите следующую команду:

    mvn install

    Эта команда собирает и упаковывает адаптер ресурсов и веб-приложение в архив EAR и развёртывает его на сервере GlassFish.

  4. В том же окне терминала перейдите в каталог trading-eis:

    cd trading-eis
  5. Введите следующую команду для запуска платформы исполнения сделок:

    mvn exec:java

    Сообщения от EIS появляются в окне терминала:

    Trade execution server listening on port 4004.
  6. Откройте следующий URL в веб-браузере:

    http://localhost:8080/trading/

    Веб-интерфейс позволяет подключаться к EIS и отправлять сделки. В журнале сервера отображаются запросы от веб-приложения и последовательность вызовов, которые предоставляют дескрипторы подключения от адаптера ресурсов.

  7. Перед удалением приложения trading-ear нажмите Ctrl+C в окне терминала, чтобы закрыть приложение trading-eis.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)