Перейти к тексту

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

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

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

  • Закрыть [x]

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

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

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

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

  • Закрыть [x]

Управление компонентами и сервисами Apache Pluto на сервере Geronimo

Джефри Хэнсон, главный архитектор, eReinsure.com, Inc.
В промышленности программного обеспечения Джеф Хэнсон (Jeff Hanson) работает более 10-ти лет. Он был главным разработчиком порта Microsoft ® Windows ® проекта OpenDoc, а также разработчиком структуры Route 66 в Novell. Сейчас Джеф является главным разработчиком eReinsure.com, Inc. и работает над созданием структур и платформ web сервиса для систем перестраховки, базирующихся на J2EE. Он также является автором множества статей и книг, в том числе и Сравнение web сервисов J2EE и .NET: Сопоставление основных принципов, Pro JMX: Расширения управления Java и Архитектуры и коммерческие стратегии web-сервисов.

Описание:  Сегодня разработка портальных и портлетных решений – это весьма востребованное умение, особенно при создании приложений на основе технологий Web 2.0. Проект Apache Pluto – это эталонная реализация спецификации Java™ Portlet Specification, разработанной в соответствии с запросом на спецификацию Java Specification Request 168 (JSR 168) в рамках установленной процедуры Java Community Process. Эта спецификация определяет требования к порталам и портлетным компонентам, создаваемым на языке программирования Java. Эта спецификация признана в качестве единого стандарта для построения как традиционных порталов, так и подключаемых Web-приложений. Сочетание возможностей Pluto с Java EE-сервером приложений Apache Geronimo образует весьма гибкую и мощную среду для построения настраиваемых и управляемых систем, использующих порталы и портлеты. Ниже эта тема рассматривается более подробно.

Дата:  19.09.2007
Уровень сложности:  средний
Активность:  1929 просмотров
Комментарии:  


Введение в Apache Pluto

Apache Pluto – подпроект в рамках проекта Apache Portals – это реализация с открытым исходным кодом спецификации Java Portlet Specification. В соответствии с требованиями указанной спецификации, проект Pluto предоставляет среду исполнения портлетных контейнеров, которая позволяет передавать параметры в портлеты и управлять портлетами. В этой статье рассматриваются высокоуровневые функции Pluto и порядок интеграции Pluto с сервером Apache Geronimo. В статье приведен пример приложения (см. раздел Загрузка), содержащего компоненты Geronimo GBean, которые абстрагируют внешние интерфейсы первичных компонентов среды Pluto. Эти Gbean-компоненты могут быть развернуты в исполняемом экземпляре сервера Geronimo, где их можно использовать для мониторинга портальных функций Pluto и управления ими.

Проект Pluto предоставляет контейнер для управления портлетами и специализированное портальное приложение - Portal Driver (портальный драйвер) – которое поддерживает сервисы конфигурации, структуру шаблонов и структуру для вызова отдельных портлетов, развернутых в пределах указанного контейнера. Контейнер портлетов Pluto управляет вызовами портлетов, обработкой контекста портлетов, функциями реестра дескрипторов развертывания портлетов и сервисами дескрипторов развертывания портлетов. Кроме того, этот контейнер поддерживает структуру для подключения модулей, позволяющую расширить его функциональные возможности.

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

На Рис. 1 показаны базовые компоненты Apache Pluto.


Рис. 1. Компоненты архитектуры Apache Pluto
Компоненты архитектуры Apache Pluto

Введение в Apache Geronimo

Apache Geronimo – это полностью совместимый с платформой Java EE сервер приложений, используемый для построения приложений и сервисов уровня предприятия. Сервер Geronimo основан на архитектуре, которая разделяет компоненты и сервисы в соответствии с концепцией Inversion of Control (инверсия управления, IoC). Такое разделение делает сервер Geronimo средой исполнения с чрезвычайно высокой степенью конфигурируемости и модульности. Кроме того, в Geronimo используются расширения JMX и аналогичная им закрытая инфраструктура управляемых bean-компонентов, которая существенно упрощает операции мониторинга, конфигурирования и управления на платформе Geronimo.

