Интеграционные решения Lotus Domino и IBM WebSphere: Domino XMLИсточник: IBM developerWorks Россия Джефри Ло, инженер-программист, консультант, IBM Corporation
Оглавление
Многие организации обнаружили, что следующим логическим шагом для их web-приложений Domino является интеграция с программным обеспечением IBM WebSphere. И для этого есть веские причины. Документно-ориентированная архитектура Lotus Domino облегчает создание и совместное использование документов разработчиками содержимого (контента) и редакторами. Его встроенная система защиты и возможности управления версиями идеальны для администрирования основанного на документах содержимого. WebSphere представляет собой высокопроизводительный транзакционный сервер приложений корпоративного уровня. В его основе лежит мощный J2EE-механизм, разработанный для высокой масштабируемости и устойчивости. WebSphere является также плавильным котлом последних Web-технологий. Организации, желающие расширить свои существующие Domino-приложения с целью использования этих технологий, считают внедрение WebSphere в свою среду логичным выбором. В то время как преимущества очевидны, пути достижения интеграции могут таковыми не быть. Часто разработчики, являющиеся специалистами в одной системе, не очень хорошо знакомы с другой. Следовательно, интеграция влечет за собой комбинацию крутой кривой обучения и жестких временных ограничений для разработчиков. IBM и Lotus распознали это и разработали несколько инструментальных средств для помощи в этом процессе. В этой серии статей из двух частей мы представляем вам два различных метода интеграции: один использует Domino XML (DXL), а второй - библиотеки JSP-тегов Domino, являющиеся частью Lotus Domino Toolkit для WebSphere Studio. Мы рассматриваем за и против каждого метода и обсуждаем их преимущества и недостатки. Используя сравнительную таблицу, вы сможете решить, какой метод наиболее подходит вам и вашему приложению. Затем мы детально, на примерах, показываем вам работу каждого метода. В первой статье из этой серии мы рассматриваем Domino XML. Во второй части - библиотеки JSP-тегов Domino. В обеих статьях предполагается, что вы являетесь разработчиком приложений, знакомым с технологиями XML и JSP. Первая часть предполагает наличие определенного опыта Java-программирования. Два метода: XML и библиотеки JSP-тегов DominoLotus на протяжении долгого времени поддерживает XML. Начиная с версии Lotus Notes/Domino 5, в каждую версию Lotus Notes/Domino добавлялась новая функциональность, повышающая ее возможности по обработке XML. Lotus Notes/Domino 6.5 не является исключением. Он поставляется с многочисленными функциональными возможностями, позволяющими разработчикам генерировать и извлекать XML практически из всех Domino-элементов. Для тех, кто менее знаком с Domino-терминологией, база данных Domino содержит Notes-документы, а также такие элементы дизайна, как формы, представления и агенты. XML позволяет обращаться к этим элементам дизайна и документам. Представляйте все это как сервер приложений, web-сервер и механизм базы данных, объединенные в одно целое. Еще одним методом доступа является библиотека JSP-тегов Domino. Эти библиотеки предоставляются Lotus для помощи разработчикам в создании работающих с Domino JSP-страниц. Библиотеки тегов скрывают Java-код (на котором они основаны), необходимый для подключения JavaServer Page (JSP) к Lotus Domino. Взаимодействие осуществляется с использованием CORBA через IIOP. Это позволяет программно обращаться в Java-коде практически ко всем элементам базы данных. План действий: XML или библиотеки тегов?Эти два метода предлагают различные подходы к интеграции. Следующее сравнение поможет вам решить, какой метод наиболее подходит вам, и/или чего вы хотите достичь. Ваш опыт С другой стороны, имеются закаленные Domino-разработчики, имеющие глубокие познания в Lotus Domino, но малознакомые с Java или WebSphere. Для этих разработчиков библиотеки тегов являются более привлекательными. Этот метод требует всесторонних знаний и опыта в Domino. Он также требует минимального опыта администрирования и доступа к изменению системной конфигурации. Природа сайта/приложения Презентационный Иногда бывают ситуации, когда вам необходимо распределить данные по носителям информации, отличным от Web. Например, вам, возможно, потребуется выпустить объявления и брошюры, или сгенерировать почтовые бюллетени из данных, хранящихся в Lotus Domino. Презентационные сайты/приложения получат наибольшие преимущества при использовании XML-метода, поскольку XML является расширяемым и может быть преобразован в бесчисленное множество форматов. Транзакционный Характеристики двух методов Библиотеки тегов очень тесно интегрированы с Lotus Domino и J2EE-стандартами. Они предоставляют низкоуровневый доступ к Domino-объектам, например, прямые запросы к Domino-представлениям. Для использования библиотек тегов вы должны хорошо знать архитектуру Domino и дизайн базы данных. Библиотеки тегов поддерживают двунаправленный обмен данными между Lotus Domino и WebSphere. Они отлично подходят для транзакционных и интерактивных web-сайтов. XML-методВ первой части этой серии статей мы сконцентрируемся на XML-методе. Во второй части мы рассмотрим библиотеки тегов. XML-метод может быть разбит на три части: экспорт XML из Domino, преобразование XML и отображение результатов в JSP. Мы рассмотрим метод именно в таком порядке. Для изменения JSP-файла мы используем WebSphere Studio Application Developer 5.1, но это программное обеспечение не обязательно. Введение в Domino XML (DXL)Lotus Domino поставляется с несколькими функциональными возможностями для экспорта и импорта Domino-данных и элементов дизайна как XML специального типа. Lotus Domino называет их DXL; это сокращение от Domino XML Language. Пусть это название вас не смущает. DXL - это просто XML, согласованный с Domino DTD, который вы можете найти в каталоге Notes\xmlschemas. На момент написания данной статьи Lotus Domino 6.5.1 поставлялся с восемью документами схем, по одному для каждой итерации Lotus Domino 6.x. Прежде чем продолжить работу, давайте настроим среду, в которой могут выполняться примеры. Предполагается использование операционной системы Microsoft Windows и Lotus Notes 6.5:
Теперь давайте подробно проанализируем только что выполненные нами действия. DxlExporterLotus Domino 6.5 поставляется со служебным Java-классом, называемым DxlExporter. DxlExporter предоставляет разработчикам программное средство для генерирования DXL из Domino-элементов. До Lotus Domino 6.5 DxlExporter был доступен как отдельный загрузочный файл, называемый Lotus XML Toolkit. Те, кто использует более старые версии Lotus Domino, могут использовать эту версию DxlExporter. В нашем примере мы используем DxlExporter внутри Java-агента Domino. Java-агент представляет собой Java-программу, расширяющую предоставляемый Lotus базовый класс (называемый AgentBase), работающий в интегрированной среде Domino. Дополнительная информация по Java-агентам приведена в справочной системе Domino Designer. DxlExporter позволяет выполнять экспорт четырех различных типов Domino-элементов в DXL, используя методы exportDxl. Этими элементами являются database, document, documentcollection и notecollection:
В ситуации с нашим примером мы используем вторую версию этого метода в GetandTransformDXL, которая через цикл For экспортирует по одному документу. Мы могли бы легко использовать и третью версию метода, которая экспортирует documentcollection, но она генерировала бы один XML-файл для всех документов вместо одного файла для каждого.
Lotus обеспечивает DxlExporter несколькими методами для настройки вывода DXL. Давайте рассмотрим два из них, которые мы использовали в примере: ForceNoteFormat и OutputDOCTYPE.
ForceNoteFormat - DxlExporter.setForceNoteFormat(boolean) Установка параметра в true указывает системе экспорта экспортировать каждый Domino-элемент как note-элемент. Установка параметра в значение false указывает системе экспорта экспортировать каждый Domino-элемент как его собственный тип. Для иллюстрации рассмотрим следующий пример. Установка свойства ForceNoteFormat в значение true следующим образом:
генерирует XML, содержащий объект верхнего уровня, называемый note, со значением атрибута class='document'. Сгенерированный DXL-документ примера car выглядит следующим образом:
С другой стороны, когда ForceNoteFormat установлен в значение false, DxlExporter экспортирует элемент верхнего уровня как тип Domino-элемента. Установка свойства
генерирует DXL-документ, который выглядит следующим образом:
ПРИМЕЧАНИЕ: Установка свойства ForceNoteFormat в любое значение, true или false, не меняет формат вывода вложенных элементов. OutputDOCTYPE - DxlExporter.setOutputDOCTYPE(boolean) Добавляет тег DOCTYPE вместе с информацией SYSTEM и DTD. Это может быть полезно тогда, когда сгенерированный DXL должен быть передан другой программе (или лицу) для проверки целостности DXL. Значение SYSTEM может быть установлено при помощи DxlExporter.setDoctypeSYSTEM( ). Обратите внимание на то, что ссылка на Domino DTD находится в теге DOCTYPE.
Существует LotusScript-версия DxlExporter, называемая NotesDxlExporter. она обеспечивает практически аналогичную функциональность, что и ее Java-эквивалент. Она впервые появилась в Lotus Domino 6. Исследование DXLТеперь перейдем в каталог C:\article\dxl\ и откроем только что созданный DXL-файл (расширение все еще XML) в вашем любимом текстовом редакторе или браузере. Давайте исследуем его структуру и содержимое. Рис. 3. Сгенерированный DXL, открытый в браузере DXL предназначен для представления Domino-элементов в виде дерева, т.е., иерархической структуры. Она подчиняется Domino DTD, в котором описан каждый элемент в терминах Domino-конструкции. Поэтому, DXL-документ для ваших данных обычно семантически не выразителен. Рассмотрим пример car. Предположим, что существует текстовое поле VIN, хранящее алфавитно-цифровое значение в Domino-документе. Экспортированное DXL-представление этого поля выглядит так:
Хотя это и корректный XML, он не представляет реального смысла идентификационного номера автомобиля (vehicle identification number - VIN), уникального ID. Фактически, VIN представляется аналогично любым другим текстовым полям в документе. А дело разработчика - преобразовать DXL-документ в XML-файл, который выглядит семантически правильно. Для максимальной переносимости мы рекомендуем преобразовывать DXL-документ в XML-файл, который может описывать ваши данные более эффективно. Преобразование DXLСпособность преобразовывать XML является чрезвычайно мощной. Эта функция управляется технологией XSLT (Extensible Stylesheet Language Transformation). Если вы не знакомы с XSLT и другими связанными с ней технологиями, просмотрите сайт http://www.w3.org/Style/XSL/. В ситуации с DXL преобразование играет существенную роль в создании данных, имеющих смысл вне Lotus Domino. В следующих разделах мы опишем специфику преобразования DXL, а также некоторые советы и приемы. Переопределение пространства имен dxlDXL-документы используют XML-пространство имен dxl. Хотя это значение пространства имен имеет смысл для описания DXL-документа, оно не очень полезно для описания вашего XML-формата. По умолчанию механизм XSLT добавляет пространство имен исходного XML в получаемый XML. Для переопределения этого добавьте атрибут exclude-result-prefixes="dxl" в тег <xsl:stylesheet>:
Обработка текстовых полей и других простых типов данныхСуществует семь простых типов данных, определенных в Domino 6.5.1 DTD. Этими типами являются:
Для добавления некоторой интеллектуальности в ваш XSL вы можете рассмотреть использование тегов choose/when для обнаружения типа данных и для выбора соответствующего шаблона для его обработки:
Мы приводим шаблоны для пары простых данных ниже. Преобразование значений элементов в значения атрибутовКак общее XML-соглашение, элементы верхнего уровня, обычно, содержат атрибут ID-типа для идентификации своей уникальности, например:
В DXL-документе номер VIN просто перечислен как элемент <text>. Чтобы записать это в атрибут получаемого XML, мы делаем следующее: во-первых, тестируем существование документа, используя match="dxl:document". Если документ существует, создаем элемент car (поскольку каждый из наших DXL-документов представляет объект car). Затем добавляем в элемент car атрибут vin со значением элемента VIN. И последнее: находим элемент VIN, используя xPath следующим образом:
Обработка многозначных полейLotus Domino поддерживает концепцию многозначного поля. Этот тип поля часто называется списком. Текстовый список (textlist) - наиболее часто используемый тип многозначного поля. В нашем примере есть многозначное поле, называемое Specifications, содержащее различные параметры, которые имеет автомобиль. Ниже приведен многозначный DXL. Обратите внимание на набор тегов <textlist> внутри тега item.
Использование имен полей в качестве имен элементовБольшинство оставшихся Domino-полей имеют "родное" DXL-представление, например:
Часто fieldName является идеальным именем элемента в получаемом XML:
Следовательно, используя элемент из нашего примера, мы могли бы иметь что-то похожее на:
преобразованное в:
XSL-код для выполнения этого выглядит так:
Мы хотим преобразовать это в следующий формат:
В данном случае мы используем:
Отображение данных в JSPНа данном этапе мы готовы отобразить Domino-данные с использованием JSP-страницы. Запустите WebSphere Studio Application Developer 5.1 и выполните импорт ArticleWeb.war как новый Web Project. Найдите и откройте папку ArticleWeb Project Folder. Выполните двойной щелчок на папке WebContent и найдите файл dispxmlcar.jsp. Нажмите правой кнопкой мыши на dispxmlcar.jsp и выберите пункт меню Run on Server. Рис. 4. WebSphere Studio Application Developer Project Navigator Если отобразится запрос выбора версии экземпляра сервера, выберите WebSphere Application Server 5.1. Сервер и приложение запустятся автоматически. После запуска приложения вы увидите сообщение об ошибке во встроенном в WebSphere Studio Application Developer окне Web-браузера. Проигнорируйте ее, поскольку JSP ожидает параметр vin в строке запроса (querystring). Для исправления этой ошибки просто получите vin либо из XML-файлов, либо из базы данных Domino, и добавьте в URL строки запроса следующим образом:
После нажатия клавиши Enter вы увидите результат. Рис. 5. Предварительный просмотр полученного HTML JSP-страницы и преобразовательDispxmlcar.jsp обеспечивает базовую HTML-конструкцию. Здесь вы могли бы установить заголовок вашей компании и навигацию. В середине находятся <jsp:include> для dispxmltable.jsp. Это - JSP-страница, отображающая среднюю таблицу, в которой содержатся данные об автомобилях.
Она использует параметр vin в качестве ключа для обнаружения XML-документа в каталоге C:\article\xml\. Путь к XSL-документу, TransformHTML.xsl, закодирован жестко. ПРИМЕЧАНИЕ: Существуют более совершенные способы сохранения и извлечения ваших XML или XSL-документов. Один из популярных методов - использовать реляционную базу данных (например, DB2) для хранения XML в виде полей CLOB (Character Large Object). Для того чтобы не слишком усложнять эту статью, мы используем файловую систему. Реальное преобразование управляется классом, называемым aWTransformer. Этот класс основан на примере класса-преобразователя Xalan и по большей части не должен потребовать от вас какой-либо дальнейшей разработки. В dispxmltable.jsp нет HTML-кода. HTML-таблица генерируется на основе конструкции в таблице стилей TransformHTML.xsl. Это позволяет иметь большую гибкость:
Это приложение работает также и на других серверах J2EE-приложений. ЗаключениеLotus Domino предоставляет разработчикам много программ и инструментальных средств для интеграции. В данной статье мы рассмотрели использование DxlExporter для генерирования DXL-документов, способы преобразования их в имеющие смысл XML-файлы и способы отображения их как JSP-страниц в WebSphere. Во второй статье мы подробно рассмотрим использование библиотек тегов Domino для создания динамических JSP-страниц. |