Интеграционные решения Lotus Domino и IBM WebSphere: Domino XML

Джефри Ло, инженер-программист, консультант, IBM Corporation

Оглавление

Управляйте вашими данными в Lotus Domino, воспользовавшись преимуществами прекрасно масштабируемой транзакционной J2EE-платформы IBM WebSphere и применяя одно из следующих решений: Domino XML или библиотеки JSP-тегов Domino. В первой части данной серии статей мы рассмотрим Domino XML или DXL.

Многие организации обнаружили, что следующим логическим шагом для их 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-тегов Domino

Lotus на протяжении долгого времени поддерживает 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 или библиотеки тегов?

Эти два метода предлагают различные подходы к интеграции. Следующее сравнение поможет вам решить, какой метод наиболее подходит вам, и/или чего вы хотите достичь.

Ваш опыт
Многие Java-разработчики с неохотой воспринимают идею изучения Lotus Domino только потому, что эта система немного непохожа на то, к чему они уже привыкли. Они ищут решения в области открытых стандартов, где такие языки как Java и XML преобладают в разработке приложений. Если вы один из таких разработчиков, то найдете XML-метод более приемлемым. Он требует минимальных знаний Domino, но хорошего понимания технологий XML, XSLT и Java.

С другой стороны, имеются закаленные Domino-разработчики, имеющие глубокие познания в Lotus Domino, но малознакомые с Java или WebSphere. Для этих разработчиков библиотеки тегов являются более привлекательными. Этот метод требует всесторонних знаний и опыта в Domino. Он также требует минимального опыта администрирования и доступа к изменению системной конфигурации.

Природа сайта/приложения

Презентационный
Многие web-сайты являются презентационными. Это означает, что их главной целью является отображение HTML-содержимого в Web. Этот тип web-сайтов требует мало информации от пользователя, или вообще не требует ее ввода. Содержимое, обычно, не изменяется после первоначальной публикации. Примерами презентационных сайтов являются новостные сайты или страницы с документацией по продукту.

Иногда бывают ситуации, когда вам необходимо распределить данные по носителям информации, отличным от Web. Например, вам, возможно, потребуется выпустить объявления и брошюры, или сгенерировать почтовые бюллетени из данных, хранящихся в Lotus Domino. Презентационные сайты/приложения получат наибольшие преимущества при использовании XML-метода, поскольку XML является расширяемым и может быть преобразован в бесчисленное множество форматов.

Транзакционный
Технически все web-сайты являются транзакционными. Но в данном случае транзакционный сайт является сайтом, который существенно зависит от вводимой пользователем информации. Такие сайты предлагают набор служб, содержимое которых персонализировано и часто является динамическим. Они, обычно, требуют определенного рода авторизации и аутентификации в реестре пользователей. Примерами транзакционных сайтов являются сайты аукционов и интерактивные дискуссионные форумы. Сайты такого типа получат больше преимуществ при использовании решения с библиотеками тегов.

Характеристики двух методов
XML является в высшей степени переносимым. Вы можете применять его для разделения данных между практически всеми серверами приложений и базами данных, используя большинство современных языков программирования. XML использует такие промышленные стандарты как Java, XSLT и т.д., и является расширяемым, но независимым от системы или платформы. Он не требует серьезных знаний Lotus Domino и базы данных для работы с ним. XML отлично подходит для презентационных web-сайтов, специализирующихся на доставке содержимого.

