Workload Management |
Пример BeenThere - комментарии |
Расположение исходного кода |
Просмотр примечаний |
Исходный код приложения 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.
Управление рабочей схемой запросов HTTP осуществляется с помощью модуля Web-сервер.
Рассмотрим конфигурацию на рисунке 1. В системе Web работает IBM HTTP Server, который рассылает запросы HTTP обоим серверам приложений WebServer1 и WebServer2, входящими в кластер MyWebCluster. На обоих серверах приложений работает сервлет BeenThere. Эти серверы приложений настроены в системах app1 и app2 соответственно. Более того, модуль IBM HTTP Server настроен так, что вес WLM сервера WebServer1 равен 2, а вес WLM сервера WebServer2 равен 3. Будем считать, что веса представляют собой обратные счетчики, которые начинаются с указанного значения и уменьшаются на единицу всякий раз после обработки запроса. Запросы передаются по методу карусели - первому серверу с ненулевым весом. Серверы приложений с нулевым весом пропускаются. Как только все весовые счетчики станут нулевыми, они одновременно сбросятся и вернутся к заданным значениям, и все начнется сначала.
Управление рабочей схемой запросов EJB осуществляется в WebSphere Application Server внутренне с помощью контроллера WLM.
Рассмотрим конфигурацию на рисунке 1. В кластер MyEJBCluster входят два сервера приложений: EJBServer1 и EJBServer2. На обоих работает сеансовый объект EJB без сохранения состояния BeenThere. Сервлет BeenThere получает от объекта EJB информацию о сервере приложений, на котором он работает. Весовые коэффициенты серверов равны 1 и 3 соответственно.
В платформах z/OS весовые значения служат для распределения запросов HTTP, а для распределения запросов протокола IIOP они не применяются.
Приложение BeenThere работает с программными интерфейсами администрирования приложений в WebSphere Application Server. С помощью этих интерфейсов приложение может получить данные о конфигурации среды и времени выполнения:
Серверные интерфейсы для получения сведений об атрибутах сервера приложений и выполняет стандартные служебные функции JMX MBean.
Клиентские интерфейсы для удаленного объекта AdminService. Класс AdminClient предоставляет удаленному объекту AdminService посредника через один из поддерживаемых коннекторов JMX.
Интерфейсы для запроса или изменения данных конфигурации, как локально, так и удаленно. Также эта служба управляет расположением и содержимым документов о конфигурации сервера приложений.
Для того чтобы показать гибкость и производительность приложений при работе с интерфейсами администрирования WebSphere Application Server, приложение BeenThere использует все эти интерфейсы следующим образом:
Интерфейс 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 служит для подключения к процессу администратора развертываний и извлечению весовых значений членов кластера для всех серверов приложений, входящих в кластер, в котором выполняется объект EJB BeenThere. В следующем фрагменте кода отражено получение экземпляра объекта AdminClient:
// Получение WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Получение экземпляра AdminClient для Администратора развертываний. adminClient = adminService.getDeploymentManagerAdminClient();
Интерфейс 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, входящего в кластер, отображается активным, так как этот параметр поддерживается только в этой среде. В противном случае этот параметр недоступен для выбора.