Загрузка Geronimo осуществляется с использованием заданной совокупности скомпонованных модулей, которые связаны и управляются «легковесным» ядром Geronimo. Модуль Geronimo – это произвольный компонент, составленный из набора классов: зависимостей, других модулей и сериализованных сконфигурированных состояний. В процессе запуска экземпляра Geronimo загружается ядро Geronimo, которое затем осуществляет компоновку модулей. Модули определяют функциональные возможности среды исполнения Geronimo и зависимости, необходимые для каждой подсистемы Geronimo. Все основные сервисы в среде исполнения Geronimo развертываются как модули.

Модули описываются с помощью XML-документа, который далее в этой статье называется планом развертывания (deployment plan) или просто планом. Окончательный план развертывания (final deployment plan) Geronimo состоит из набора исходных планов развертывания (initial deployment plan), файла Maven Project Object Model (POM) и файла Maven project.properties. На Рис. 2 показан процесс обработки перечисленных файлов с целью создания окончательного плана развертывания.


Рис. 2. Планы развертывания Geronimo
Планы Geronimo

Контент плана развертывания должен соответствовать спецификации XSD (XML Schema Document). Помимо прочего, план развертывания определяет идентификатор модуля; зависимости модуля; свойства среды для модуля; сервисы, предоставляемые модулем, и Gbean-компоненты для модуля.

В Листинге 1 в качестве примера показан простой план развертывания Geronimo.


Листинг 1. Простой план развертывания Geronimo
                            
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="http://geronimo.apache.org/xml/ns/deployment-1.1">
  <environment>
    <moduleId>
      <groupId>geronimo</groupId>
      <artifactId>simple</artifactId>
      <version>1.0.0</version>
      <type>car</type>
    </moduleId>  
    <dependencies>
      <dependency>
        <groupId>geronimo</groupId>
        <artifactId>j2ee-server</artifactId>
        <type>car</type>
      </dependency>
    </dependencies>
    <hidden-classes/>
    <non-overridable-classes/>
  </environment>
  
  <gbean name="SimpleService" class="com.example.myservices.MyServiceGBean">
    <attribute name="prop1">12345</attribute>
    <attribute name="prop2">This is the value for property 2</attribute>
  </gbean>
</module>      
      

После того как план развертывания, подобный плану в Листинге 1, будет преобразован процессом построения, создается CAR-файл с уникальным именем. Так, для конфигурации в Листинге 1 сгенерировано уникальное имя geronimo/simple-1.0.0/car.

CAR-файлы Geronimo

CAR-это автоматические генерируемый файл типа Java Archive (JAR), содержащий сериализованное состояние плана развертывания и других вспомогательных ресурсов, если таковые имеются. Сериализованный план развертывания реализован в виде файла под названием config.ser, который находится в каталоге META-INF CAR-архива. CAR-файлы создаются в процессе построения посредством подключаемого упаковочного модуля инструмента Maven.

Репозитарии Geronimo

Репозитарий Geronimo – это хранилище данных и реестр артефактов, обычно структурированных в виде иерархии каталогов в файловой системе. В бинарный дистрибутив сервера Geronimo входит каталог под названием repository (репозитарий), в котором содержатся все зависимости для модулей, составляющих ядро платформы Geronimo.

Артефакт Geronimo - любой объект, например, JAR-файл, WAR-файл (Web-архив), CAR-файл и т.д., помещенный в репозитарий Geronimo с помощью Web-консоли Geronimo, командной строки или утилит сборки, входящих в дистрибутив Geronimo.

Загрузка и установка сервера Apache Geronimo

Загрузите дистрибутив Geronimo с Web-сайта, упомянутого в разделе Ресурсы, и извлеките из него файлы в каталог, который в данной статье имеет имя {GERONIMO_HOME}. Загрузив и распаковав дистрибутив Geronimo, выполните сценарий запуска, который находится в каталоге {GERONIMO_HOME} \bin\ вашей установки Geronimo. На экране монитора должно появиться следующее консольное окно (см. Рис. 3).


Рис. 3. Запуск Geronimo
Запуск Geronimo