Библиотеки тегов очень тесно интегрированы с 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:

  1. В Windows Explorer создайте каталог с названием article в корневом каталоге или на диске C:.
  2. Загрузите файлы примера для данной статьи и разархивируйте их в только что созданный каталог C:\article.
  3. Проверьте, что имеются следующие папки:
    • Article
    • Com
    • Dxl
    • Xml
    • Xsl
  4. Скопируйте включенную в загружаемый файл базу данных articleSample.nsf в ваш каталог Notes\data. Эта база данных хранит простую информацию об автомобилях, которую вы можете получить от местного представительства по продаже подержанных автомобилей.
  5. При закрытом Notes Client найдите и откройте файл notes.ini (обычно, в каталоге Notes) и добавьте включенные XML .jar-файлы в JVM classpath. Это делается путем добавления следующей строки в качестве первого элемента в документ (сразу под "[Notes]"):

    JavaUserClasses=C:\article\xercesImpl.jar;C:\article\xmlParserAPIs.jar

    Сохраните и закройте файл..

  6. Откройте базу данных articleSample.nsf в Domino Designer.

    ПРИМЕЧАНИЕ: Вы должны, по крайней мере, иметь права доступа на уровне Designer в ACL, а также должен быть разрешен параметр Create Lotuscript/Java agents.

  7. В левой панели ниже базы данных articleSample.nsf выберите Shared Code - Agents. Вы должны увидеть два Java Agents.
  8. База данных сейчас пуста, но вы можете заполнить ее, запустив агента GenerateCars, который сгенерирует информацию о 1000 автомобилей, выбирая набор значений случайным образом. Нажмите правой кнопкой мыши на агент GenerateCars и выберите Run для создания документов Car в базе данных. Откройте Notes-клиент и проверьте содержимое базы данных.

    Рис. 1. Пример документа Car в Lotus Notes

  9. Затем, сгенерируйте DXL и XML из только что сгенерированных документов Car. Нажмите правой кнопкой мыши на агент GetandTransformDXL и выберите Run. Агент выполняет два действия: Во-первых, он генерирует DXL-документы из документов Car и помещает их в каталог C:\article\dxl; и, во-вторых, он преобразует только что сгенерированные DXL-документы в XML-файлы и помещает их в каталог C:\article\xml.

    Рис. 2. Список преобразованных XML-документов

Теперь давайте подробно проанализируем только что выполненные нами действия.

DxlExporter

Lotus 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:

public String exportDxl(Database database)
Экспортирует все из базы данных Domino в DXL-формат. Сюда входят элементы дизайна и документы данных.

public String exportDxl(Document document)
Экспортирует документ Domino в один DXL-документ.

public String exportDxl(DocumentCollection documentcollection)
Экспортирует коллекцию Domino-документов в один DXL-документ.

public String exportDxl(NoteCollection notecollection)
Экспортирует коллекцию Domino-элементов. Сюда могут входить элементы дизайна и документы данных.

В ситуации с нашим примером мы используем вторую версию этого метода в GetandTransformDXL, которая через цикл For экспортирует по одному документу. Мы могли бы легко использовать и третью версию метода, которая экспортирует documentcollection, но она генерировала бы один XML-файл для всех документов вместо одного файла для каждого.

DxlExporter exporter = session.createDxlExporter();
exporter.setForceNoteFormat(false);
exporter.setOutputDOCTYPE(false);
Stream stream = session.createStream();
if (stream.open(DXL_FILE_PATH+ this.getFilename()+ FILETYPE_SUBFIX)) {
	stream.writeText(exporter.exportDxl(doc));
}

Lotus обеспечивает DxlExporter несколькими методами для настройки вывода DXL. Давайте рассмотрим два из них, которые мы использовали в примере: ForceNoteFormat и OutputDOCTYPE.

exporter.setForceNoteFormat(false);
exporter.setOutputDOCTYPE(false);

ForceNoteFormat - DxlExporter.setForceNoteFormat(boolean)

Установка параметра в true указывает системе экспорта экспортировать каждый Domino-элемент как note-элемент. Установка параметра в значение false указывает системе экспорта экспортировать каждый Domino-элемент как его собственный тип. Для иллюстрации рассмотрим следующий пример. Установка свойства ForceNoteFormat в значение true следующим образом:

exporter.setForceNoteFormat(true);

генерирует XML, содержащий объект верхнего уровня, называемый note, со значением атрибута class='document'. Сгенерированный DXL-документ примера car выглядит следующим образом:

<note class='document' xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='1.0'
 replicaid='88256F0C0071CEAD'>
…
<note>

С другой стороны, когда ForceNoteFormat установлен в значение false, DxlExporter экспортирует элемент верхнего уровня как тип Domino-элемента. Установка свойства

exporter.setForceNoteFormat(false);

генерирует DXL-документ, который выглядит следующим образом:

<document xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='1.0'
 replicaid='88256F0C0071CEAD' form='car'>
...
</document>

ПРИМЕЧАНИЕ: Установка свойства ForceNoteFormat в любое значение, true или false, не меняет формат вывода вложенных элементов.

OutputDOCTYPE - DxlExporter.setOutputDOCTYPE(boolean)

