Использование IBM WebSphere Portlet Factory для интеграции IBM Lotus Connections с IBM WebSphere Portal

Из этой статьи вы узнаете, как можно использовать конструктор REST Service Call в IBM® WebSphere® Portlet Factory для получения доступа, отображения и манипулирования данными из пяти различных сервисов IBM Lotus® Connections.

Анджела Селф, старший специалист по информационным технологиям, IBM

Анджела Селф (Angela Self) - старший специалист по информационным технологиям группе IBM WebSphere Portal Technical Sales. Анджела работает в IBM уже 7 лет и любит свою работу. Анджела начинала консультантом по Java-сервисам, а затем стала консультантом в Software Group Services. Отдав много времени сервисной службе, Анджела затем перешла в отдел технической поддержки продаж и в настоящее время является специалистом по информационным технологиям в Чикаго, штат Иллинойс.



Луи Бенитез, консультирующий специалист по информационным технологиям, IBM

Луис Бенитез (Luis Benitez) - специалист-консультант по информационным технологиям в IBM TechWorks. Луи руководит группой Lotus Connections в IBM, : Luis_Benitez@us.ibm.com.



25.09.2009

IBM WebSphere Portlet Factory - мощное и гибкое средство разработки, позволяющее быстро создавать, компоновать, настраивать под заказчика и подключать портлеты к IBM WebSphere Portal. ПО для организации социальных взаимодействий IBM Lotus Connections можно легко расширить и интегрировать с другими приложениями при помощи набора API REST. В результате этот продукт прекрасно подходит для быстрой разработки с использованием IBM WebSphere Portlet Factory.

Хотя Lotus Connections комплектуется портлетом для обеспечения интеграции с WebSphere Portal, вам, возможно, понадобятся средства, выходящие за рамки стандартного продукта.

Прочитав данную статью, вы сможете создавать пользовательские решения, использующие такие дополнительные возможности, как взаимодействие между портлетами и детальное управление доступом к различным сервисам Lotus Connections. Мы описываем простой способ построения портлетов и интегрирации Lotus Connections в WebSphere Portal. Основной темой данной статьи и иллюстрацией к ней служит сервис Dogear в Lotus Connections. Dogear, если вы еще с ним не знакомы, - это инструмент создания закладок для пользователей.

Мы предполагаем, что вы ранее инсталлировали портлеты в WebSphere Portal и уже изучили wiki по WebSphere Portlet Factory и примеры по Lotus Connections.

“Что такое REST?”, “Что такое программа-конструктор?”, и, наконец, “Что такое REST-конструктор?”

Что такое REST? Representational State Transfer (REST) - это нетребовательная к ресурсам интуитивно понятная среда, которая позволяет пользователям создавать, обновлять и запрашивать информацию из любых поддерживающих REST приложений (например, Lotus Connections), и управлять ей из собственных пользовательских приложений. Простота API-интерфейса достигается за счет того, что REST API основан на HTTP, поэтому позволяет легко делать запросы на пять сервисов Lotus Connections через простые прямые URL-ссылки, с помощью команд POST (отправить), PUT (разместить), и DELETE (удалить), инкапсулируя данные сервиса в HTML или в документ XML Atom.

Что такое конструктор (builder)? Основой ПО IBM WebSphere Portlet Factory является набор программных компонентов автоматизации, называющихся конструкторами. Они реализуют логику проектирования через удобные пользовательские интерфейсы, устроенные по принципу "мастера", и затем автоматизируют разработку кода. Использование конструкторов значительно ускоряет процесс разработки, скрывая сложность базовых API и позволяя создавать полностью совместимые с SOA портлеты.

Это понятие подводит нас к тому, что такое REST-конструктор: это еще более простой вариант REST API, реализованный в основанном на формах конструкторе WebSphere Portlet Factory. Конструктор REST Service Call (это его полное имя) вызывает службу REST, а та возвращает фид Atom. На основании анализа полученного фида конструктор генерирует описание XML Schema Definition (XSD) по умолчанию.


Создание взаимодействующего портлета Dogear

Взаимодействующим (cooperative) называется портлет, который взаимодействует с другим портлетом на той же странице или на другой странице в том же экземпляре WebSphere Portal. В нашем примере мы создадим два портлета. Один портлет выводит на экран поисковое окно, которое позволяет пользователям искать теги закладок, отвечающие заданным критериям поиска в сервисе Dogear. Второй портлет выводит на экран полученный список ссылок на закладки. Для осуществления этой операции используется WebSphere Portlet Factory. Если вы еще не изучили руководство по созданию портлета, поставляемое в пакете WebSphere Portlet Factory, займитесь этим сейчас.

В данном разделе мы объясним, как создать два портлета, которые доставляют данные с Lotus Connections через REST API, используя WebSphere Portlet Factory.

ПРИМЕЧАНИЕ: Эти примеры были разработаны с использованием WebSphere Portlet Factory v6.0.2.3 и Lotus Connections 2.0.

Создаем портлет-источник

Вначале создайте портлет-источник этого сценария взаимодействия. Портлет-источник выводит на экран пользователя поисковое окно с кнопкой Submit (Отправить). Когда пользователь нажимает на нее, поисковый запрос отправляется к портлету-приёмнику через брокер свойств (property broker). Брокер свойств - это сервис WebSphere Portal, который позволяет связывать портлеты друг с другом и пересылать сообщения. Передача для осуществления этого соединения конфигурируется администратором портала.

Прежде чем начать, убедитесь, что вы находитесь в области WebSphere Portlet Factory. В противном случае выберите Window - Open Perspective (Открыть отображение) - Other (Другое) - WebSphere Portlet Factory.

Для создания проекта WebSphere Portlet Factory выполните следующие шаги:

  1. Нажмите File (Файл) - New (Создать) - WebSphere Portlet Factory Project.
  2. Назовите проект Dogear и нажмите Next (Далее).
  3. Нажмите Next в окне Add Feature Sets (Добавить набор признаков).
  4. Нажмите Next в окне Java Settings (Параметры Java) .
  5. В окне Deployment Configuration (Конфигурация размещения), выберите Application Server (Сервер приложений) и Portal Server (Сервер портала), в котором вам нужно их разместить. Если вам понадобится один из них, нажмите Add (Добавить). Нажмите Finish (Закончить).
    ПРИМЕЧАНИЕ: Эти серверы должны быть работающими.
  6. На вопрос “Would you like to deploy your project now (Развернуть ваш проект сейчас)?” ответьте "Да".

Теперь у вас есть пустой проект. Далее вам нужно создать новую модель. Модель - понятие программы WebSphere Portlet Factory; фактически это и есть то приложение, которое вы будете создавать. Модель определяет набор конструкторов, которые отвечают за генерирование кода приложения, задающего поведение, структуру и внешний вид вашего приложения-портлета.

Для создания модели выполните следующие шаги:

  1. Правой кнопкой нажмите на только что созданный проект и выберите New - WebSphere Portlet Factory Model.
  2. Выберите Dogear в окне Choose Project и нажмите Next.
  3. Выберите Main and Page в окне Choose Model (Выбор модели) и нажмите Next. Конструктор Main and Page создаст простой метод main(), который немедленно направляет пользователя на страницу по умолчанию.
  4. В окне Page Settings (Параметры страницы) выберите Simple Page (Простая страница). Нажмите Next (Далее).
  5. В окне Save New Model (Сохранить новую модель) назовите модель DogearSource и нажмите Finish (Завершить).

Мы создали модель с очень простой страницей по умолчанию. Теперь изменим эту страницу и создадим поисковую форму:

  1. В представлении Project Explorer (см. рисунок 1) щелкните дважды по модели DogearSource. Далее дважды щелкните по page1 в Outline (Структура), чтобы открыть эту страницу в виде, предназначенном для пользователей.

    Рисунок 1. Представление Project Explorer
    Новый Project Explorer
  2. В разделе Page Contents (Содержимое страницы) введите код из листинга 1.

    Листинг 1. HTML-код для страницы поиска
    <html>
         <body>
            <!-- As a best practice, change the form name to a unique name -->
            <form name="searchForm" method="post">
                <div align="center">
         <span name="searchTag"></span>
         <span name="searchButton" class="searchButton"></span>
                </div>
            </form>
        </body>
    </html>
  3. Сохраните модель. Теперь ваша страница по умолчанию содержит поле поиска с кнопкой поиска Search.