Консоль запуска демонстрирует загружаемые и запускаемые модули, коннекторы и приложения, из которых создается среда исполнения Geronimo. Остановить среду исполнения Geronimo можно с помощью сценария завершения, который также находится в каталоге {GERONIMO_HOME} \bin\ вашей установки Geronimo.


Сервисы Pluto, используемые сервером Geronimo

Сервер Apache Geronimo использует Apache Pluto в качестве портальной среды для своей консоли управления. Сервисы, необходимые контейнеру порталов, и сервисы, используемые портальным драйвером, определяются и загружаются в этой портальной среде в процессе инициализации Web-консоли.

Ниже приведен перечень стандартных сервисов, определенных для Web-консоли сервера Geronimo, функционирующей на базе среды Pluto.

  • Config service — Интерфейс ConfigService представляет информацию о конфигурации портала Pluto сервера Geronimo.
  • Factory manager service — Интерфейс FactoryManagerService представляет функции для управления жизненным циклом Factory-комплектов, зарегистрированных в процессе запуска контейнера Pluto.
  • Log service — Интерфейс LogManagerService представляет функции, определяющие реализацию журналов портального драйвера Pluto.
  • Portlet definition registry service — Интерфейс PortletDefinitionRegistryService представляет все портлеты и портлетные приложения, доступные в портале Web-консоли. Этот сервис представляет и обрабатывает информацию о портлетах и портлетных приложениях Web-консоли.
  • Portlet entity registry service — Интерфейс PortletEntityRegistryService представляет реестр всех экземпляров портлетов и портлетных приложений, доступных в портале Web-консоли.
  • Page registry service — Интерфейс PageRegistryService представляет реестр страниц, окон и портлетных объектов, образующих Web-консоль Geronimo.

В этой статье вы создадите Gbean-компоненты и утилиты, которые будут представлять вышеперечисленные сервисы Pluto инфраструктуре администрирования, работающей в среде исполнения Geronimo.


Управление портальной средой Pluto

Прежде чем вы приступите к управлению средой Pluto, вы должны загрузить исходный код для инфраструктуры Pluto (соответствующая ссылка приведена в разделе Ресурсы). Загрузите и распакуйте файлы в каталог с названием {PLUTO_HOME}.

Экземпляры объектов, представляющих упомянутые выше сервисы Pluto, могут быть извлечены компонентом, который исполняется в пределах контекста того же самого сервлета, что и Web-консоль Web-приложения. Это обеспечивает доступ к конфигурационной информации, которая может быть обернута (wrap) компонентами типа Geronimo Gbean.

На конфигурационную информацию для портальной среды Pluto ссылается объект, хранящийся в классе org.apache.pluto.portalImpl.services.ServiceManager. Извлечение этой информации осуществляется методом getService класса ServiceManager. Для извлечения экземпляра компонента ConfigService необходимо ссылку на класс org.apache.pluto.portalImpl.services.config.ConfigService передать как параметр в метод getService класса ServiceManager.

При наличии экземпляра компонента ConfigService вы сможете представить его в качестве стандартного компонента Geronimo Gbean и сделать его доступным для среды администратора Pluto. В Листинге 2 иллюстрируется, как компонент Geronimo Gbean представляет информацию компонента ConfigService.


Листинг 2. Сервис ConfigService как компонент Geronimo Gbean
                            