Добавляет тег DOCTYPE вместе с информацией SYSTEM и DTD. Это может быть полезно тогда, когда сгенерированный DXL должен быть передан другой программе (или лицу) для проверки целостности DXL. Значение SYSTEM может быть установлено при помощи DxlExporter.setDoctypeSYSTEM( ). Обратите внимание на то, что ссылка на Domino DTD находится в теге DOCTYPE.

<!DOCTYPE document SYSTEM 'xmlschemas/domino_6_5_1.dtd'>

Существует 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-представление этого поля выглядит так:

<item name='VIN'><text>9135D30E168BEC6688256F0D00626201</text></item>

Хотя это и корректный 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, а также некоторые советы и приемы.

Переопределение пространства имен dxl

DXL-документы используют XML-пространство имен dxl. Хотя это значение пространства имен имеет смысл для описания DXL-документа, оно не очень полезно для описания вашего XML-формата. По умолчанию механизм XSLT добавляет пространство имен исходного XML в получаемый XML. Для переопределения этого добавьте атрибут exclude-result-prefixes="dxl" в тег <xsl:stylesheet>:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dxl="http://www.lotus.com/dxl" version="1.0" xmlns:xalan="http://xml.apache.org/xslt" exclude-result-prefixes="dxl">

Обработка текстовых полей и других простых типов данных

Существует семь простых типов данных, определенных в Domino 6.5.1 DTD. Этими типами являются:

  • Text: Простые строковые данные, хранимые как #PCDATA, символы перевода строки или не-XML символы.
  • Number: Простое число, хранимое как #PCDATA.
  • Datetime: Элемент datetime, отображающийся в строку типа yyyymmddThhmmss.
  • Textlist: Коллекция текстовых элементов.
  • Numberlist: Коллекция числовых элементов.
  • Datetimelist: Коллекция элементов datetime.
  • Itemdata: Используется для представления полей, которые DTD еще не обрабатывает. Например, файловые вложения, хранящиеся в Domino-документе представляются как itemdata. Значение должно быть указано в "сыром" Base64-формате.

Для добавления некоторой интеллектуальности в ваш XSL вы можете рассмотреть использование тегов choose/when для обнаружения типа данных и для выбора соответствующего шаблона для его обработки:

	<xsl:choose>
		<xsl:when test="name(child::*)='text'">
			<xsl:apply-templates select="dxl:text" />
		</xsl:when>
		<xsl:when test="name(child::*)=’number’">
			<xsl:apply-templates select="dxl:number" />
		</xsl:when>
		<xsl:when test="name(child::*)='datetime'">
			<xsl:apply-templates select="dxl:datetime" />
		</xsl:when>
		<xsl:when test="name(child::*)='textlist'">
			<xsl:apply-templates select="dxl:textlist" />
		</xsl:when>
		<xsl:when test="name(child::*)='numberlist'">
			<xsl:apply-templates select="dxl:numberlist" />
		</xsl:when>
		<xsl:when test="name(child::*)='datetimelist'">
			<xsl:apply-templates select="dxl:datetimelist" />
		</xsl:when>
	</xsl:choose>

Мы приводим шаблоны для пары простых данных ниже.

Преобразование значений элементов в значения атрибутов

Как общее XML-соглашение, элементы верхнего уровня, обычно, содержат атрибут ID-типа для идентификации своей уникальности, например:

<car vin="0C96E710809A900D88256F0D006260E8">

В DXL-документе номер VIN просто перечислен как элемент <text>. Чтобы записать это в атрибут получаемого XML, мы делаем следующее: во-первых, тестируем существование документа, используя match="dxl:document". Если документ существует, создаем элемент car (поскольку каждый из наших DXL-документов представляет объект car). Затем добавляем в элемент car атрибут vin со значением элемента VIN. И последнее: находим элемент VIN, используя xPath следующим образом:

<xsl:value-of select="./dxl:item[attribute::name='VIN']/dxl:text/text()" />
<xsl:template match="dxl:document">
	<xsl:element name="car">
		<xsl:attribute name="vin">
			<xsl:value-of select="./dxl:item[attribute::name='VIN']/dxl:text/text()" />
		</xsl:attribute>
		<xsl:apply-templates select="./dxl:item" />
	</xsl:element>
</xsl:template>

Обработка многозначных полей

Lotus Domino поддерживает концепцию многозначного поля. Этот тип поля часто называется списком. Текстовый список (textlist) - наиболее часто используемый тип многозначного поля. В нашем примере есть многозначное поле, называемое Specifications, содержащее различные параметры, которые имеет автомобиль. Ниже приведен многозначный DXL. Обратите внимание на набор тегов <textlist> внутри тега item.

