Notes & Domino 7 Новые возможности для разработки приложений Владимир Панов О чем будет рассказано... Domino Designer 7: изменения в интерфейсе, новые функции и возможности Новые элементы дизайна приложений LotusScript, @-функции, Java, C/С++ Web-сервисы NSFDB2 – новая подсистема хранения данных Domino в базах DB2 Интеграция «толстых» клиентов (Notes и Workplace) И другие, еще более интересные вещи… Domino Designer 7.0 Изменен список элементов дизайна Более удобное представление информации Редактирование «по месту» названия и комментария Сортируемая колонка «Комментарий» Кнопка «Sign» в списках агентов, web-сервисов и библиотек Кнопка/индикатор в тулбаре, управляющая LS-отладчиком Новые функции для разработчика приложений Java-отладчик для агентов, web-сервисов и библиотек (интеграция с внешней Java IDE, например, Eclipse) Профилирование операций с Notes-объектами в LotusScript- и Java-агентах Сравнить с TeamStudio Profiler Новое в элементах дизайна Представления и папки: Для работы с DB2 (подробнее дальше) Shared-колонки (как отдельные элементы дизайна) Right-click – меню DB2 Query View DB2 Access View Web-сервисы Shared-колонки Right-click – меню Определяемые разработчиком View или Folder действия, запускаемые через меню правой кнопкой мыши Программирование Java 1.4.2 Несколько новых методов и свойств в Notes-классах Несколько новых @-функций NotesDatabase.GetModifiedDocuments NotesDocumentCollection.UntilTime NotesDOM... @DB2Schema, @IsDB2, @IsEmbeddedInsideWCT, ... Notes C API DB2 Support Functions NSFDbStampNotesMultiItem Encryption/decryption APIs http://www-128.ibm.com/developerworks/lotus/library/nd7-security-api/ LotusScript: Практически ничего нового Web-Сервисы Новая возможность для интеграции на базе стандартов: SOAP 1.1, WSDL 1.1 Это можно делать и до 7-й версии, но «вручную» Пока только в одну сторону: Domino выступает как провайдер (host) Новый элемент дизайна – Web Service, развитие webагентов Designer 7 обслуживает разработку Задача Http – обеспечивает выполнение Программный код (на LotusScript или Java) автоматически синхронизируется с WSDL-описанием сервиса Web-Сервисы Security Advan ced Web-Сервисы Show WSDL Web Services При импорте WSDLфайла автоматически создается необходимая структура классов При изменении кода WSDL-интерфейс сервиса обновляется Web-Сервисы К web-сервисам применимы все правила безопасности web-агентов Вызов сервиса (HTTP Post): http://host/busytimews.nsf/busytimelookup?OpenWebService Получение WSDL-документа, описывающего интерфейс сервиса (HTTP Get): http://host/busytimews.nsf/busytimelookup?WSDL NSFDB2 NSFDB2 в Domino 7 – результат нескольких лет работы Lotus и IBM над проектом с кодовым названием «Mission IMPOSSIBLE» NSFDB2: Что это такое Альтернативная подсистема хранения данных Domino, использующая возможности DB2 8.2 вместо обычной файловой системы Это не замена для традиционной NSF. Они могут сосуществовать на одном сервере Domino, одни базы в обычных nsf-файлах, от других остаются файлы размером 5 байт с текстом {DB2}. По заверениям IBM традиционная NSF не будет «забыта», более того, она продолжает совершенствоваться NSFDB2: Конфигурации серверов NSFDB2: Цели проекта Функциональная прозрачность для пользователей и совместимость для традиционных приложений Простые инструменты администрирования Новая функциональность, основанная на применении реляционных технологий DB2 Query View DB2 Access View Инструменты сторонних разработчиков, например, для Backup Производительность НЕ была целью для 7.0 ! NSFDB2: Архитектура Domino7 NSFDB2: Архитектура Domino7 Граница проведена на очень низком уровне Обеспечивается API-совместимость Все сервисы Domino работают без модификаций Проводимая оптимизация влияет на все приложения Domino NSFDB2: Структура данных Для каждой базы Domino в DB2 создается своя «схема», содержащая один и тот же набор таблиц (см.дальше). Название схемы соответствует имени файла NSF: I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I3,I2 I2 VIEWID COLLATION NOTEID UNID REFUNID BRANCH SUBTREE SUMTYPE SUMMARY S1 HASSUBCATEGORY MODIFIED BIGSUMMARY HUGESUMMARY SUBTOTALTYPE SUBTOTALS HUGESUBTOTALS MARKERNO WINDOWSIZE S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 D12 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 UAVID NSFNOTE DB2MAP NIFDATA OWNER NOTEREF CATEGORY TYPE ACTION NAME COLREF DROPORDER REFNOTE STATUS SQL UAVID NIFCTL PK VIEWID VIEWNAME BRANCH VERSION DESC PLATFORM MARKERSIZE MARKERS UAVID NSFOBJECT PK,U1 NOTEID U1 I2,I1 U1 U1 I3 UNID MODIFIED SEQUENCE SEQTIME FORMUNK ACTIVEDATANOTE GHOST NOPURGE DELETED NOTECLASS ACCESSDEF BODYHDR DATAHDR RESPONSE SUMMARY NONSUMMARY RESPBLOB SUMBLOB NSBLOB UAVID U1 U1 I2,I1 RRV OBJBLOBLEN HEADER OBJBLOB INLINE NOTEID UNID PA FILENAME FILESIZE FILEMOD HOSTTYPE UAVID NSFDATA NOTEID SEQNUM TYPE DATA UAVID PROPERTIES NSFOBJNAM NAME GROUP TEXTPROP STREAMPROP BLOBPROP UAVID NAME NAMESPACE NAMEDOBJENTRY ID DESIGNDATA UAVID NSFDB2: NSFSCHEMA Элементы NSF (Notes Storage Fasility) – документы - не раскладываются полями по отдельным колонкам таблиц. На каждый документ создается одна запись в таблице NSFNOTE, все поля помещаются в «бинарном» виде в несколько колонок типа BLOB NSFSLOT PK MAINDOCS_T SLOTNO CONTENTS #NOTEID I1 I2 #READERS #UNID #MODIFIED CATEGORIES SUBJECT FROM Элементы NIF (Notes Storage Fasility) – индексы представлений и папок. Колонки индексов раскладываются по отдельным колонкам таблицы NIFDATA, содержащей индексы всех представлений базы Domino. Запись в таблице NIFDATA = «строка» представления (ViewEntry) NSFDB2: DB2 Access View DAV – определяемое разработчиком DB2-view, обеспечивающее «внешний» (из любых приложений DB2) доступ к определенным записям (документам) Domino NSFDB2: DB2 Access View DB2 Access View (DAV) – элемент дизайна, определяющий, какие поля из каких документов базы должны быть представлены в колонках соответствующей таблицы в базе DB2 Могут быть выбраны все документы базы или документы определенной формы Спец.колонки #NoteId, #UNID, #Modified Поддерживаются типы данных: Text, Text List, Time, Number Multi-value – поля преобразуются в текст с заданным разделителем NSFDB2: DB2 Access View Обращаясь к DAV с помощью SQL, можно: Читать Notes-данные с учетом прав доступа к базам и документам. Domino участвует в определении прав доступа. Чтение выполняется быстро, так как обрабатывается самой DB2. Добавлять, модифицировать и удалять записи. Такие операции транслируются в запросы к Domino, чтобы решить проблемы конфликтов, блокировок и т.п. Однако, транзакции Domino по-прежнему поддерживает только на уровне отдельного документа NSFDB2: DB2 Query View DB2 Query View (DQV) - «обычное» view, но вместо @-формулы отбора задается SQL-запрос (тоже SELECT, но совсем другой). Поля получаемой по запросу таблицы могут использоваться в формулах колонок вида. SQL-запрос выполняется каждый раз при открытии вида пользователем или приложением, Domino не хранит индекс, как для обычных view Текст SQL-запроса задается @формулой, которая вычисляется при открытии QueryView, => можно передавать параметры, зависящие от пользователя, настроек, данных SQL-запрос выполняется DB2 – одной из самых современных РСУБД. Возможности почти безграничны. Примеры далее... NSFDB2: DB2 Query View Возможности применения Доступ к DB2 Access View в текущей базе Domino. Если в SELECT присутствует колонка #NoteId, документы даже открываются. Имеет смысл, если требуется «join» с другими данными или еще какие-нибудь операции, выполняемые DB2 лучше, чем Domino Доступ сразу ко многим базам Domino Доступ к «обычным» базам DB2, в том числе «федеративный» DB2 Enterprise включает средства для подключения других баз, например, Oracle, MSSQL, ..., можно добраться и до них Можно использовать функции DB2 XML-Extender, получая данные в том xmlформате, который нужен, например, web-приложению. Вероятно, можно использовать и другие «расширители», например, TextExtender – можно выполнять полнотекстовые запросы по данным в DB2 Рекурсивные SQL-запросы позволяют оперировать с иерархией произвольной «глубины», таким образом, можно представить и обработать в DB2 иерархию ответных документов NSFDB2: Пример DB2 QueryView На рисунке - структура данных примерной базы, входящей в комплект DB2. Если построить аналогичное Notes-приложение традиционным способом, не обойтись без дублирования данных. Например, в документе Employee просто необходимо поле DeptName. Применение DAV+QV позволит этого избежать EMP_RESUME PK PK DEPARTMENT EMPNO RESUME_FORMAT RESUME EMP_PHOTO PK PK EMPLOYEE EMPNO PHOTO_FORMAT PICTURE EMPNO FIRSTNME MIDINIT LASTNAME WORKDEPT PHONENO HIREDATE JOB EDLEVEL SEX BIRTHDATE SALARY BONUS COMM DEPTNO DEPTNAME MGRNO ADMRDEPT LOCATION PROJECT EMP_ACT PROJNO PROJNAME DEPTNO RESPEMP PRSTAFF PRSTDATE PRENDATE MAJPROJ EMPNO PROJNO ACTNO EMPTIME EMSTDATE EMENDATE NSFDB2: …Пример DB2 QueryView SQL-запрос для QueryView, в котором можно сгруппировать сотрудников по подразделениям (достаточно указать DEPTNAME в категоризованной колонке): Select e.EMPNO, e.FirstNme ||' '|| e.LastName as NAME, e.PHONENO, e.SALARY, d.DEPTNAME from DB2ADMIN.SAMPLE_EMPLOYEE As e, DB2ADMIN.SAMPLE_DEPARTMENT As d where e.WORKDEPT = d.DEPTNO SQL-запрос для QueryView, в котором, наоборот, показываются только подразделения, но для каждого вычисляется суммарная зарплата сотрудников: Select d.DEPTNAME, sum(e.SALARY) as SAL_TOTAL from DB2ADMIN.SAMPLE_EMPLOYEE As e, DB2ADMIN.SAMPLE_DEPARTMENT As d where e.WORKDEPT = d.DEPTNO group by d.DEPTNAME NSFDB2: Возможности применения Самая «тесная» интеграция приложений Domino и DB2 «Нормализация» обычных Domino приложений (особенно в сочетании с LEI или DECS) Построение отчетов, которое в Domino всегда было проблемой Идея: Формирование истории изменений Dominoдокументов (триггерами на DAV), затем показ в приложении данных на определенный момент времени в прошлом (с помощью QueryView) NSFDB2: Архитектура ИС Принципы построения архитектуры информационной системы 1. 2. 3. 4. 5. 6. Минимизировать дублирование атрибутивной информации в документах (оставить только то, что необходимо для FT-поиска и управления доступом к документам, так как эти функции работают "по-старому". Минимизировать использование "обычных" view, вместо них создавать DB2 Query View (DQV) с SQL-запросами по таблицам, созданным как DB2 Access View (DAV). Атрибутивные поля документов "опубликовать" в DB2 с помощью DAV. Как правило понадобится по одному DAV на каждую форму (тип документа). Получим дублирование всей атрибутивной информации, но только однократное, а не многократное (и в документах и в индексах представлений), как это обычно бывает. Все необходимые представления реализуются как DQV (пока непонятно, как быть с иерархией респонсов, можно ли ее реализовать в DQV). В формах необходимые данные из других (взаимосвязанных) документов также получаются при открытии с помощью Lookup по представлению типа DQV. Опционально, можно реализовать агенты (бизнес-процедуры), модифицирующие взаимосвязанные документы, как встроенные процедуры (в том числе триггеры). NSFDB2: Архитектура ИС Отрицательные моменты в применении перечисленных выше правил: Ясно, что применение этих правил в полном объеме к существующей системе потребует почти полной ее переделки. Такая система вообще не будет работать в NSF-варианте, то есть, например, не будет работать локально. NSFDB2: Чего НЕТ в 7.0 Нет официального релиза!!! NSFDB2 пока может использоваться только в опытном режиме Также отсутствуют: NSF”Oracle”, NSF”MSSQL”,… Fast Replication (репликация в пределах кластера на уровне файловой системы) Локальное шифрование баз (локально для сервера) Shared Mail, IMAP4, LOG.NSF (нельзя разместить в DB2) Максимум - две интернациональных последовательности сортировки одновременно (в NSF до 256) Полнотекстовый индекс пока создается и используется постарому (в файловой системе) Не все платформы поддерживаются, в основном Windows и AIX Производительность не была целью проекта 7.0, … вот она и не достигнута! Задача HTTP не поддерживает DB2 QueryView NSFDB2 или DECS/LEI? NSFDB2 DECS/LEI SQL QueryView – возможность, которой нет в DECS/LEI Возможность независимого определения структур данных и последующей интеграции Virtual Documents – документы существуют только как записи в прикладной базе DB2 заданной структуры Вывод: и в NSFDB2 и в DECS/LEI есть свои уникальные фичи. Поэтому целесообразно использовать сочетание NSFDB2 и DECS/LEI NSFDB2: Кому все это надо? Если в вашей организации уже используется система на основе DB2 Если вам нужно решать задачи, перечисленные ранее Если разработчики имеют опыт работы с SQL Если использование инструментов администрирования DB2 имеет конкретные преимущества для вашей организации Кое-что еще… Более высокая производительность Domino 7: Миф или реальность? Интеграция Notes 7 и Workplace Rich Client Что дальше? Будет ли жизнь после Производительность Domino 7: Миф или реальность? IBM: Domino 7 использует CPU на 15-50% меньше, чем Domino 6 Domino 7 поддерживает на 50% больше пользователей на той же платформе Примечание: в тестах учитывалась только работа пользователей с почтовой системой (много «небольших» баз единоличного пользования) Информация общедоступна: • http://www-128.ibm.com/developerworks/lotus/library/nd7-perform/ • http://www.NotesBench.Org/ Производительность Domino 7: Миф или реальность? ИнтерТраст: (по результатам нагрузочного тестирования CompanyMedia 3.1) База СМ-ВнД объемом 9ГБ содержит 800тыс.док, с ней одновременно работают несколько сотен пользователей При равных условиях Domino 7 больше грузит CPU, чем D6 Однако, при некотором числе Notes-пользователей Domino 6 перестает реагировать на клиентские запросы, даже если ресурсов хватает (для IBM xSeries 366 это примерно 250) Если ресурсов достаточно, Domino 7 может поддерживать в 3 раза больше пользователей, например, когда D6 перестает реагировать на запросы более чем 200 Notes-клиентов, Domino 7 уверенно тянет 600 и не «зависает» даже при 1000! Интеграция «толстых» клиентов (Notes и Workplace) IBM Workplace Rich Client - он же: IBM Workplace Client Technology (WCT) IBM Workplace Managed Client (WMC) «Толстый» клиент - целый программный комплекс, устанавливаемый на рабочей станции и обеспечивающий: Доступ к приложениям Workplace множество общих для разных приложений элементов интерфейса (например, программ редактирования офисных документов) и сервисов, например: локальное хранилище данных (причем, защищенное шифрованием) синхронизацию данных с LWP-сервером автоматическую установку/обновление клиентского ПО с сервера в соответствии с заданными политиками и даже облегченный вариант J2EE - EJB-контейнер, обеспечивающий выполнение в клиенте бизнес-логики приложений, в том числе, в off-line режиме IBM Workplace Rich Client Основа “толстого клиента" Workplace Eclipse Rich Client Platform (RCP), обладающая совершенной открытой архитектурой, и поразительной расширяемостью, заложенной в саму платформу. Она то и позволяет на небольшой основе (объем Eclipse RCP 3.0 RunTime – около 8МБ) создавать очень разные клиентские приложения или достраивать ее новыми слоями технологических компонент, опять таки наследующими возможности расширения и кастомизации от базовой платформы. Одно из интересных «расширений» - Workplace Designer, обеспечивающий визуальную среду разработки J2EE- приложений для Workplace. Другое – Notes-PlugIn. Начиная с версии 7 Notes клиент может запускаться «внутри» Rich-клиента Workplace как его расширение. Rich Client, Notes-PlugIn и Notes-приложения... Начиная с Notes 7.0 и WMC 2.5 один толстый клиент может становиться частью другого На существующие Notesприложения эта замена практически не влияет, поскольку функциональность Notes внутри WMC поддерживается полностью В 2006г. появится такой «сборный» клиент (Notes+WMC) на платформе Linux. Rich Client, Notes и CompanyMedia ...Rich Client, Notes-PlugIn и Notes-приложения В последующих версиях (7.x, 8, 9, …) IBM собирается развивать это направление интеграции Notes и LWP, и со временем для Notes-приложений, работающих в Notes-Plugin внутри WMC, откроются дополнительные функциональные возможности, основанные на интеграции с приложениями и компонентами WMC, разрабатываемыми как IBM, так и другими компаниями. Например, можно будет использовать в Notes встроенные в WMC "офисные" приложения для работы с текстами, электронными таблицами и презентациями Перспективы совместного развития Notes/Domino и Workplace . Вопросы? Владимир Панов panov@intertrust.ru