public class ConfigServiceGBean
  implements GBeanLifecycle
{
  public static final GBeanInfo GBEAN_INFO;
  
  static
  {
    GBeanInfoBuilder infoBuilder =
      new GBeanInfoBuilder("ConfigServiceGBean", ConfigServiceGBean.class);
  
    infoBuilder.addAttribute("parameters",
                       org.apache.pluto.portalImpl.util.Parameters.class,
                       true);

    infoBuilder.addOperation("getParameters");
    infoBuilder.addOperation("setString", new Class[] { String.class,
                                                        String.class });
    infoBuilder.addOperation("getString", new Class[] { String.class });
    infoBuilder.addOperation("getInteger", new Class[] { String.class });
    infoBuilder.addOperation("getBoolean", new Class[] { String.class });
    infoBuilder.addOperation("paramKeys");

    GBEAN_INFO = infoBuilder.getBeanInfo();
  }
  
  public static GBeanInfo getGBeanInfo() 
  {
    return GBEAN_INFO;
  }
  
  private org.apache.pluto.portalImpl.services.config.ConfigServiceImpl
            configServiceImpl = null;
  
  public ConfigServiceGBean()
  {
    try
    {
      Class configServiceCls =
      Class.forName("org.apache.pluto.portalImpl.services.config.ConfigService");
      org.apache.pluto.portalImpl.services.Service configService =
org.apache.pluto.portalImpl.services.ServiceManager.getService(configServiceCls);
      if (configService != null)
      {
        configServiceImpl =
          (org.apache.pluto.portalImpl.services.config.ConfigServiceImpl)
            configService;
      }
    }
    catch(Exception e)
    {
      System.err.println("Exception in ConfigServiceGBean: " + e);
    }
  }
  
  public org.apache.pluto.portalImpl.util.Parameters getParameters()
  {
    return configServiceImpl.getParameters();
  }

  public java.util.Iterator paramKeys()
  {
    return configServiceImpl.getParameters().keys();
  }

  public String getString(String name)
  {
    return configServiceImpl.getString(name);
  }

  public void setString(String name, String value)
  {
    configServiceImpl.getParameters().setString(name, value);
  }

  public Integer getInteger(String name)
  {
    return configServiceImpl.getInteger(name);
  }

  public Boolean getBoolean(String name)
  {
    return configServiceImpl.getBoolean(name);
  }

  public void doFail()
  {
    System.err.println(getClass().getName() + " failed");
  }
  
  public void doStart()
    throws Exception
  {
    System.out.println("Starting " + getClass().getName());
  }
  
  public void doStop()
    throws Exception
  {
    System.out.println("Stopping " + getClass().getName());
  }
}
      

После того как для компонента ConfigService будет создан стандартный компонент Geronimo Gbean, он должен быть загружен и запущен ядром Geronimo. Извлечение ядра Geronimo осуществляется с помощью метода getSingleKernel класса org.apache.geronimo.kernel.KernelRegistry.

При наличии ссылки на это ядро вы можете описать Gbean-компонент с помощью экземпляра GBeanData. После этого ядро загрузит и запустит Gbean-компонент, показано в Листинге 3.


Листинг 3. Загрузка и запуск Gbean-компонента с помощью GbeanManager
                            
public class GBeanManager
{
  public static void loadAndStartGBean(Class gBeanCls,
                                       GBeanInfo gBeanInfo,
                                       String serviceType)
  {
    java.net.URI gBeanURI =
      java.net.URI.create("devworks/" + gBeanCls.getName() + "/1.0.0/?service="
                          + serviceType);
    org.apache.geronimo.gbean.AbstractName abstractName =
      new org.apache.geronimo.gbean.AbstractName(gBeanURI);

    org.apache.geronimo.gbean.GBeanData gBeanData =
      new org.apache.geronimo.gbean.GBeanData(abstractName, gBeanInfo);
    System.out.println("Loaded gBeanData for class: " + gBeanCls.getName());

    org.apache.geronimo.kernel.Kernel geronimoKernel =
      org.apache.geronimo.kernel.KernelRegistry.getSingleKernel();
    System.out.println("Found kernel: " + geronimoKernel.getKernelName());

    ClassLoader clsLoader = Thread.currentThread().getContextClassLoader();

    try
    {
      geronimoKernel.loadGBean(gBeanData, clsLoader);
      System.out.println("Loaded gBean: " + gBeanCls.getName());
    }
    catch (GBeanAlreadyExistsException e)
    {
      System.out.println("GBean [" + gBeanCls.getName() + "] already loaded");
    }

    try
    {
      geronimoKernel.startGBean(gBeanCls);
      System.out.println("Started gBean: " + gBeanCls.getName());
    }
    catch (GBeanNotFoundException e)
    {
      System.err.println("GBean [" + gBeanCls.getName() + "] not found");
    }
  }

