11 декабря 2019 года    
Среда | 14:45    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Интернет-технологии / XML

Начинаем работать с Cocoon 2

Начинаем работать с Cocoon 2

Введение

Cocoon 2 от Apache XML Project является гибкой системой Web-публикации, в основе которой лежат повторно используемые компоненты. Несмотря на то, что концепция многократного использования компонент присутствует во многих системах, Cocoon выделяется простотой интерфейсов взаимодействия компонент. Каждая компонента принимает на вход и возвращает XML, и такой подход работает.

Данная статья является кратким обзором функциональных возможностей Cocoon 2. Прочитав ее, вы научитесь создавать небольшие приложения с использованием этой системы.

Что такое Cocoon 2?

Cocoon 2 является системой публикации XML. Что же это на самом деле значит? Это не база данных, в которой хранятся XML-данные, и не сервер приложений J2EE, который подготавливает контент для web-сервера. Cocoon 2 архитектурно располагается на промежуточном уровне и представляет собой среду обработки контента. Контент обрабатывается системой компонент, структуру которой как раз и строит разработчик.

Несколько примеров

Рассмотрим простой пример. Предположим, к некоторому XML-документу, сохраненному в файле (file.xml), применяется XSL-преобразование (stylesheet.xsl) для получения результата в виде HTML. Система компонент Cocoon, соответствующая данной задачи, показана на Рисунке 1.

Figure of three stage
pipeline

Любая система компонент начинается с генератора. На рисунке 1 генератор анализирует файл и создает поток событий SAX. Вторым элементом в рассматриваемой системе компонент является XSL-процессор. В нашем случае, процессор преобразований применяет XSL-преобразование (stylesheet.xsl) к XML-документу, полученному от генератора. Результатом его также является SAX-поток. На выходе системы находится сериализатор. Он прерывает поток и выдает результата преобразования в качестве HTTP-ответа. Подобную трехуровневую систему компонент можно применять для создания множества или даже всех страниц разрабатываемого сайта. Этот пример может показаться слишком простым, поскольку две компоненты из трех являются крайними компонентами, однако, он хорошо иллюстрирует общую идею.

Figure of four stage pipeline

На рисунке 2 показан случай, более приближенный к реальной жизни. Страницы, содержащие статический и динамический контент, поступают из базы данных. К предыдущей схеме добавлена новая компонента — SQL-процессор. SQL-процессор обрабатывает SQL-выражения, включенные в исходный XML-документ, и заменяет их на результат выборки, опять же оформленный в виде XML-фрагмента. Например, если в исходном документе (в file.xml) содержится:

<guest-list>
  <sql:execute-query>
    <sql:query>
      SELECT CONCAT(lastName, ", ", firstName) as name, age
          FROM guest WHERE status = ARRIVING;
    </sql:query>
  </sql:execute-query>
</guest-list>

то соответствующим результатом действия SQL-процессора будет примерно следующее:

<guest-list>
  <row-set>
    <row>
      <name>Bush, George</name>
      <age>56</age>
    </row>
    <row>
      <name>Jackson, Michael</name>
      <age>42</age>
    </row>
    <row>
      <name>Einstein, Albert</name>
      <age>105</age>
    </row>
  </row-set>
</guest-list>

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

Предположим теперь, что в локальной базе данных находится список символов акций, которые мы хотим использовать при отображении текущих цен на рынке. Подобная страница может являться составной частью какого-нибудь портала наподобие Yahoo. Эту бизнес-задачу можно решить с помощью многокомпонентной системы, показанной на Рисунке 3:

Figure of six stage pipeline

Допустим, что в SOAP-процессор поступает следующий фрагмент XML-кода:

<soap:query url="http://www.mystock.org:8080">
  <soap:body>
    <getStockPrice>
      <stockName>IBM</stockName>
      <stockName>HWQ</stockName>
      <stockName>BEA</sockName>
    </getStockPrice>
  </soap:body>
</soap:query>

