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

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

Пример producermethods: использование метода-производителя для выбора реализации компонента

В примере providermethods показано, как использовать метод-производитель для выбора между двумя бинами во время выполнения, как описано в Использование методов-производителей, полей-производителей и методов закрытия в приложениях CDI. Он очень похож на пример encoder, описанный в Пример encoder: использование альтернатив. Пример включает в себя тот же интерфейс и две его реализации, Managed-бин, страницу Facelets и файлы конфигурации. Он также содержит тип квалификатора. Когда вы запускаете его, вам не нужно редактировать файл beans.xml и повторно развёртывать приложение, чтобы изменить его поведение.

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

Компоненты producermethods

Компоненты producermethods очень похожи на компоненты encoder с некоторыми существенными отличиями.

Ни одна реализация компонента Coder не аннотирована @Alternative и файла beans.xml нет, поскольку он не нужен.

Страница Facelets и Managed-бин CoderBean имеют дополнительное свойство coderType, которое позволяет пользователю указать во время выполнения, какую реализацию использовать. Кроме того, Managed-бин имеет метод-производитель, который выбирает реализацию, используя квалификатор @Chosen.

Бин объявляет две константы, определяющие, является ли тип кодировщика тестовой реализацией или реализацией, которая фактически сдвигает буквы:

    private final static int TEST = 1;
    private final static int SHIFT = 2;
    private int coderType = SHIFT; // default value

Метод источника, аннотированный с помощью @Produces и @Chosen, а также @RequestScoped (так что он длится только в течение одного запроса и ответа) возвращает одну из двух реализаций на основе coderType, предоставленного пользователем.

    @Produces
    @Chosen
    @RequestScoped
    public Coder getCoder() {

        switch (coderType) {
            case TEST:
                return new TestCoderImpl();
            case SHIFT:
                return new CoderImpl();
            default:
                return null;
        }
    }

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

    @Inject
    @Chosen
    @RequestScoped
    Coder coder;

Страница Facelets содержит изменённые инструкции и группу выбора одного из двух независимых переключателей, выбранное значение которой присваивается свойству coderBean.coderType:

    <h2>String Encoder</h2>
        <p>Select Test or Shift, type a string and an integer, then click
            Encode.</p>
        <p>If you select Test, the TestCoderImpl bean will display the
            argument values.</p>
        <p>If you select Shift, the CoderImpl bean will return a string that
            shifts the letters in the original string by the value you specify.
            The value must be between 0 and 26.</p>
        <h:form id="encodeit">
            <h:selectOneRadio id="coderType"
                              required="true"
                              value="#{coderBean.coderType}">
                <f:selectItem
                    itemValue="1"
                    itemLabel="Test"/>
                <f:selectItem
                    itemValue="2"
                    itemLabel="Shift Letters"/>
            </h:selectOneRadio>
            ...

Запуск producermethods

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

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

Пример сборки, упаковки и развёртывания producermethods с IDE NetBeans

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

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

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

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

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

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект providermethods и выберите «Сборка».

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

Сборка, упаковка и развёртывание producermethods с использованием Maven

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

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

    tut-install/examples/cdi/producermethods/
  3. Введите следующую команду для развёртывания приложения:

    mvn install

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

Запуск producermethods

  1. В веб-браузере введите следующий URL:

    http://localhost:8080/producermethods
  2. На странице String Encoder выберите опцию «Test» или «Shift Letters», введите строку и количество букв для смещения, а затем нажмите «Encode».

    В зависимости от вашего выбора, строка результата отображает либо закодированную строку, либо указанные вами входные значения.


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