  public static void stopAndUnloadGBean(Class gBeanCls)
  {
    org.apache.geronimo.kernel.Kernel geronimoKernel =
      org.apache.geronimo.kernel.KernelRegistry.getSingleKernel();
    System.out.println("Found kernel: " + geronimoKernel.getKernelName());

    try
    {
      geronimoKernel.stopGBean(gBeanCls);
      System.out.println("Stopped gBean: " + gBeanCls.getName());
    }
    catch (GBeanNotFoundException e)
    {
      System.err.println("GBean [" + gBeanCls.getName() + "] not found");
      return;
    }

    try
    {
      geronimoKernel.unloadGBean(gBeanCls);
      System.out.println("Unloaded gBean: " + gBeanCls.getName());
    }
    catch (GBeanNotFoundException e)
    {
      System.err.println("GBean [" + gBeanCls.getName() + "] not found");
      return;
    }
  }

  public static Object getGBean(Class gBeanCls)
    throws GBeanNotFoundException
  {
    org.apache.geronimo.kernel.Kernel geronimoKernel =
      org.apache.geronimo.kernel.KernelRegistry.getSingleKernel();
    System.out.println("Found kernel: " + geronimoKernel.getKernelName());

    return geronimoKernel.getGBean(gBeanCls);
  }
}
      

После того как компонент ConfigService будет представлен в виде в компонента Geronimo Gbean, который затем будет загружен и запущен ядром, JSP-компонент или сервлет сможет использовать этот Gbean-компонент для обращения к информации, управляемой компонентом ConfigService.

В Листинге 4 в качестве примера приведена JSP-страница, иллюстрирующая извлечение Gbean-компонента ConfigService и использование его для получения и задания информация, управляемой компонентом ConfigService.


Листинг 4. Страница управления для Gbean-компонента ConfigService
                            
<h3>Pluto Admin on Geronimo: Config Service</h3>
<%
try
{
  com.devworks.pluto.gbeans.GBeanManager.loadAndStartGBean(
       com.devworks.pluto.gbeans.ConfigServiceGBean.class,
       com.devworks.pluto.gbeans.ConfigServiceGBean.GBEAN_INFO,
       "config");

  Object gbeanObj =
    com.devworks.pluto.gbeans.GBeanManager.getGBean(
      com.devworks.pluto.gbeans.ConfigServiceGBean.class);
  if (gbeanObj != null)
  {
    com.devworks.pluto.gbeans.ConfigServiceGBean configServiceGBean =
      (com.devworks.pluto.gbeans.ConfigServiceGBean)gbeanObj;

    java.util.Enumeration reqParams = request.getParameterNames();
    while (reqParams.hasMoreElements())
    {
      String paramName = (String)reqParams.nextElement();
      String newParamValue = request.getParameter(paramName);
      String oldParamValue = configServiceGBean.getString(paramName);
      if (newParamValue.equalsIgnoreCase(oldParamValue) == false)
      {
        System.out.println("Setting param: " + paramName + " to value: "
                           + newParamValue);
        configServiceGBean.setString(paramName, newParamValue);
      }
    }

    out.println("<form name='configForm' method='post' "
                + "action='ConfigServiceAdmin.jsp'><table>");
    java.util.Iterator keys = configServiceGBean.paramKeys();
    while (keys.hasNext())
    {
      String paramKey = keys.next().toString();
      String paramValue = configServiceGBean.getString(paramKey);
      out.println("<tr><td>Param " + paramKey + "</td>"
                  + "<td><input type='text' name='" + paramKey
                  + "' value='" + paramValue + "'/></td>"
                  + "<td><input type='submit' value='submit'/></td></tr>");
    }
    out.println("</table>");

    com.devworks.pluto.gbeans.GBeanManager.stopAndUnloadGBean(
      com.devworks.pluto.gbeans.ConfigServiceGBean.class);
  }
  else
  {
    out.println("Unable to find ConfigServiceGBean<br/>");
  }
}
catch(Exception e)
{
  e.printStackTrace(System.out);
  out.println("<br/>Exception: " + e);
}
%>
      