Заметим, что в этом примере для преобразования результата работы SQL-процессора в формат, понятный SOAP-процессору в промежутке между этими двумя компонентами мы используем XSL-процессор. Как видно, XSL может использоваться для решения широкого круга задач, а не только для представления в виде HTML.

Что внутри?

Как было сказано выше, Cocoon 2 состоит из трех основных компонент: первая - генератор, который создает поток XML SAX. Этот поток может быть создан на основе файла из локальной файловой системы, на основе XML-данных из базы данных или внешней системы, или как-нибудь иначе. Вторая компонента - процессор преобразований, который изменяет поток XML. В качестве этой компоненты могут использоваться XSL, SQL, SOAP, LDAP или пользовательские процессоры. Главное требование заключается в возможности обрабатывать входящий поток XML и выводить также поток XML. В роли третьей компоненты выступает сериализатор, который терминирует поток XML и создает физическую репрезентацию контента в соответствующем формате. Таким форматом может быть не только HTTP, но и любой графический формат, операция записи в локальный файл и т.д.

Карта сайта

Система компонент Cocoon 2 определяется в виде карты сайта в файле sitemap.xmap, который находится в корне web-приложения. Ключевой фрагмент карты сайта для Примера 3 будет иметь вид

<map:match="*.html">
  <map:generate src="file.xml"/>
  <map:transformer type="sql">
    <map:parameter name="use-connection" value="mydatabase"/>
  </map:transformer>
  <map:transformer type="xsl" src="format-adjust.xsl"/>
  <map:transformer type="soap" url="soap://www.stockquote.com"/>
  <map:transformer type="xsl" src="html-presentation.xsl"/>
  <map:serializer type="html"/>
</map:match>

Инсталляция

Open source и уменьшение стоимости разработки

Apache Cocoon является проектом open source. Что это означает, и что вы должны знать, если хотите профессионально использовать эту технологию?

  • Современность: Cocoon 2 находится на переднем крае компьютерных технологий. Использование новых систем в ваших проектах вместо старых парадигм придаст необходимый импульс для развития в 21-ом столетии.
  • Дешевизна решения: Cocoon не сертифицировался в отличие от других коммерческих продуктов, типа WebLogic или Oracle DB. Но этот факт не должен быть ключевым для отрицательного решения. В конце концов, Cocoon естественно больше тестировался и прошел проверку в реальных проектах, чем любой продукт, разработанный под заказ.
  • Стабильность: В отличие от аналогичных коммерческих продуктов, проект Cocoon разрабатывается уже в течение довольного долгого периода времени. Cocoon 2 по сравнению с Cocoon 1 претерпел значительные архитектурные измения.

Для инсталляции и запуска Cocoon необходимы три следующих программных продукта.

  1. JDK. Рекомендуется использовать JDK 1.3.1, который можно загрузить с корпоративного сайта Sun: http://java.sun.com/j2se/1.3.
  2. Сервер приложений J2EE. Apache Tomcat является очень популярным продуктом, но я бы посоветовал Orion Web Server. Это современное Java-решение можно загрузить с сайта http://www.orionserver.com/. Отметим, что Oracle использует этот сервер в своей последней линейке продуктов версии 9i.
  3. Дистрибутив Cocoon. Его можно загрузить со страницы http://xml.apache.org/cocoon/dist. Рекомендую использовать версию 2.0.1, так как в версии 2.0.2 существуют некоторые проблемы с примерами, которые, надеемся, будут исправлены в 2.0.3 (версия 2.0.3 уже доступна, и в связке с Orion Web Server и IBM WebSphere Application Server проблем не замечено - прим. ред).

На сайте Cocoon приведена подробная инструкция по инсталляции и настройке Cocoon для различных серверов приложений (Tomcat, WebLogic, Jrun, Jboss, Resin и др.)

Работу с Cocoon лучше всего проиллюстрировать на очень простом HTML примере "Hello World". Есть три момента, на которые стоит обратить внимание. Первый - это фрагмент карты сайта, отвечающий за обработку этого примера. Найдите в файле sitemap.xmap строчку <map:match pattern="hello.html">. Этот элемент содержит следующее правило соответствия компонент:

<map:match pattern="hello.html">
    <map:generate src="docs/samples/hello-page.xml"/>
    <map:transform src="stylesheets/page/simple-page2html.xsl"/>
    <map:serialize type="html"/>
   </map:match>

Вторым момент - из этого правила мы видим, что исходный файл XML для этого правила должен быть найден по пути docs/samples/hello-page.xml. И наконец, следует проверить наличие преобразования stylesheets/page/simple-page2html.xsl.

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

Создание страницы Cocoon

Чтобы продемонстрировать некоторые преимущества и возможности Cocoon, создадим систему компонент, которая получает числовое значение, переданное с помощью HTTP POST, и вычисляет факториал этого значения. Таким образом, мы покажем, как можно использовать различные источники данных отличные локальных файлов, и как система компонент и процессор преобразований XSL может выполнять более сложные задачи, чем просто внедрение разметки HTML.

Система компонент должна состоит из трех элементов:

  • Стандартный генератор HTTP Request, который преобразует все доступные элементы запроса HTTP, такие как пары параметр-значение, имя хоста и т.д. в XML.
  • Преобразование XSL, которое выбирает соответствующее числовое поле и вычисляет факториал.
  • Сериализатор, который преобразует поток SAX в формат HTTP. В данном случае, мы будет выдавать результат в формате XML.

Ниже приведено правило соответствия для описанной системы компонент.

<map:match pattern="mypage">
    <map:generate type="request"/>
    <map:transform src="mystylesheet.xsl"/>
    <map:serialize type="xml"/>
  </map:match>

Соответствующее XSL-преобразование имеет вид:

<?xml version="1.0"?>
<!-- Author: Steven P. Punte "stevep@candlelightsoftware.com" -->
<!-- Description:  Computes Factorial -->

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:http="http://xml.apache.org/cocoon/requestgenerator/2.0">

  <xsl:template match="/">
    <page>
      <incoming-value>
        <xsl:value-of select="/http:request/http:requestParameters/
http:parameter/http:value"/>
      </incoming-value>
      <computed-factorial>
        <xsl:call-template name="factorial">
          <xsl:with-param name="input" select="/http:request/
http:requestParameters/http:parameter/http:value"/>
        </xsl:call-template>
      </computed-factorial>
    </page>
  </xsl:template>

 <xsl:template name="factorial">
    <xsl:param name="input"/>
    <xsl:choose>
     <xsl:when test="$input > 1">
        <xsl:variable name="tmp">
         <xsl:call-template name="factorial">
           <xsl:with-param name="input" select="$input - 1" />
          </xsl:call-template>
       </xsl:variable>
        <xsl:value-of select="$tmp * $input"/>
      </xsl:when>
      <xsl:otherwise>
        1
      </xsl:otherwise>
   </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

После развертывания этого примера, загрузите в браузере соответствующую страницу с входным параметром. Например,

http://localhost/mypage?input=5

В результате браузер должен выдать следующий XML:

<?xml version="1.0" encoding="UTF-8" ?>
  <page>
    <incoming-value>5</incoming-value>
    <computed-factorial>120</computed-factorial>
  </page>

Выводы

Cocoon использует простую идею системы компонент. Компоненты Cocoon могут получать доступ к реляционным и XML базам данных, взаимодействовать с LDAP и создавать графические объекты. Можно создать отдельные компоненты для создания и получения SOAP и ebXML сообщений, можно использовать сериализаторы SNMP протокола, предоставляющие COM и EJB/RMI мосты, и, говоря общими словами, можно решать различные задачи, связанные с корпоративной бизнес-логикой.

Cocoon является примером XML-ориентированного программного продукта.Упомянутые в данной статье процессоры преобразований XSL и SQL являются только примерами возможных компонент. Программистам необходимо выразить собственные решения на языке XML, чтобы иметь возможность повторно использовать оболочки подобных компонент.

Начинаем работать с Cocoon 2
Лента новостей


2006 (c) Copyright Hardline.ru