Следующие простые шаги превратят наше приложение в приложение портлета. Выполните следующее:

  1. В разделе Outline нажмите на пиктограмму со знаком (+), чтобы добавить в модель конструктор.
  2. В разделе Category выберите Portal Integration (Интеграция портала) и затем Portlet Adapter (Адаптер портлета) в области Builder Type.(Тип конструктора)
  3. Назовите этот портлет WPFDogearSource.
  4. Установите (Title (Заглавие) для портлета WPF Dogear Source.
  5. Сохраните модель.

Теперь сконфигурируйте портлет, чтобы он был источником в сценарии взаимодействия. Вначале нужно добавить переменную для представления строки поиска:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Variables (Переменные), а затем Variable (Переменная) в области Builder Type.
  3. Нажмите OK.
  4. Установите значение Name (Имя) равным searchQuery.
  5. Установите значение Type (Тип) равным String (Строка).
  6. Установите значение Initial Value (Начальное значение) равным Portal (Портал)
  7. Сохраните модель.

Затем добавьте поддержку для отправки событий в property broker, как показано на рисунке 2:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Portal Integration, а затем Cooperative Source Portlet со значением Builder Type.
  3. Нажмите OK.
  4. Установите значение для Name ProcessProperty (Свойства процесса).
  5. Установите Type на Property Broker Action (Действие брокера свойств). Такая установка означает, что общение между портлетами происходит, когда осуществляется действие, например, нажатие кнопки.
  6. Установите Output Type Name (Тип выходного документа) на linkTextType.
  7. Установите Caption (Заголовок) со значением linkText.
  8. Установите для Name в Output Definitions (Описание выходного документа) значение linkText.
  9. Сохраните модель.
Рисунок 2. Окно взаимодействующего портлета-источника
Окно взаимодействующего портлета-источника

Теперь добавьте элемент управления для ввода текста в теге, названном searchTag на page1. Значение этого текстового поля будет присваиваться переменной, которую вы создали ранее. Выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Page Controls (Управление страницей), а затем Text Input (Ввод текста) в Builder Type (Тип конструктора ).
  3. Нажмите OK.
  4. Присвойте текстовому полю имя searchTag.
  5. Задайте для Page значение page1.
  6. Задайте для Tag значение searchTag.
  7. Задайте для Text значение ${Variables/searchQuery}. ПРИМЕЧАНИЕ: Можно также нажать на кнопку (...), чтобы выбрать имя переменной через пользовательский интерфейс.
  8. Сохраните модель.

Задайте действия для нажатия кнопки Submit. Вначале возьмите значение, введенное пользователем в поисковом окне и сохраните его в переменной, называющейся searchQuery. Затем отправьте это значение Property Broker, затем его можно было передать целевому портлету через соединение. См. рисунок 3.

Выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Flow Control (Управление обменом данных) и затем Action List (Список действий) под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите значение dogearSearch в качестве Name.
  5. В Action List установите значение первого действия:
    Assignment!Variables/searchQuery=${Inputs/searchTag}
  6. Установите значение следующего действия:
    pbAction_ProcessProperty (pbAction_ProcessProperty,${Variables/searchQuery})
  7. Сохраните модель.
Рисунок 3. Описание действий кнопки Submit
Описание действий кнопки Submit

Наконец, сконфигурируйте кнопку Submit, чтобы инициировать действие, описанное в предыдущих шагах:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Page Controls ((Элементы управления страницы), затем выберите Button (Кнопка) в Builder Type.
  3. Нажмите OK.
  4. Дайте кнопке название searchButton.
  5. Установите для Page (Страница) на значение page1.
  6. Установите Label (Метка) на Submit.
  7. Установите Action (Действие) на dogearSearch.
  8. В Input Mappings (Отображения данных ввода) добавьте одно отображение с Name, установленным на ACTION_NAME, и Value (Значение), установленным на pbAction_ProcessProperty.
  9. Сохраните модель.

Портлет-источник готов. Чтобы его проверить, нажмите правой кнопкой на модель DogearSource и выберите Run As (Запустить как) WebSphere Portlet Factory Model. Если все задано верно, в браузере откроется окно поиска с кнопкой поиска.

В следующих разделах описан процесс создания портлета-приемника, выполняющего поиск с использованием REST API сервиса Lotus Connections Dogear, разбор результатов, а затем их рендеринг в портлете.

Создание провайдера данных

Прежде чем создавать портлет-приемник, вам нужно сообщить WebSphere Portlet Factory, как вызывать API Lotus Connections. В данном разделе мы объясняем, как создать провайдер данных.

Провайдер данных определяет, как данные извлекаются из Dogear. В нашем случае для извлечения данных используется Lotus Connections Dogear REST API. Такое абстрагирование позволит в дальнейшем изменять механизм извлечения данных, не затрагивая уровень отображения в вашем приложении.

Следующие шаги описывают конфигурирование WebSphere Portlet Factory для вызова REST API-интерфейсов Lotus Connections Dogear.

Для создания модели провайдера данных выполните следующие шаги:

  1. Нажмите правой кнопкой на название проекта и выберите New - WebSphere Portlet Factory Model.
  2. Выберите Dogear в окне Choose Project и затем нажмите Next.
  3. Выберите Empty (Пустая) в окне Choose Project (Выбрать проект), и затем нажмите Next
  4. В окне Save New Model (Сохранить новую модель) задайте модели название DogearProvider и нажмите Finish (Завершить).

Далее необходимо задать взаимодействие с Dogear REST API. Можно описать сервис Dogear, который смогут потреблять другие модели и приложения. Для этого надо выполнить следующее:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Definition (Описание сервиса) под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите Name на dogearSearch.
  5. Убедитесь, что выбрано Make Service Public (Сделать сервис публичным).
  6. Сохраните модель.

Добавьте разработчика REST Service Call (Вызов REST-сервиса), выполнив следующее:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Data Integration (Интеграция данных), затем выберите REST Service Call под заголовком Builder Type.
  3. Нажмите OK.
  4. Задайте для Name значение dogear.
  5. Установите для URL эначение http://connections.acme.com/dogear/atom (или другое соответствующее значение).
  6. В разделе Parameters (Параметры) добавьте следующие параметры, как показано на рисунке 4, и оставьте пустыми все Values (значения).
    • search
    • page
    • ps
    • lang (Установите для Value значение en)
    Рисунок 4. Параметры конструктора
    Параметры конструктора
  7. В разделе Results Schema (Схема результатов) выполните следующее:
    • o Убедитесь, что выбраны Auto Create Schema (Автоматическое создание схемы), Restructure Feed Data (Реструктуризация данных фида) и Cache Schema (Кэширование схемы).
    • o Задайте для Sample Data URL (URL образцов данных) значение http://connections.acme.com/dogear/atom (или другой подходящий URL), создайте один Sample Data Parameter (Параметр образцов данных) под названием lang и установите для него значение en.
  8. Нажмите Apply (Применить). При этом будет выполнен вызов вашего сервиса Dogear и извлечен образец готового XML. Используя этот образец, WebSphere Portlet Factory автоматически сгенерирует схему.
  9. Сохраните модель.

Для добавления сервисной операции для абстрагирования до уровня REST-вызова выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services (Сервисы), затем выберите Service Operation (Сервисная операция) в качестве Builder Type.
  3. Нажмите OK.
  4. Задайте для Data Service значение dogearSearch.
  5. Задайте для этой операции имя doSearch.
  6. Укажите для DataServices/dogear/execute Action to Call (Вызывать действие).
  7. Установите Input Structure Handling (Оперирование структурой ввода) и Result Structure Handling (Оперирование результирующей структурой) на значение Use structure from called action (Использовать структуру из вызываемого действия).
  8. Нажмите Apply (Применить).
  9. Сохраните модель.

Добавьте подробное определение данных для дальнейшего описания полей, извлекаемых из сервиса Dogear. Это определение позволит вам легко скрывать отдельные поля. Выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services (Сервисы), затем выберите Service Operation (Сервисная операция) в качестве Builder Type.
  3. Нажмите OK.
  4. Выберите из списка опций схему dogear.
  5. В разделе Data Definition Editor (Редактор определений данных) убедитесь, что Container Element (Элемент контейнера) установлен на entry (вход).
  6. Убедитесь, что для каждого поля в списке, Data Type (Тип данных) установлен на string (строка) (кроме полей author и category).
  7. Нажмите кнопку Create Data Definition File (Создать файл описания данных) и сохраните файл как:
    /WEB-INF/data_definitions/dogear.xml
  8. Сохраните модель.

Создаем портлет-получатель

Этот раздел описывает, как создать портлет, получающий информацию из другого портлета и использующий провайдер данных, который вы создали в предыдущем разделе для вызовов REST API в Lotus Connections Dogear.

Обратите внимание, что поскольку вы абстрагировали извлечение данных из Lotus Connections, вы теоретически могли бы сменить провайдер и использовать соединение JDBC вместо вызова REST API для получения данных от Lotus Connections Dogear без каких-либо изменений со стороны портлета.

Для создания модели портлета-получателя выполните следующие шаги:

  1. Нажмите правой кнопкой на проект и выберите New - WebSphere Portlet Factory Model.
  2. Выберите Dogear в окне Choose Project (Выбрать проект), затем нажмите Next.
  3. Выберите Main и Page из Choose Project, затем нажмите Next.
  4. В окне Page Settings (Настройки страницы) выберите Simple Page (Простая страница) и нажмите Next.
  5. В окне Save New Model (Сохранить новую модель) задайте для модели название DogearTarget и нажмите Finish.

Далее выполните несколько простых операций, чтобы превратить это приложение в приложение портлета:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Portal Integration, затем выберите портлет Adapter (Адаптер портала) в качестве Builder Type.
  3. Дайте портлету название WPFDogearTarget.
  4. Установите Title портлета на WPF Dogear Target.
  5. Сохраните модель.

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

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

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Variables, затем выберите Variable в качестве Builder Type.
  3. Нажмите OK.
  4. Установите для Name значение receivedProperty.
  5. Установите Type на String.
  6. Сохраните модель.

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

Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Portal Integration, затем выберите Cooperative Source Portlet (Портлет-источник взаимодействия) в качестве Builder Type.
  3. Нажмите OK.
  4. Установите Event Name (Имя события) на ProcessProperty (Свойства процесса).
  5. Установите Input Name (Входное имя) на linkText (Текст ссылки)
  6. Установите Input Type Name (Имя типа входных данных) на linkTextType (Тип текста ссылки).
  7. Установите Caption (Подпись) на Link Text (Текст ссылки).
  8. Установите Caption (Подпись) в Output Definitions (Определения выхода) на Received Text (Полученный текст).
  9. Сохраните модель.

Далее создайте страницу для рендеринга результатов в Lotus Connections:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Pages (Страницы), затем выберите Page (Страница) под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите Name (Имя) на значение TargetPage.
  5. Введите в Page Contents (Содержимое страницы) код, указанный в листинге 2.

    Листинг 2. Образец HTML-кода для портлета-получателя
    <html>
      <body>
          <!-- Полезно изменить имя формы на уникальное имя -->
          <div align="center" class="bookmarks">
             <span name="allTags"/>
    	   <div class="bookmarkList"  >
    	     <span name="searchResults"></span>
               </div>
               <div>
    	     <span name="pagingTag"></span>
               </div>
          </div>
      </body>
    </html>
  6. Сохраните модель.

Визуализируйте результаты в соответствующем месте на своей странице, воспользовавшись конструктором Data Page (Страница данных), чтобы отобразить данные в именованные HTML-теги, созданные на предыдущей странице. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Page Modifiers (Модификаторы страниц), затем выберите Data Page в качестве Builder Type.
  3. Нажмите OK.
  4. Задайте для Name значение Search.
  5. Задайте для Variable значение DataServices/dogear/doSearch/results/feed/entries.
  6. Установите Page в Model на значение TargetPage.
  7. Установите Page Type на View Only.
  8. Установите Location for New Tags (Расположение новых тегов) на searchResults.
  9. Сохраните модель.

Далее создайте программы-конструктори для вызова Lotus Connections API. Вначале создайте обработчик (handler) для выполнения действия при получении нового свойства от property broker. Действие состоит в том, чтобы получить поисковый запрос по соединению, назначить его временной переменной, вызвать Lotus Connections API и затем перенаправить пользователей к выходной странице, отображающей результаты. Выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Flow Control (Управление обменом данных), затем выберите Event Handler (Обработчик событий) в качестве Builder Type.
  3. Нажмите OK.
  4. Установите для Name значение handleNewProperty.
  5. Установите Event Name (Имя события) на ProcessProperty.
  6. В разделе Arguments (Аргументы), установите Name на linkText и Data Type на String.
  7. В разделе Actions создайте следующие три действия:
    ПРИМЕЧАНИЕ: Действия SystemOut Action - необязательны, поскольку предназначены только для отладки.

    Assignment!Variables/receivedProperty=${Arguments/linkText}
    DataServices/dogear/doSearch
    TargetPage
  8. Сохраните модель.

Далее создайте программу-потребитель сервиса для вызова сервиса, описанного (DogearProvider) в предыдущем разделе. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Consumer (Потребитель сервиса) под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите Name на значение dogear.
  5. Установите Provider Model (Модель провайдера) на DogearProvider.
  6. Убедитесь, что выбрано Override Inputs (Замена входных данных).
  7. Установите Input Value (Значение входных данных) следующим образом (значения .page и .ps позволят позже добавить поддержку страниц):
    dogearRestInputs.Parameters.search to ${Variables/receivedProperty}
    dogearRestInputs.Parameters.page to 1
    dogearRestInputs.Parameters.ps to 10
  8. Установите Rich Data Definition File (Файл подробного описания данных) на значение:
    /WEB-INF/data_definitions/dogear.xml
  9. Сохраните модель.

Разработка двух портлетов завершена. Один портлет позволяет пользователям вводить поисковую строку. Второй получает эту поисковую строку и осуществляет поиск в Dogear по всем общедоступным закладкам, используя REST API. Стоит также заметить, что нам до сих пор не пришлось написать ни одной строки кода Java™. Это большое преимущество WebSphere Portlet Factory. Действуя в таком духе, вы можете создавать портлеты, использующие Lotus Connections API, без изучения Java, XML, REST и разработки портлетов.

После того как WAR-файл портлетов создан и развернут, можно настроить портлеты на конкретной странице и связать их между собой. Чтобы связать портлеты, выполните следующую процедуру:

  1. Войдите на сервер WebSphere Portal Server как администратор портала.
  2. Перейдите на страницу, где сконфигурированы портлеты.
  3. Рядом с заглавием страницы выберите Edit Page Layout (Править макет страницы).
  4. Нажмите на вкладку Wires (Соединения).
  5. Специфицируйте следующие параметры:
    • В поле Source Portlet (Портлет-источник) введите WPF Dogear Source.
    • В поле Sending (Отправка) введите linkText.
    • В поле Target Page (Целевая страница), введите имя страницы (<page name>).
    • В поле Target Portlet (Портлет-получатель) введите WPF Dogear Target.
    • В поле Receiving (Получение) введите Received Text,Link Text.
    • В поле Wire Type (Тип связывания) введите Public (Общедоступное).
  6. Нажмите на пиктограмму со знаком (+), чтобы добавить связывание.
  7. Нажмите Done (Выполнено).

Вернитесь на страницу WebSphere Portal и введите строку поиска в портлете-источнике. Когда вы нажимаете Submit, Dogear Service вызывает действие, анализирует полученный фид Atom с помощью Lotus Connections REST API и возвращает результаты в красивый портлет, например, как показано на рисунке 5.

Рисунок 5. Портлет-приемник
Портлет-приемник

ПРИМЕЧАНИЕ: Этот портлет работает только с Lotus Connections 2.0 и более поздними версиями, в которых настройки Dogear разрешают анонимный доступ. Пример портлета, использующего идентификационные данные пользователей, можно найти в WebSphere Portlet Factory Wiki и среди примеров Lotus Connections Integration.

Этот пример мы будем использовать как основу для дальнейшей разработки. Теперь можно взять полученный фид Atom и выполнить с ним различные действия:

  • • Отфильтровать фид на основании роли пользователя (например, показать только ссылки от пользователей из того же отдела или региона)
  • Оснастить закладки гиперссылками
  • Добавить поддержку страниц для показа более чем 10 закладок за один раз
  • Добавить возможность перевода
  • Интегрировать с поисковой машиной вашего предприятия

Поскольку ПО Lotus Connections основано на сервисах, вы можете даже самостоятельно создать новый пользовательский интерфейс, который соответствует вашим потребностям и интегрируется с вашей средой при помощи WebSphere Portlet Factory. WebSphere Portlet Factory открывает бесчисленное количество возможностей, для реализации которых потребуется совсем немного кода.


Детальное управление доступом в Dogear

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

Мы не поощряем попытки структурировать неструктурированный контент, но понимаем, что вам может понадобиться решить коммерческую проблему, подобную описанной далее.

Клиент корпорации IBM, крупная компания XYZ, занимающаяся розничной торговлей, имеет свой портал для поддержки поставщиков. Пытаясь привлечь дополнительных поставщиков и удержать тех, кого устраивает сотрудничество, в компании XYZ решили добавить возможность организации социальной сети в среде портала, а именно сервис установки закладок и тегирования. Однако проблема с использованием Lotus Connections в этом случае состоит в том, что поставщикам не должны быть видны закладки, созданные другими поставщиками. Поскольку сервис Dogear был создан для размещения в открытой системе без каких-либо стандартных средств управления доступом, использование стандартной установки Lotus Connections в этом случае не подходит. Нам нужно разработать пользовательский портлет, который бы использовал WebSphere Portlet Factory.

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

ПРИМЕЧАНИЕ: Эти примеры были созданы при помощи WebSphere Portlet Factory v6.0.2.3 и Lotus Connections 2.0.

Создание сообщества

Прежде чем начать процесс разработки, следует понять, как можно реализовать требования по управлению доступом. Для этого мы воспользуемся сервисом Lotus Connections Communities. Сервис Communities уникален в том, что это - единственный сервис, который позволяет создать частный или модерируемый список членов. Поскольку в состав сервиса входит компонент закладок, позволяющий членам сообщества обмениваться закладками друг с другом, реализация Dogear в этом сервисе будет полезна для нашего примера.

Компоненты Communities (например, возможность использования закладок) можно извлекать при помощи вызова REST, если известен их communityUuid. Поскольку портлеты могут принимать параметры конфигурации (и допускают персонализацию), можно встроить параметр communityUuid в портлет, чтобы влиять на то, какие результаты будут показываться.

В дополнение к этому настройка bookmarklet-компонента Lotus Connections Dogear (маленькой программы JavaScript™, которая хранится в виде URL в закладке браузера), дает возможность создавать закладки исключительно для сервиса Communities. Поскольку и Communities, и Bookmarklet распознают членов сообщества, можно создавать закладки только для того сообщества, к которому вы принадлежите. В результате при создании частного сообщества вы будете уверены, что каждый участник сможет видеть только содержимое с тегами и закладками участников данного сообщества.

Создание провайдера данных Communities

Как было упомянуто ранее, провайдер данных указывает, как данные извлекаются из сервиса - в нашем случае Lotus Connections Communities. Создав следующую модель, вы сможете использовать REST API Lotus Connections Communities, чтобы находить определенное сообщество на основании communityUuid и возвращать аспект установки закладок в это сообщество. При этом communityUuid будет использоваться как параметр конфигурации для персонификации результатов портлета. Это значение устанавливается администратором портала, когда портлет помещается на страницу. (CommunityUuid отображается в URL, когда вы открываете сообщество в Lotus Connections, как показано на рисунке 6.)

Рисунок 6. Идентификация communityUuid
Идентификация communityUuid

Следующие шаги описывают процесс конфигурации WebSphere Portlet Factory для вызова Lotus Connections Communities REST API. Вначале создайте модель провайдера данных:

  1. Нажмите правой кнопкой на проект и выберите New - WebSphere Portlet Factory Model.
  2. Выберите Dogear в окне Choose Project (Выбрать проект), и нажмите Next (Далее).
  3. Выберите Empty from the Choose Project, и нажмите Next .
  4. В окне Save New Model (Сохранить новую модель), дайте модели название CommunitiesProvider и нажмите Finish (Завершить).

Теперь у вас есть пустая модель.

Далее задайте конструктор Community Service Definition, который создает новый сервис данных (см. рисунок 7). Этот сервис данных можно сделать общедоступным, чтобы он мог использоваться другими моделями, работающими как потребители сервисов. Выполните следующие действия:

  1. В разделе Outline вашего инструментария нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Definition (Описание сервиса) под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите для Name значение communities.
  5. Убедитесь, что выбрана опция Make Service Public (Сделать сервис общедоступным) .
  6. Сохраните модель.
Рисунок 7. Конструктор Service Definition
Конструктор Service Definition

Далее добавьте в созданный конструктор REST Service Call (Сервис REST-вызова), который позволит интегрироваться через REST-вызовы с сервисом Lotus Connections Communities. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Data Integration (Интеграция данных), затем выберите REST Service Call под заголовком Builder Type.
  3. Нажмите OK.
  4. Установите для Name значение getAllBookmarks.
  5. Установите URL на:
    http://www.acme.com/communities/service/atom/community/bookmarks
    (другой соответствующий адрес)
  6. В разделе Parameters (Параметры) конструктора добавьте следующие параметры. Оставьте пока значения незаданными, как показано на рисунке 8:

    • communityUuid. Это значение профилируется в портлете-потребителе. Профилирование в WebSphere Portlet Factory используется для генерирования различных вариантов портлетов в зависимости от значения.
    • Tag. Это значение необязательное и позволяет фильтровать членов сообщества или закладки по значению тега communityUuid. Это значение профилируется в портлете-потребителе.
    Рисунок 8. Параметры конструктора
    Параметры конструктора
  7. В разделе Results Schema (Схема результатов) конструктора выполните следующее:
    • Убедитесь, что выбраны Auto Create Schema (Автоматическое создание схемы), Restructure Feed Data (Реструктуризация передаваемых данных) и Cache Schema (Схема кэша).
    • Установите Sample Data URL на:
      http://www.acme.com/communities/service/atom/community/bookmarks
      (или другой соответствующий адрес)
    • Создайте два Sample Data Parameters (Образца параметров данных). Один называется communityUuid со значением по умолчанию 35FG091E0E92932F37764EE3F30442000007 и тег со значением по умолчанию vendor_1. Значения должны настроить в соответствии с вашей средой. Поэтому нужно ввести communityUuid, который имеется в месте размещения Communities, и реально существующий тег.
  8. Нажмите Apply (Применить). Это действие осуществляет вызов вашего сервера Communities и извлекает образец получившегося XML. Используя этот образец,, WebSphere Portlet Factory автоматически генерирует схему.
  9. Сохраните модель.

Далее добавьте конструктор Service Operation (Операция сервиса) для добавления к сервису данных операции, которая может вызывать любой сервис данных или метод (в нашем случае она вызывает сервис REST, который вы только что создали) и преобразовывать результаты (см. рисунок 9). Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Operation в качестве Builder Type.
  3. Нажмите OK.
  4. Установите значение Data Service (Сервис данных) равным dogearSearch.
  5. Дайте операции название getAllMyBookmarks.
  6. Укажите DataServices/getAllBookmarks/execute как Action to Call (Действие авзова). Эта спецификация иллюстрирует работу конструктора REST Call, созданного вами на предыдущем этапе.
  7. Установите Input Structure Handling (Обработка входной структуры) и Result Structure Handling (Обработка полученной структуры) на Use structure from called action (Использовать структуру) из вызванного действия.
  8. Нажмите Apply (Применить).
  9. Сохраните модель.
Рисунок 9. Добавление конструктора Service Operation
Добавление конструктора Service Operation

Далее добавьте детальное определение данных для описания полей, извлеченных из ранее описанного вызова. Это дополнение позволит показывать или скрывать полученные поля. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Operation в качестве Builder Type.
  3. Нажмите OK.
  4. Выберите communities в качестве схемы из списка опций.
  5. Убедитесь, что в Data Definition Editor (Редактор описания данных) значение Container Element установлено равным Entry. Эта установка позволит манипулировать информацией о каждой полученной закладке (а их может быть несколько).
  6. Убедитесь, что для каждого поля в списке Data Type (Тип данных) установлено значение string (строка).
  7. Нажмите кнопку Create Data Definition File (Создать файл описания данных), и сохраните файл в:
    /WEB-INF/data_definitions/communities.xml
  8. Сохраните модель.

Теперь можете проверить модель провайдера данных CommunitiesProvider, выбрав Run Active Model (Запустить активную модель), как было сделано в предыдущих примерах. Если полученные результаты соответствуют ожидаемым, можно переходить к следующему шагу.

Создание портлета закладок с управлением доступом

Портлет закладок отображает все закладки для определенного сообщества поставщиков, основываясь на значении communityUuid, установленном администратором портала для данного экземпляра портлета.

Для создания модели Data Consumer (Потребитель данных) (портлет-источник) выполните следующие действия:

  1. Нажмите правой кнопкой на проект и выберите New - WebSphere Portlet Factory Model.
  2. Выберите Dogear в окне Choose Project (Выбрать проект), и нажмите Next .
  3. Выберите Empty (Пусто) из Choose Project и нажмите Next .
  4. В окне Save New Model (Сохранить новую модель) дайте модели название Communitiesportlet и нажмите Finish (Завершить).

Теперь импортируйте модель Provider (Провайдер). Эта модель делает сервисы, созданные в провайдере, доступными вам как потребителям. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Model Construction (Создание модели), затем выберите Imported Model (Импортированная модель) в качестве Builder Type.
  3. 3. Дайте имена Builder Connections Data (Данные о соединениях конструктора) и направьте их к модели провайдера, как показано на рисунке 10.
Рисунок 10. Импорт модели
Импорт модели

Теперь создайте две переменных для представления искомых communityUuid и тегов. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. 2. В разделе Category выберите Variables, затем выберите Variable под заголовком Builder Type. Выполните этот шаг дважды, создав одну переменную с названием tags и одну - communityUuid. Каждая из переменных имеет тип String (Строка).

Создайте новый Profile (профиль - набор параметров, определяющих настройку системы) для переменной communityUuid. Profiling (Профилирование) - это понятие в WebSphere Portlet Factory, которое позволяет изменять поведение приложения, основываясь на определенных значениях. В нашем примере вы меняете результаты, отображаемые в конкретном портлете, основываясь на значении communityUuid, установленном администратором портлета при выборе им опции Edit Shared Settings (Редактировать общие установки).

Чтобы создать новый профиль для communityUuid, выполните следующие действия:

  1. Открыв переменную communityUuid, нажмите на пиктограмму профилировщика (программа оптимизации профиля) рядом с полем Initial Value (Начальное значение).
  2. Выберите опцию Create Profile Set (Создать набор параметров профиля).
  3. Дайте профилю название Profile Set connections.communities.Edit. Выберите "none" (никакие) в установках Profile Set, чтобы создать еще одну копию. См. рисунок 11.

    Рисунок 11. Окно нового Profile Set
    Окно нового Profile Set
  4. Установите ${Profile/connections.communities.Edit/ communityUuid} как Profile Values for Default (Значения профиля по умолчанию). Нажмите OK. В результате значение для communityUuid определяется установками Edit Shared Settings (Редактирование общих установок). См. рисунок 12.

    Рисунок 12. Окно Profile Input
    Окно Profile Input

Далее создайте конструктор Service Consumer (Потребитель сервиса) для использования операций сервиса вашего источника данных. Выполните следующие шаги:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Services, затем выберите Service Consumer под заголовком Builder Type.
  3. Дайте конструктору название CommunitiesData и направьте его к модели-провайдеру.
  4. 4. Выберите CommunitiesProvider в качестве Provider Model (Модель провайдера) и выберите Add All Provider Operations (Добавить все операции провайдера) и Override Inputs (Переопределять входные данные). Переопределение входных данных позволяет задавать communityUuid как входной параметр для этого вызова сервиса. См. рисунок 13.

    Рисунок 13. Окно Service Consumer
    Окно Service Consumer
  5. В том же конструкторе выберите операцию getAllMyBookmarks. В разделе для Inputs (Входных данных) убедитесь, что communityUuid и тег настроены на переменные, созданные вами ранее. См. рисунок 14.

    Рисунок 14. Имена и значения входных данных
    Имена и значения входных данных
  6. Настройте значение файла подробного описания данных на схему, созданную ранее в /WEB-INF/samples/data_definitions/communities.xml.
  7. Сохраните программу-конструктор.

Далее создайте новую страницу под названием BookmarkPage:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Pages, затем выберите Page в качестве Builder Type.
  3. Назовите этот разработчик BookmarkPage.

Далее создайте Data Page Builder (Конструктор страницы данных) для отображения результатов из вашего сервиса или вызовов провайдера источника данных на созданной вами странице. Выполните следующее:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Page Modifiers (Модификаторы страниц), затем выберите Data Page (Страница с данными) под заголовком Builder Type. Назовите этот разработчик searchBookmarks.
  3. Настройте переменную как Variables/CommunitiesDataGetAllMyBookmarksResults для представления фида, возвращаемого при вызове вашего сервиса getAllMyBookmarks.
  4. Из списка опций выберите BookmarkPage в качестве Page Type (Тип страницы).
  5. Для Location for New Tags (Размещение новых тегов) выберите searchResults. По умолчанию это значение фигурирует на вашей странице BookmarkPage как тег "span". Задайте все остальные настройки, как показано на рисунке 15.

    Рисунок 15. Настройка свойств
    Настройка свойств

Далее создайте конструктор Rich Data Definition, чтобы добавить подробное описание данных к полученным полям.

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Page Modifiers, затем выберите Rich Data Definition под заголовком Builder Type. Назовите этот конструктор CommunitiesDataGetAllBookmarks.

Затем вы можете поэкспериментировать с полученными полями, форматируя их так, как вам нужно.

Теперь создайте конструктор Action builder для основной части метода. Это метод, который вызывается при первой загрузке портлета. Выполните следующие действия:

  1. В разделе Outline нажмите на пиктограмму со знаком плюс, чтобы добавить в модель конструктор.
  2. В разделе Category выберите Flow Control (Управление обработкой данных), затем выберите Action List (Список действий) в качестве Builder Type. Назовите этот конструктор main (главный) (используйте только строчные буквы).
  3. В ActionList задайте первые несколько действий, как показано на рисунке 16, для установления начального соединения.
    Рисунок 16. Настройка действий
    Настройка действий
  4. Для следующего ActionList выберите следующее действие, чтобы выполнить getAllBookmarks для сообщества: DataServices/CommunitiesData/getAllMyBookmarks.
  5. В качестве последнего действия отобразите страницу BookmarkPage.

Наконец, добавьте конструктор Portlet Adapter, чтобы превратить это в портлет. Дайте ему название Portlet DogearBookmarks как показано на рисунке 17.

Рисунок 17. Конструктор Portlet Adapter
Конструктор Portlet Adapter

После сборки WAR-файла портлета вы можете развернуть этот портлет и настроить его communityUuid по умолчанию. Выполните следующие действия:

  1. Войдите в систему как администратор портала и разверните портлет DogearBookmarks на вашей странице.
  2. Перейдите на страницу, где развернут портлет, и далее к его заглавию. Выберите Edit Shared Settings (Редактировать общие настройки).
  3. В появившемся окне введите communityUuid того сообщества поставщиков, которое имеет доступ к данной странице или портлету.
  4. Сохраните изменения.

Вы завершили разработку портлета Dogear, позволяющего осуществлять детальное управление доступом. Вернитесь на страницу портлета и войдите в систему как другой пользователь с правами доступа другого поставщика. Посмотрите, как в результате изменяются результаты Dogear.

Еще раз обратите внимание, что нам до сих пор не пришлось написать ни одной строки Java-кода.

Кроме того, отметьте, что когда вы выбираете "Dogear This!" в своем браузере, вам предлагается опция установки закладок только в сообществах, членами которых вы являетесь.

Этот пример может служить основой для дальнейшей разработки. Теперь вы можете взять полученный фид Atom и сделать еще несколько вещей:

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

Заключение

Из этой статьи вы узнали, как строить портлеты, используя WebSphere Portlet Factory. В шаг за шагом показано, как строить портлеты, обращающиеся к данным из Lotus Connections Communities и сервисов Dogear. Вы также узнали, как создать модель провайдера данных, которая позволяет использовать конструкторы REST API в WebSphere Portlet Factory для работы со всеми пятью сервисами Lotus Connections. Теперь вы можете создавать приложения, обеспечивающие такие продвинутые возможности, как общение между портлетами и детальное управление доступом к различным сервисам Lotus Connections.

Ресурсы

Научиться

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus, WebSphere
ArticleID=430993
ArticleTitle=Использование IBM WebSphere Portlet Factory для интеграции IBM Lotus Connections с IBM WebSphere Portal
publish-date=09252009