Обращаться к информации, управляемой другими сервисами – например, сервисом реестра портлетных определений или сервисом реестра портлетных объектов – вы можете с помощью описанного выше механизма, представляя каждый компонент в виде Gbean-компонента. Затем эти Gbean-компоненты должны быть загружены и запущены ядром, после чего к ним смогут обращаться компоненты администрирования, такие как JSP-страницы или сервлеты. (Ссылка на исходный текст, демонстрирующий эту концепцию, приведена в разделе Ресурсы).


Конфигурирование пользователей и ролей

Ссылки на роли безопасности (представленные экземплярами org.apache.pluto.om.common.SecurityRoleRef) определяют для каждого портлетного запроса, насколько тот или иной пользователь соответствует определенной роли. Стандартные меры безопасности J2EE и Java EE обеспечивают определение прав, предоставляемых аутентифицированному пользователю в контексте конкретного портлета посредством применения информации о безопасности, сконфигурированной в наборе ссылок на роли безопасности, которые хранятся в определении каждого портлета.

Для извлечения и изменения ссылок на роли безопасности для определения заданного портлета используется Gbean-компонент сервиса реестра портлетных объектов. Как и в случае с Gbean-компонентом ConfigService, статический объект GBeanInfo создается и делается доступным в статическом методе getGBeanInfo (см. Листинг 5).


Листинг 5. Объект GBeanInfo для Gbean-компонента, реализующего сервис реестра портлетных объектов
                            
