Атомарными литеральными типами в Cache' являются традиционные скалярные типы данных (%String, %Integer, %Float, %Date и др.). В Cache' реализованы две структуры классов типов данных - список и массив. Каждый литерал уникально идентифицируется индексом в массиве и порядковым номером в списке.


Рис.2. Объектная модель Cache'

Различают два подтипа классов объектов - зарегистрированные и незарегистрированные. Зарегистрированные классы обладают предопределенным поведением, т. е. набором методов, наследуемых из системного класса %RegisteredObject и отвечающих за создание новых объектов и за управление размещением объектов в памяти. Незарегистрированные классы не обладают предопределенным поведением, разработка функций (методов) класса целиком и полностью возлагается на разработчика.

Зарегистрированные классы могут быть двух типов - встраиваемые и хранимые. Встраиваемые классы наследуют свое поведение от системного класса %SerialObject. Основной особенностью хранения встраиваемого класса является то, что объекты встраиваемых классов существуют в памяти как независимые экземпляры, однако могут быть сохранены в базе данных, только будучи встроены в другой класс.

Основным преимуществом использования встроенных классов является минимум издержек, связанных с возможным в будущем изменением набора одинаковых свойств классов, представленных в виде встраиваемого объекта.

Хранимые классы наследуют свое поведение от системного класса %Persistent. %Persistent предоставляет обширный набор функций своим наследникам, включающий: создание объекта, подкачку объекта из БД в память, удаление объекта и т. п. Каждый экземпляр хранимого класса имеет 2 уникальных идентификатора - OID и OREF. OID (object ID) характеризует объект, записанный в БД, т. е. на физическом носителе, а OREF (object reference) характеризует объект, который был подкачен из БД и находится в памяти.

НЕ нашли? Не то? Что вы ищете?

Объектная модель Cache' в полном объеме поддерживает все основные концепции объектной технологии:

·  Наследование. Объектная модель Cache' позволяет наследовать классы от произвольного количества родительских классов.

·  Полиморфизм. Объектная модель Cache' позволяет создавать приложения целиком и полностью независимыми от внутренней реализации методов объекта.

·  Инкапсуляция. Объектная модель Cache' обеспечивает сокрытие отдельных деталей внутреннего устройства классов от внешних по отношению к нему объектов или пользователей. Разделяют интерфейсную часть класса и конкретную реализацию. Интерфейсная часть необходима для взаимодействия с любыми другими объектами. Реализация же скрывает особенности реализации класса, т. е. все, что не относиться к интерфейсной части.

·  Хранимость. Система Cache' поддерживает несколько видов хранения объектов: автоматическое хранение в многомерной базе данных Cache'; хранение в любых структурах, определенных пользователем; хранение в таблицах внешних реляционных баз данных, доступных через шлюз Cache' SQL Gateway.

Класс объектов в Cache' хранится в двух формах:

·  Описательная форма. Поддерживается развитый язык описания классов объектов - CDL (class definition language). В версии Cache' 4.2. планируется обеспечить поддержку языков UDL (unified definition language) и XML (extensible markup language).

·  Объектная run-time форма. Использование класса возможно только после его компиляции в объектный код.

Сервер Cache' SQL

СУБД Cache' является уникальной системой. Наряду с реализацией в полном объеме основных принципов объектной технологии в СУБД Cache' поддерживается также структурированный язык запросов SQL для обеспечения выполнения запросов по стандарту, поддерживаемому многими инструментальными средствами. Кроме этого, с помощью единой архитектуры данных Cache' возможно автоматическое преобразование реляционных таблиц в классы объектов. При этом, при поступлении на сервер Cache' SQL DDL-описания реляционной таблицы Cache' автоматически преобразует DDL-описание во внутреннюю структуру хранения данных и сохраняет полученную структуру в словаре данных. Затем с помощью поставляемых в стандартной комплектации Java - или ODBC - драйверов производится импорт данных из реляционных таблиц в многомерные структуры ядра Cache'. После чего Cache' предоставляет возможность работы с данными, как в виде реляционных таблиц, так и в виде классов объектов. Таким образом, при переходе с реляционной технологии на объектную технологию разработка не начинается с "нуля" - многое уже сделано Cache' автоматически.

Классы Cache' также могут быть представлены в виде реляционных таблиц, причем соотношение между разнообразными понятиями объектного и реляционного подходов представлены ниже:

Объектное понятие

Реляционное понятие

Класс

Таблица

Экземпляр

Строка

Идентификатор объекта (OID)

ID-столбец в виде первичного ключа

Свойство-константа

Столбец

Ссылка на хранимый объект

Внешний ключ

Встраиваемый объект

Индивидуальные столбцы

Коллекция-список

Столбец с полем-списком

Коллекция-массив

Подтаблица

Поток данных

BLOB

Индекс

Индекс

Запрос

Хранимая процедура или представление

Метод класса

Хранимая процедура

Отметим, что в таблице не обозначены понятия параметров класса, многомерных свойств и методов объекта, так как в реляционной технологии им нет аналогов. Дополнительно к объектным понятиям в Cache' поддерживаются еще и триггеры, присутствующие в реляционном представлении.

Доступ к данным с использованием языка SQL продолжает играть важную роль, т. к. многие существующие приложения и инструменты используют SQL в качестве языка запросов. СУБД Cache' поддерживает все элементы ANSI-стандартов, реализованных для SQL и SQL-92.

Для облегчения разработки прикладных систем баз данных, Cache' поддерживает встраивание SQL в методы и программы. Встроенный SQL может быть использован для решения следующих задач:

·  Реализации сложных запросов к базам данных

·  Представления полученных результатов запросов в качестве значений переменных встроенного языка разработки приложений Cache' Object Script (COS).

Пример использования встроенного SQL запроса:

new id, Surname

set Surname="Ivanov"

&sql(SELECT Id into :id FROM Person where Surname=:Surname)

Приведенный код ищет по полю Surname таблицы Person поле со значением Ivanov и сохраняет найденный OID объекта в локальной переменной id. Пример демонстрирует случай использования встроенного SQL-запроса, не основанного на курсоре. В данном случае запрос всегда возвращает только одну строку.

Если же необходимо получить несколько строк из результирующей выборки запроса необходимо использовать SQL, основанный на курсоре. Курсор в данном случае является указателем на одну строку и при проведении операции FETCH курсор передвигается к следующей строке.

Использование курсора предполагает выполнение следующей последовательности операций:

·  Объявление курсора;

·  Открытие курсора;

·  Проведение серий операций чтения (FETCH) для курсора;

·  Закрытие курсора.

Пример использование курсора в SQL-запросах:

&sql(DECLARE PersCur CURSOR

FOR SELECT Surname, DateOfBirth

FROM Person,

WHERE Surname="Ivanov")

&sql(OPEN PersCur)

&sql(FETCH PersCur INTO :surname, :DateOB)

&sql(CLOSE PersCur)

В приведенном примере создается курсор PersCur на SQL-запрос SELECT, после чего определенный курсор открывается, а затем с помощью команды FETCH производится последовательное сканирование результатов выборки и в локальных переменных surname и DateOB сохраняются соответствующие значения полей Surname и DateOfBirth таблицы Person. После этого курсор закрывается.

Сервер прямого доступа к данным Cache' Direct.

С помощью сервера Cache' Direct разработчик получает доступ к многомерным структурам ядра системы. Встроенный в СУБД Cache' язык программирования COS предоставляет ряд функций для работы с массивами данных или глобалями, составляющими ядро системы. Использование прямого доступа к данным позволяет оптимизировать время доступа к данным. Для прямого доступа и работы с многомерными структурами ядра системы можно воспользоваться утилитой эмуляции ASCII-терминала Cache' Terminal, которая обычно используется для целей обучения языку COS и тестирования работы терминального приложения (рис.3).


Рис.3. Cache' Terminal

Средства администрирования Cache'

В стандартной поставке системы разработчику предлагается два средства администрирования Cache':

·  Configuration Manager

·  Control Panel.

С помощью Configuration Manager можно выполнить следующие функции администрирования:

·  Создать новую БД, удалить или изменить настройки существующей БД. С точки зрения физического хранения, БД Cache' - это бинарный файл Cache'.DAT. Для каждой БД создается свой файл Cache'.DAT в отдельной директории.

·  Определить область (Namespace) для существующей БД, под которой в Cache' понимается логическая карта, на которой указаны имена многомерных массивов - глобалей и программ файла Cache'.DAT, включая имена каталога-директории и сервера данных для этого файла. При обращении к глобалям используется имя области.

