Пример BeenThere - комментарии


Расположение исходного кода
Просмотр примечаний


Расположение исходного кода

Исходный код приложения BeenThere находится в каталоге корневой-каталог-профайла/samples/src/BeenThere, где <корневой-каталог-профайла> - полное имя профайла Администратора развертываний.

Пользователи z/OS: Исходный код примеров недоступен для платформы z/OS, т.к. компоновка демонстрационных приложений на этой платформе не предусмотрена.



Просмотр примечаний

Обзор

Приложение BeenThere иллюстрирует технологию управления задачами (WLM) в среде сетевого развертывания IBM WebSphere Application Server. Приложение BeenThere состоит из сервлета BeenThere и сеансового объекта EJB BeenThere без сохранения состояния. Сервлет BeenThere иллюстрирует сервер приложений в кластере, которому передается запрос HTTP. Объект EJB BeenThere иллюстрирует сервер приложений в кластере, которому передается запрос объекта EJB. Объект EJB BeenThere вызывается сервлетом BeenThere.

Сервлет BeenThere отображает следующую информацию:


Кроме того, сервлет BeenThere позволяет выполнять следующие действия:


Среда

На рисунке изображена среда, в которой иллюстрируется управление рабочей схемой в Web-контейнере и контейнере EJB:



Рисунок 1   Среда примера


В данную среду входят следующие системы:



В конфигурацию входит два серверных кластера: MyWebCluster и MyEJBCluster. Кластер серверов состоит из группы серверов приложений. В случае выхода из строя одного из серверов кластера запросы перераспределяются между остальными. Оба кластера Примера состоят из двух членов. Членами кластера MyWebCluster являются WebServer1 и WebServer2, а членами кластера MyEJBCluster - EJBServer1 и EJBServer2.

Такая среда позволяет только показать запуск приложения BeenThere. При работе в производственной среде необходимо провести тщательное планирование ресурсов и рассчитать, сколько потребуется создавать серверов приложений на заданном количестве компьютеров (в зависимости от ожидаемой загрузки клиентов).

Управление рабочей схемой

Управление рабочей схемой (WLM) запросов HTTP и EJB обеспечивает среда сетевого развертывания WebSphere Application Server.

Управление рабочей схемой Web-контейнера

Управление рабочей схемой запросов HTTP осуществляется с помощью модуля Web-сервер.

Рассмотрим конфигурацию на рисунке 1. В системе Web работает IBM HTTP Server, который рассылает запросы HTTP обоим серверам приложений WebServer1 и WebServer2, входящими в кластер MyWebCluster. На обоих серверах приложений работает сервлет BeenThere. Эти серверы приложений настроены в системах app1 и app2 соответственно. Более того, модуль IBM HTTP Server настроен так, что вес WLM сервера WebServer1 равен 2, а вес WLM сервера WebServer2 равен 3. Будем считать, что веса представляют собой обратные счетчики, которые начинаются с указанного значения и уменьшаются на единицу всякий раз после обработки запроса. Запросы передаются по методу карусели - первому серверу с ненулевым весом. Серверы приложений с нулевым весом пропускаются. Как только все весовые счетчики станут нулевыми, они одновременно сбросятся и вернутся к заданным значениям, и все начнется сначала.

Управление рабочей схемой EJB-контейнера

Управление рабочей схемой запросов EJB осуществляется в WebSphere Application Server внутренне с помощью контроллера WLM.

Рассмотрим конфигурацию на рисунке 1. В кластер MyEJBCluster входят два сервера приложений: EJBServer1 и EJBServer2. На обоих работает сеансовый объект EJB без сохранения состояния BeenThere. Сервлет BeenThere получает от объекта EJB информацию о сервере приложений, на котором он работает. Весовые коэффициенты серверов равны 1 и 3 соответственно.

В платформах z/OS весовые значения служат для распределения запросов HTTP, а для распределения запросов протокола IIOP они не применяются.

Программные интерфейсы администрирования приложений WebSphere

Приложение BeenThere работает с программными интерфейсами администрирования приложений в WebSphere Application Server. С помощью этих интерфейсов приложение может получить данные о конфигурации среды и времени выполнения:


AdminService

Серверные интерфейсы для получения сведений об атрибутах сервера приложений и выполняет стандартные служебные функции JMX MBean.

AdminClient

Клиентские интерфейсы для удаленного объекта AdminService. Класс AdminClient предоставляет удаленному объекту AdminService посредника через один из поддерживаемых коннекторов JMX.

ConfigService

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

Для того чтобы показать гибкость и производительность приложений при работе с интерфейсами администрирования WebSphere Application Server, приложение BeenThere использует все эти интерфейсы следующим образом:


AdminService

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


// Получение WebSphere AdminService.
AdminService adminService = AdminServiceFactory.getAdminService();

// Получение экземпляра объекта MBean локального сервера администрирования WebSphere.
ObjectName localServer = adminService.getLocalServer();

// Получение имени узла.
nodeName = (String) adminService.getAttribute(localServer, "nodeName");

// Получение имени сервера приложений.
serverName = (String) adminService.getAttribute(localServer, "name");

// Получение ИД процесса Application Server.
serverPid = (String) adminService.getAttribute(localServer, "pid");

AdminClient

Интерфейс AdminClient служит для подключения к процессу администратора развертываний и извлечению весовых значений членов кластера для всех серверов приложений, входящих в кластер, в котором выполняется объект EJB BeenThere. В следующем фрагменте кода отражено получение экземпляра объекта AdminClient:


// Получение WebSphere AdminService.
AdminService adminService = AdminServiceFactory.getAdminService();

// Получение экземпляра AdminClient для Администратора развертываний.
adminClient = adminService.getDeploymentManagerAdminClient();

ConfigService

Интерфейс ConfigService служит для чтения файла конфигурации WebSphere Application Server cell.xml и определения, в какой среде выполняется приложение BeenThere: в базовой конфигурации WebSphere Application Server или в среде сетевого развертывания. В следующем фрагменте кода отражено определение среды приложения:


// Создание нового сеанса WebSphere Management.
Session session = new Session();

// Получение экземпляра WebSphere ConfigService
// для сервера приложений, выполняющего данный сервлет.
ConfigService configService = ConfigServiceFactory.getConfigService();
if (configService != null)
{
  // Чтение документа cell.xml.
  ObjectName cellObj = ConfigServiceHelper.createObjectName(null, "Cell");
  ObjectName[] cellObjs = configService.queryConfigObjects(session, null, cellObj, null);

  if (cellObjs.length != 0)
  {
    cellObj = cellObjs[0];
    String cellName = (String) configService.getAttribute(session, cellObj, "name");
    String cellType = (String) configService.getAttribute(session, cellObj, "cellType");
    if (cellType.equals("DISTRIBUTED"))
    {
      websphereND = true;
    }
  }

  // Закрытие сеанса.
  configService.discard(session);

Если выяснилось, что работает среда сетевого развертывания, то вес объекта EJB Display, входящего в кластер, отображается активным, так как этот параметр поддерживается только в этой среде. В противном случае этот параметр недоступен для выбора.