public class PortletEntityRegistryServiceGBean
  implements GBeanLifecycle
{
  public static final GBeanInfo GBEAN_INFO;

  static
  {
    GBeanInfoBuilder infoBuilder =
      new GBeanInfoBuilder("PortletEntityRegistryServiceGBean",
                           PortletEntityRegistryServiceGBean.class);

    infoBuilder.addOperation("getPortletEntityKeys");
    infoBuilder.addOperation("getPortletEntityID",
                             new Class[] { String.class });
    infoBuilder.addOperation("getPortletEntityWindowList",
                             new Class[] { String.class });
    infoBuilder.addOperation("getPortletEntityDefName",
                             new Class[] { String.class });
    infoBuilder.addOperation("getPortletEntityDefAppID",
                             new Class[] { String.class });
    infoBuilder.addOperation("getPortletEntityDefAppContext",
                             new Class[] { String.class });
    infoBuilder.addOperation("getSecurityRoleRefs",
                             new Class[] { String.class });
    infoBuilder.addOperation("setSecurityRoleRefs",
                      new Class[] { String.class,
                      org.apache.pluto.om.common.SecurityRoleRefSet.class });

    GBEAN_INFO = infoBuilder.getBeanInfo();
  }

  public static GBeanInfo getGBeanInfo()
  {
    return GBEAN_INFO;
  }
      

Каждая операция, определенная объектом GBeanInfo, реализуется с помощью экземпляра объекта, хранящегося в классе org.apache.pluto.portalImpl.services.ServiceManager, и извлекается с помощью метода getService класса ServiceManager. Точно так же, как и в случае Gbean-компонента ConfigService, ссылка на класс org.apache.pluto.portalImpl.services.portletentityregistry.PortletEntityRegistryService должна быть передана как параметр в метод getService класса ServiceManager для извлечения экземпляра компонента PortletEntityRegistryService.

При наличии экземпляра компонента PortletEntityRegistryService, представленного в виде стандартного компонента Geronimo Gbean, информация о ролях безопасности для конкретного портлета может быть сделана доступной для среды администрирования Pluto (см. Листинг 6).


Листинг 6. Информация о ролях безопасности, представленная Gbean-компонентом
                            
public org.apache.pluto.om.common.SecurityRoleRefSet
  getSecurityRoleRefs(String entityKey)
{
  org.apache.pluto.portalImpl.om.portlet.impl.PortletDefinitionImpl
    portletDefinitionImpl = getPortletDefImpl(entityKey);
  if (portletDefinitionImpl == null)
  {
    return null;
  }

  return portletDefinitionImpl.getCastorInitSecurityRoleRefs();
}

public void setSecurityRoleRefs(String entityKey,
             org.apache.pluto.om.common.SecurityRoleRefSet securityRoleRefSet)
{
  org.apache.pluto.portalImpl.om.portlet.impl.PortletDefinitionImpl
    portletDefinitionImpl = getPortletDefImpl(entityKey);
  if (portletDefinitionImpl == null)
  {
    return;
  }

  portletDefinitionImpl.setCastorInitSecurityRoleRefs(securityRoleRefSet);
}
      

После того как вы представите нужные сервисы в виде Gbean-компонентов и сделаете их доступными для ядра, вы сможете использовать их для мониторинга портальных приложений и управления ими. Более подробно этот вопрос рассмотрен в следующем разделе.


Мониторинг портальных приложений и управление ими

Описанные выше Gbean-компоненты должны использоваться в том же самом контексте, что и Web-консоль. Это требование реализуется добавлением JSP-страниц, сервлетов и/или классов Java к CAR-файлу Web-консоли. Для Web-консоли Jetty вы сможете найти соответствующий CAR-файл в каталоге Geronimo/webconsole-jetty/1.1.1/car, который находится в репозитарии Geronimo. Web-приложение для Web-консоли находится в файле framework.war, размещенном в каталоге CAR.

Для реализации на сервере Geronimo функций администрирования Pluto с помощью определенных выше Gbean-компонентов создайте для файла framework.war новый подкаталог под названием plutoadmin. В этот каталог поместите JSP-страницы, находящиеся в эталонном программном коде (см. раздел Загрузка). Эти JSP-страницы содержат класс GBeanManager, предназначенный для обращения к Gbean-компонентам.

После того как вы заполните каталог plutoadmin нужными JSP-страницами и другими Web-ресурсами (а также при каждом изменении ресурсов каталога plutoadmin), необходимо перезапустить CAR-файл Web-консоли с помощью утилиты Geronimo deployer (см. Листинг 7).


Листинг 7. Командная строка для перезапуска CAR-файла Web-консоли
                            
C:\<GERONIMO_HOME>\bin>deploy --user system --password manager restart \
geronimo/webconsole-jetty/1.1.1/car
      

Результаты выполнения этой команды показаны в Листинге 8.


Листинг 8. Результаты перезапуска CAR-файла Web-консоли
                            
    Restarted geronimo/webconsole-jetty/1.1.1/car
      `-> standard.war
      `-> framework.war
      

Теперь введите в Web-браузере ссылку http://localhost:8080/console/plutoadmin/ для обращения к страницам управления Pluto. Имеются ссылки для всех основных сервисов, описанных в этой статье. Вы можете исследовать каждую ссылку и Gbean-компонент, связанный с этой ссылкой.


Заключение

Проголосуйте за эту статью на сайтах....

Сервер Apache Geronimo использует Apache Pluto в качестве портальной среды для своей консоли управления. Инфраструктура управляемых bean-компонентов Geronimo позволяет обернуть оболочкой (wrap) сервисы Pluto и представить их другим компонентам и сервисами, благодаря чему образуется гибкая и мощная среда для управления компонентами и сервисами Pluto.



Загрузка

ОписаниеИмяРазмерМетод загрузки
Эталонный программный код для данной статьиos-ag-geronpluto.zip104KBHTTP

Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Об авторе

В промышленности программного обеспечения Джеф Хэнсон (Jeff Hanson) работает более 10-ти лет. Он был главным разработчиком порта Microsoft ® Windows ® проекта OpenDoc, а также разработчиком структуры Route 66 в Novell. Сейчас Джеф является главным разработчиком eReinsure.com, Inc. и работает над созданием структур и платформ web сервиса для систем перестраховки, базирующихся на J2EE. Он также является автором множества статей и книг, в том числе и Сравнение web сервисов J2EE и .NET: Сопоставление основных принципов, Pro JMX: Расширения управления Java и Архитектуры и коммерческие стратегии web-сервисов.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


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


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

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

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

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

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

(Должно содержать от 3 до 31 символа.)


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

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source, Технология Java, WebSphere
ArticleID=256480
ArticleTitle=Управление компонентами и сервисами Apache Pluto на сервере Geronimo
publish-date=09192007
author1-email=jeff@jeffhanson.com
author1-email-cc=ruterbo@us.ibm.com

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).