·  Определить CSP-приложение. Для использования CSP-приложений необходимо определить виртуальную директорию на web-сервере, физическую директорию хранения CSP-приложений, а также несколько специфических для CSP настроек, таких как, к примеру, класс-предок для CSP приложений (по умолчанию принимается системный класс %CSP. Page).

·  Определить сетевое окружение Cache'. В Cache' реализован собственный протокол работы с сетью распределенного окружения БД, носящий название DCP (Distributed Cache' Protocol). С помощью интерфейсов Configuration Manager можно определить источники данных в сети, а также определить связи между различными компонентами сети.

·  Настройка системы Cache'. Разработчику предоставляется возможность конфигурирования различных компонент Cache', таких как параметры журналирования, настройки теневых серверов, параметры сервера лицензий, параметры Cache'-процессов и другие.

Утилита Control Panel предоставляет схожий набор функций администрирования и добавляет следующие новые:

·  Управление процессами Cache'.

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

·  Определение пользователей системы с присваиванием им имени пользователя, пароля и определение параметров доступа.

·  Просмотр файлов журнала. Журналирование в Cache' выполняется на уровне глобалей.

·  Определение теневых серверов системы.

·  Создание резервных копий баз данных.

Инструментальные средства разработки приложений в СУБД Cache'

В СУБД Cache' реализован собственный язык программирования Cache' Object Script (COS). COS - это расширенная и переработанная версия языка программирования M (ANSI MUMPS).

В первую очередь, COS предназначен для написания исходного кода методов класса. Кроме этого, в Cache' вводится понятие Cache'-программы. Cache'-программа не является составной частью классов и предназначена для написания прикладного программного обеспечения для текстовых терминальных систем.

Для создания Cache'-программ и классов Cache' предназначены утилиты Cache' Studio и Cache' Architect.

С помощью утилиты Cache' Studio можно создавать Cache'-программы. Внешний вид утилиты приведен на рис.4. Для удобства пользователя в Cache' Studio реализована контекстная подцветка команд, функций и операторов COS.

Рис.4. Cache' Studio.

Рис.5. Cache' Architect.

Утилита Cache' Architect предназначена для работы с классами Cache'. Разработчику предоставляется ряд мастеров (wizard), для создания новых и редактирования параметров существующих классов, методов, свойств и др. компонент классов Cache'. Внешний вид утилиты Cache' Architect приведен на рис.5.

Для доступа к многомерным структурам ядра СУБД Cache' можно воспользоваться утилитой Cache' Explorer. Утилита Cache' Explorer предоставляет ряд интерфейсов для просмотра, импорта/экспорта, печати на принтер и др. глобалей, классов Cache', программ Cache'. Внешний вид утилиты приведен на рис. 6.

Рис.6. Cache' Explorer.

Cache' Server Pages (CSP).

Основой концепции серверных страниц Cache' является автоматическое создание по запросу пользователя web-страниц, содержащих требуемую информацию из БД Cache'. Как видно из рис.7, вся бизнес-логика CSP-приложений выполняется в непосредственной близости к хранилищу данных Cache', таким образом сокращается объем данных, которыми обмениваются web-сервер и сервер БД Cache', что приводит к выигрышу в производительности по сравнению с другими технологиями создания web-приложений. Для еще большего увеличения производительности CSP приложений при обмене данными между сервером Cache' и web-сервером используются высокоскоростные интерфейсы API.

Рис.7. Сравнение web-технологий.

Серверные страницы Cache' представляют собой текстовые HTML-файлы, расширяемые тегами приложений Cache' (Cache' Application Tags или CATs). Для создания CSP приложений можно воспользоваться стандартными средствами разработки HTML страниц (Cache' предоставляет add-in модуль для полной интеграции с Macromedia DreamWeaver) или, на крайний случай, обыкновенным текстовым редактором.

В Листинге 1 приведен пример небольшого CSP-приложения, которое выводит значения свойств объекта, хранящегося в БД Cache'.

Листинг 1.

<html>

<head></head>

<body>

<script language="Cache'" runat="Server">

set obj=##class(Sample. Person).%OpenId(1)

write obj. Name,"<br>"

write obj. Age,"<br>"

do obj.%Close()

</script>

</body>

</html>

Стандартные теги приложений Cache' приведены в Таблице 1. Однако пользователь не ограничен только стандартными тегами. Cache' предоставляет также интерфейсы для создания пользовательских тегов приложений.

Таблица 1. Стандартные теги CSP

Вставка данных:

#(а)#

Вывод значения переменной/функции/метода

##(a)##

тоже, но во время компиляции

Управление

<CSP:IF CONDITION='a=1'>

<b>Unautorized!!!</b>

</CSP:IF>

Условие

<CSP:WHILE …>

<CSP:LOOP …>

Циклы

Использование Cache' Script

<SCRIPT Language="Cache'"

RUNAT="Server/Compiler">

….

</SCRIPT>

Скрипт внутри страницы

<SCRIPT Method=methodName

Arguments=spec [ReturnType=dataType]>Inner

Text</SCRIPT>

Метод CSP класса

Запросы к БД

<CSP:QUERY …>

<CSP:SEARCH …>

<SCRIPT LANGUAGE="SQL" …>

Запрос класса
Поисковая форма
SQL-запрос

Привязка объекта к форме

<CSP:OBJECT …>

<FORM CspBind="obj" …>

<INPUT CspBind="obj. Name" …>

Открытие объекта
Привязка объекта к форме
Привязка свойства к полю

Управление параметрами класса

<CSP:CLASS [Encoded=encodedType]

[Private=accessType]

[Super=classList] …>

Определение родительских классов, режима шифрования и пр.

При открытии CSP-страницы в браузере Cache' автоматически преобразует CSP-страницу в класс Cache' (по умолчанию классом-предком для CSP-классов является системный класс %CSP. Page). CSP-класс - это не просто способ представления кода. Это отражение полноценной объектной модели CSP-приложения. Т. е. можно использовать все преимущества объектного подхода к разработке при работе с CSP, такие как наследование и полиморфизм.

После преобразования CSP-страницы в класс Cache' класс можно редактировать, используя возможности Object Architect, например, возможность контекстной подцветки кода методов.

Для изучения CSP можно воспользоваться примерами, поставляемыми в стандартной комплектации Cache'. Для этого необходимо установить Cache' и в браузере обратиться по адресу http://127.0.0.1:1972/csp/samples/menu. csp:

Использование классов %Net. SMTP и %Net. POP3 для отправки и приема электронной почты.

С помощью классов %Net. SMTP и %Net. POP3 системной библиотеки %Net, поставляемой в стандартной конфигурации, можно реализовать функции отправки и приема электронных писем на базе СУБД Cache'.

В Листинге 2 приведена Cache'-программа, с помощью которой реализуется отправка электронного письма с прикрепленным графическим файлом (test. jpg) по протоколу SMTP.

Листинг 2.

set s=##class(%Net. SMTP).%New()

set s. smtpserver="SMTP. mail. ru"

set s. timezone="-0400"

set m=##class(%Net. MailMessage).%New()

set m. From="*****@***com"

do m. To. Insert("*****@***com")

set m. Subject="Sent by Cache'' mail"

set m. Charset="iso-8859-1"

do m. TextData. Write("This is the main body.")

do m. TextData. Write($char(13,10))

do m. TextData. Write("This is the second line.")

do m. TextData. Write($char(13,10))

set status=m. AttachFile("c:\winnt","test. jpg")

set status=s. Send(m)

do m.%Close()

do s.%Close()

quit

Класс %Net. SMTP поддерживает также отправку сборных (multi-part) электронных писем.

Для реализации функции приема электронных писем можно воспользоваться системным классом %Net. POP3. В листинге 3 приведен пример использования класса %Net. POP3.

Листинг 3.

new mailserver, status, from, to, date, subject, messagesize, m,hdrs, key, mailMsg

set mailserver=##class(%Net. POP3).%New()

set mailserver. AttachDir="d:\attach\" ; need terminating \

set mailserver. Debug=0

set mailserver. StoreAttachToFile=1

write!,"Calling Connect"

set status=mailserver. Connect("moon. ","testjsl","jsltest")

write!,"Calling FetchMessage"

set status=mailserver. FetchMessage(13,.from,.to,.date,

.subject,.messagesize,.hdrs,.mailMsg,0)

write!,"from="_from

write!,"to="_to

write!,"date="_date

write!,"subject="_subject

write!,"messagesize="_messagesize

write!,"Closing mailserver="_mailserver.%Close()

write!,"Closing mailMsg="_mailMsg.%Close()

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4