<item name='Specifications'>
<textlist>
<text>Power locks</text>
<text>AWD</text>
<text>Anti-lock brakes</text>
<text>Automatic windows</text><text>A/C</text>
<text>ABS</text>
</textlist>
</item>

Использование имен полей в качестве имен элементов

Большинство оставшихся Domino-полей имеют "родное" DXL-представление, например:

<item name='fieldName'>
<fieldType>Acura</fieldType>
</item>

Часто fieldName является идеальным именем элемента в получаемом XML:

<fieldName>Acura</fieldName>

Следовательно, используя элемент из нашего примера, мы могли бы иметь что-то похожее на:

<item name='Make'>
<text>Acura</text>
</item>

преобразованное в:

<Make>Acura</Make>

XSL-код для выполнения этого выглядит так:

<xsl:element name="{@name}"> 
	<xsl:apply-templates select="dxl:text" />
</xsl:element>

<xsl:template match="dxl:text">
	<xsl:value-of select="text()" />
</xsl:template>

Мы хотим преобразовать это в следующий формат:

<Specifications>
<listitem>A/C</listitem> 
<listitem>Anti-lock brakes</listitem>
<listitem>AWD</listitem> 
<listitem>Defrost</listitem>
</Specifications>

В данном случае мы используем:

<xsl:template match="dxl:textlist">
	<xsl:for-each select="./dxl:text">
		<xsl:element name="listitem">
			<xsl:apply-templates select="text()" />
		</xsl:element>
	</xsl:for-each>
</xsl:template>

Отображение данных в 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 строки запроса следующим образом:

http://localhost:9080/ArticleWeb/dispxmlcar.jsp?vin=[vin number]

После нажатия клавиши Enter вы увидите результат.

Рис. 5. Предварительный просмотр полученного HTML

JSP-страницы и преобразователь

Dispxmlcar.jsp обеспечивает базовую HTML-конструкцию. Здесь вы могли бы установить заголовок вашей компании и навигацию. В середине находятся <jsp:include> для dispxmltable.jsp. Это - JSP-страница, отображающая среднюю таблицу, в которой содержатся данные об автомобилях.

Dispxmltable.jsp
<%@page import="java.io.*,java.util.*, java.net.*, com.ibm.alphaworks.utils.xml.*" %>
<%
String vin = request.getParameter("vin");
String xml = "c:\\article\\xml\\" + vin + ".xml";
String xsl = "c:\\article\\xsl\\TransformHTML.xsl";

aWTransformer at = new aWTransformer();
at.setXmlin(xml);
at.setXslin(xsl);
at.setWriter(response.getWriter());
at.doTransform();
%>

Она использует параметр vin в качестве ключа для обнаружения XML-документа в каталоге C:\article\xml\. Путь к XSL-документу, TransformHTML.xsl, закодирован жестко.

ПРИМЕЧАНИЕ: Существуют более совершенные способы сохранения и извлечения ваших XML или XSL-документов. Один из популярных методов - использовать реляционную базу данных (например, DB2) для хранения XML в виде полей CLOB (Character Large Object). Для того чтобы не слишком усложнять эту статью, мы используем файловую систему.

Реальное преобразование управляется классом, называемым aWTransformer. Этот класс основан на примере класса-преобразователя Xalan и по большей части не должен потребовать от вас какой-либо дальнейшей разработки.

В dispxmltable.jsp нет HTML-кода. HTML-таблица генерируется на основе конструкции в таблице стилей TransformHTML.xsl. Это позволяет иметь большую гибкость:

  • Абстрагируется код представления от кода преобразования.
  • Представление данных может быть изменено при помощи XSLT независимо от JSP-страницы.
  • Один и тот же Java-код может быть использован для множества различных XML-данных и схем презентации.

Это приложение работает также и на других серверах J2EE-приложений.

Заключение

Lotus Domino предоставляет разработчикам много программ и инструментальных средств для интеграции. В данной статье мы рассмотрели использование DxlExporter для генерирования DXL-документов, способы преобразования их в имеющие смысл XML-файлы и способы отображения их как JSP-страниц в WebSphere. Во второй статье мы подробно рассмотрим использование библиотек тегов Domino для создания динамических JSP-страниц.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=2685