OpenNTF Domino API
OpenNTF Domino API (сокращённо ODA) — это открытый программный интерфейс прикладного программирования (API) для платформы IBM HCL Domino (ранее Lotus Notes/Domino), предоставляющий разработчикам современный, объектно-ориентированный способ взаимодействия с базами данных Domino, документами, представлениями и другими элементами платформы. ODA разрабатывается и поддерживается сообществом OpenNTF (некоммерческая организация, занимающаяся развитием открытого программного обеспечения для платформы Domino) и распространяется под лицензией Apache 2.0.
История
Предпосылки создания
Платформа IBM Domino (ранее Lotus Notes) долгое время использовала встроенные языки программирования: LotusScript (схожий с Visual Basic) и формульный язык (Formula Language). Эти языки, хотя и были функциональны, имели ограничения: отсутствие поддержки современных парадигм объектно-ориентированного программирования, слабая интеграция с внешними системами, сложность написания модульных и тестируемых приложений. С появлением Java-сторонних библиотек (например, для работы с XML, JSON, REST) возникла потребность в более гибком API, который бы позволял использовать эти возможности в среде Domino.
Разработка и релизы
Проект OpenNTF Domino API был начат в 2013 году группой разработчиков сообщества OpenNTF, в которую входили такие специалисты, как Пол Уизерс (Paul Withers), Джесси Галлахер (Jesse Gallagher) и другие. Первая стабильная версия (v1.0) вышла в 2014 году. API быстро завоевал популярность благодаря своей простоте и возможности использовать Java 8+ (включая лямбда-выражения, потоки, функциональные интерфейсы) для работы с Domino.
В 2016 году вышла версия 1.1, добавившая поддержку работы с представлениями (views) и полнотекстовым поиском. В 2018 году — версия 1.2, которая включала улучшенную поддержку REST API и интеграцию с HCL Domino (после приобретения HCL Technologies части продуктов IBM в 2018 году). В 2020 году вышла версия 1.3, добавившая поддержку работы с ACL (Access Control List) и настройками безопасности. Последняя стабильная версия на момент написания статьи — 1.4 (2023 год), которая включает поддержку Java 11 и улучшенную работу с JSON.
Архитектура и принципы работы
Основные компоненты
ODA построен на основе паттерна «Фабрика» (Factory). Вместо прямого создания объектов (например, new Document()) разработчик использует фабричные методы, которые возвращают экземпляры классов, реализующих интерфейсы ODA. Это позволяет абстрагироваться от внутренних механизмов Domino и обеспечивает единообразный доступ к данным.
Основные пакеты ODA:
org.openntf.domino— содержит основные интерфейсы, аналогичные классам Domino (Database, Document, View, Session и т.д.).org.openntf.domino.utils— утилиты для работы с коллекциями, строками, датами.org.openntf.domino.ext— расширения, добавляющие дополнительные методы (например,getDocumentByKey()с поддержкой лямбда-выражений).
Отличия от стандартного API Domino
Стандартный API Domino (через lotus.domino.*) требует ручного управления сессиями, базами данных и документами, а также часто использует громоздкие конструкции (например, циклы для перебора коллекций). ODA предлагает:
- Автоматическое управление ресурсами: объекты ODA автоматически закрываются после использования (через интерфейс
AutoCloseable), что предотвращает утечки памяти. - Функциональный стиль: поддержка потоков (streams), лямбда-выражений и методов
forEach,filter,map. - Улучшенная обработка ошибок: исключения обёрнуты в более информативные классы (например,
DominoException). - Поддержка современных форматов данных: встроенная работа с JSON, XML, REST.
Пример использования
Ниже приведён пример кода на Java, демонстрирующий создание нового документа в базе Domino с помощью ODA:
```java import org.openntf.domino.*; import org.openntf.domino.utils.Factory;
public class ODAExample { public static void main(String[] args) { try (Session session = Factory.getSession()) { Database db = session.getDatabase("", "names.nsf"); Document doc = db.createDocument(); doc.replaceItemValue("Form", "Person"); doc.replaceItemValue("FirstName", "Иван"); doc.replaceItemValue("LastName", "Петров"); doc.save(); System.out.println("Документ создан с ID: " + doc.getUniversalID()); } catch (DominoException e) { e.printStackTrace(); } } } ```
Возможности и функциональность
Работа с документами
ODA предоставляет методы для создания, чтения, обновления и удаления документов. Поддерживаются все типы полей Domino: текстовые, числовые, даты, Rich Text, вложения. Для работы с Rich Text используется класс RichTextItem, который позволяет форматировать текст, вставлять изображения и таблицы.
Работа с представлениями
API позволяет получать документы из представлений с помощью методов getAllDocumentsByKey() или getDocumentByKey(). Поддерживается фильтрация по категориям и сортировка. Пример:
``java View view = db.getView("ByLastName"); DocumentCollection docs = view.getAllDocumentsByKey("Петров"); docs.forEach(doc -> System.out.println(doc.getItemValueString("FirstName"))); ``
Работа с базами данных
ODA поддерживает создание, открытие, удаление и репликацию баз данных. Метод getDatabase() может принимать путь к файлу или URL сервера. Также есть возможность работы с ACL (Access Control List) — добавление/удаление пользователей, изменение уровней доступа.
Интеграция с REST
ODA включает встроенную поддержку REST API через библиотеку org.openntf.domino.rest. Это позволяет создавать REST-сервисы на основе Domino, которые могут быть вызваны из внешних приложений (например, веб-приложений или мобильных клиентов). REST-сервисы поддерживают форматы JSON и XML.
Работа с JSON
ODA предоставляет класс JsonParser для парсинга и генерации JSON. Это упрощает интеграцию с современными веб-сервисами и микросервисной архитектурой.
Применение
Разработка приложений на Domino
ODA используется для создания новых приложений на платформе Domino, а также для модернизации существующих. Разработчики могут писать код на Java (включая Java EE), что упрощает интеграцию с другими системами (например, базами данных SQL, веб-сервисами, системами управления контентом).
Миграция с LotusScript на Java
Многие организации, использующие Domino, стремятся перейти с LotusScript на Java из-за лучшей производительности, поддержки современных стандартов и доступности разработчиков. ODA упрощает этот процесс, предоставляя знакомый интерфейс (например, методы getItemValueString() аналогичны LotusScript).
Интеграция с внешними системами
ODA позволяет использовать Domino в качестве бэкенда для веб-приложений, мобильных приложений и корпоративных систем. Например, можно создать REST-сервис на ODA, который будет обрабатывать запросы от веб-фронтенда на React или Angular.
Преимущества и недостатки
Преимущества
- Современный API: поддержка Java 8+, лямбда-выражений, потоков.
- Автоматическое управление ресурсами: снижает риск утечек памяти.
- Открытый исходный код: возможность модификации и расширения.
- Активное сообщество: регулярные обновления, документация, форумы.
- Совместимость с HCL Domino: работает на всех поддерживаемых версиях (начиная с 9.0.1).
Недостатки
- Зависимость от Java: требует наличия Java Runtime Environment (JRE) на сервере Domino.
- Сложность для новичков: требует знания Java и объектно-ориентированного программирования.
- Ограниченная поддержка некоторых функций Domino: например, работа с агентами (agents) или скриптами на стороне клиента (LotusScript) не полностью покрыта.
- Производительность: в некоторых сценариях (например, при массовой обработке документов) ODA может быть медленнее, чем оптимизированный LotusScript.
Сравнение с другими API
LotusScript
LotusScript — встроенный язык Domino, который не требует дополнительных библиотек. Он проще для изучения, но менее гибок и не поддерживает современные парадигмы программирования. ODA предоставляет более мощные возможности для работы с коллекциями и интеграции с внешними системами.
Formula Language
Formula Language — декларативный язык, используемый для простых операций (например, вычисление полей, фильтрация). Он не подходит для сложной логики, в отличие от ODA.
Java API Domino (стандартный)
Стандартный Java API Domino (пакет lotus.domino.*) является официальным, но устаревшим. Он не поддерживает автоматическое управление ресурсами и требует ручного закрытия объектов. ODA является надстройкой над этим API, упрощая его использование.
Будущее проекта
OpenNTF Domino API продолжает развиваться. В планах сообщества — поддержка Java 17, улучшенная работа с NoSQL-базами данных, интеграция с облачными платформами (например, Amazon Web Services, Microsoft Azure). Также ведётся работа над созданием версии для HCL Domino 12 и выше.
Источники
- OpenNTF Domino API Documentation (официальная документация проекта)
- OpenNTF Domino API GitHub Repository (исходный код и примеры)
- HCL Domino Developer Documentation (официальная документация HCL)
- Статьи на сайте OpenNTF.org (блог сообщества)
- Книга «Mastering XPages» (автор: Paul Withers) — содержит разделы по ODA
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →