Технология Java приобретает все большую популярность у разработчиков корпоративных приложений. Во многом это вызвано наличием хорошо продуманного и стандартизированного механизма связи Java-приложений с СУБД, которые, как правило, составляют основу корпоративных вычислительных систем. Интерфейс JDBC (Java Database Connectivity), предложенный компанией Sun для взаимодействия Java-приложений с базами данных, позволяет интегрировать в корпоративные системы элементы Java-технологии. А поскольку сейчас появляется большое количество ориентированных на Java средств быстрой разработки приложений (RAD), то производителям СУБД становится выгодно реализовать не просто универсальный интерфейс JDBC, а специализированный набор Java-классов, которые позволяли бы разработчикам Java-систем использовать все возможности конкретной базы данных. Кроме того, логично было бы воспользоваться элементами технологии Java и для хранения внутренних процедур. Именно так и поступила компания Informix.

Стратегия Informix, провозглашенная на недавно проходившей конференции JavaOne, определяет четыре основных области применения Java в продуктах компании:

  • использование технологий компонентного программирования JavaBeans и Enterprise JavaBeans в базе данных Informix;
  • создание интегрированной Java-машины, позволяющей исполнять компоненты Java внутри базы данных и программировать модули DataBlade на Java;
  • обеспечение взаимодействия внутренних Java-процедур с внешними программами через виртуальный табличный интерфейс - Java Virtual Table Interface (VTI);
  • поддержка стандартных Java-интерфейсов для работы с базами данных - JDBC 2.0 и SQLJ.

Таким образом, компания Informix хочет предоставить разработчикам корпоративных баз данных возможности использования всех преимуществ Java. Многоплатформенность клиентской части поддерживается стандартами JDBC и SQLJ, которые позволяют создавать приложения, не зависящие от используемой базы данных. Поддержка компонентных моделей JavaBeans и Enterprise JavaBeans позволяет писать модули DataBlade с помощью средств быстрой разработки приложений, которыми богата Java, а интеграция Java-машины в базу данных - исполнять такие модули. Интерфейс VTI дает возможность интегрировать в единую систему различные приложения, например такие, как табличный процессор Excel.

Однако все вышесказанное относится лишь к области планов. Сейчас же технологию Java можно использовать совместно с Informix Universal Server в следующих трех случаях:

  • при разработке корпоративных Java-приложений, которые получают информацию из базы данных;
  • при разработке апплетов для оперативного использования базы данных;
  • при разработке модулей DataBlade, интегрированных в базу данных.

Все эти варианты использования Java можно реализовать с помощью прикладных интерфейсов Java API сервера Informix Universal Server. Отличие этого API от стандартных интерфейсов взаимодействия базы данных с Java-приложением, таких как JDBC, состоит в том, что Java API позволяет максимально полно использовать возможности базы данных Informix. Например, с помощью Java API можно расширять набор типов данных, поддерживаемых СУБД, и управлять обработкой исключительных ситуаций в ней. Впрочем, Informix поддерживает и стандартные средства управления базой данных через JDBC-драйвер, который реализован в виде высокоуровневой надстройки над Java API. Итак, рассмотрим этот набор интерфейсов более подробно.

JAVA API

Набор интерфейсов и классов, которые позволяют удаленно взаимодействовать с базой данных Informix, содержится в следующих пяти пакетах:

  • informix.api - общедоступные интерфейсы;
  • informix.api.direct - компоненты для локальной работы с базой данных;
  • informix.api.remote.rmi - набор компонентов для удаленного клиента;
  • informix.api.remote.rmi.server - серверная часть для классов informix.api.remote.rmi;
  • informix.api.builtin - набор классов для использования дополнительных типов данных.

В этих пакетах содержится все необходимое для создания клиентской части приложения, поддержания связи с сервером базы данных и управления работой СУБД. Причем разработчики приложений могут пользоваться не только стандартными типами данных, определенными производителем, но и создавать свои собственные объектные типы.

Java API можно разделить на три основных группы интерфейсов, с помощью которых можно управлять различными элементами базы данных:

  • оперативный интерфейс, который включает методы для установления связи с базой данных, составления запросов и разбора полученных результатов;
  • оболочку данных, которая позволяет программистам работать с данными, полученными от СУБД, как с Java-объектами;
  • дополнительные классы и интерфейсы, дающие возможность эффективно использовать функциональность СУБД, но не входящие ни в оперативный интерфейс, ни в оболочку данных (например, классы обработки исключительных ситуаций).

Оперативный интерфейс дает Java-приложениям доступ к таким объектам базы данных, как связь, курсор, выражения, запросы и другие. Методы этого интерфейса позволяют открыть и закрыть соединение, выявить ошибки, подготовить запрос к базе данных и отослать его, устанавливать курсор и считывать с его помощью определенные наборы данных, записывать и считывать большие объекты. Взаимодействие между Universal Server и Java-приложением выполняется с помощью private-классов, реализующих общедоступные интерфейсы. Это позволяет скрыть от программиста на Java конкретные условия соединения и сделать механизм связи более абстрактным. Разработчику Java-приложения не нужно задумываться о том, с каким сервером работает его программа - удаленным или локальным.

Чтобы установить связь с базой данных Informix, Java-программа должна получить класс Credentials, который содержит информацию о возможных вариантах взаимодействия с базой данных. С помощью этого класса можно либо создать менеджер для чтения или записи больших объектов (объект LargeObjectManager), либо установить связь с базой данных (получить объект Connection). Все остальные операции выполняются через класс Connection.

Классы, входящие в состав оболочки данных, необходимы для обработки результатов, полученных с сервера базы данных. Эти классы позволяют работать с полученной информацией как с Java-объектами, причем для каждого типа данных определены свои методы. Кроме того, с помощью оболочки можно работать и с дополнительными типами данных, которые определяет разработчик модуля DataBlade. Эта часть интерфейсов располагается в пакете informix.api.builtin.

В состав дополнительных классов и интерфейсов входят компоненты для получения метаданных о всей БД в целом, для создания новых объектов и для обработки исключительных ситуаций. Эта группа состоит из интерфейса TypeInfo, позволяющего получить общие сведения о базе данных и ее отдельных элементах; классов Exception, отвечающих за обработку исключительных ситуаций; и интерфейсов для обработки откатов - Callback и WarningCallback. Более подробную информацию об интерфейсах Java API можно найти во врезке "Интерфейсы и классы".

ЧТО ДАЛЬШЕ?

Как отмечалось выше, согласно новой стратегии Informix в базу данных Dynamic Server будет интегрирована Java-машина, виртуальный табличный интерфейс VTI, поддержка компонентной модели Enterprise JavaBeans, а также стандартов JDBC и SQLJ. При этом для организации распределенной вычислительной системы предполагается использовать стандартные протоколы RMI, CORBA и IIOP. Сама же база данных для компонентов Enterprise JavaBeans будет выглядеть как контейнер. Использование виртуального табличного интерфейса VTI гарантирует, что все данные, хранимые в базе, будут преобразованы к стандартному табличному виду - даже те, которые хранятся в виде компонентов Enterprise JavaBeans (см. рис.). Это свойство базы данных позволяет управлять ее работой как с помощью стандартных программ, так и через Web-интерфейс.

Как утверждают представители Informix, во втором квартале этого года появится бета-версия виртуальной Java-машины для Universal Data Option. Выход же окончательной версии ожидается в конце 1998 года. Тогда же выйдет и окончательная версия VTI, а также реализации Enterprise JavaBeans и стандартов JDBC 2.0 и SQLJ.


Интерфейсы и классы

В оперативный интерфейс входят следующие классы:

  • Credentials - класс для получения информации о доступных способах связи с базой данных;
  • LargeObjectManager - менеджер управления чтением и записью больших объектов (требует наличия объекта Credentials);
  • Connection - объект для описания собственно соединения (требует наличия объекта Credentials);
  • ErrorManages - менеджер обработки ошибок;
  • Query - класс для составления запроса в базу данных;
  • Statement - класс для создания и выполнения выражения;
  • CursorManager - менеджер подготовки выражения SELECT;
  • Cursor - класс для определения нового курсора в выражении SELECT;
  • Factory - класс для создания новых объектов.
  • В состав оболочки данных входят следующие объекты:
  • BigDecimalConvertible - объект, преобразуемый в объект класса java.math.BigDecimal;
  • Container - объект, содержащий в себе другой объект;
  • DateConvertible - объект, который можно преобразовать в объект класса java.sql.date;
  • ErrorManagerValue - объект для получения сообщений об ошибке;
  • InputStreamConvertible - объект, преобразуемый в поток ввода;
  • IntervalDFConvertible - объект, конвертируемый в объект informix.api.ijep.IntervalDF;
  • IntervalYMConvertible - объект, конвертируемый в объект informix.api.ijep.IntervalYM;
  • LargeObject - объект, поддерживающий чтение из файла и запись в файл по определенным правилам;
  • NumericConvertible - объект, преобразуемый в один из числовых типов Java;
  • Row - контейнер, содержащий массив объектов;
  • TimeConvertible - объект, который можно преобразовать в Java-объект time;
  • TimestampConvertible - объект, преобразуемый в объект класса java.sql.timestamp;
  • Value - объект, предоставляющий базовые методы работы со всеми типами данных.

В приведенном списке отсутствуют объекты для работы с дополнительными типами данных; их описание можно найти в руководстве по разработке модулей DataBlade.

В дополнительных классах содержатся объекты, которые предоставляют общие данные о БД и отдельных ее элементах, а также обработчики исключительных ситуаций:

  • BaseTypeInfo - информация о типах данных, используемых в базе данных;
  • RowTypeInfo - информация о типах в записи;
  • TypeInfo - базовая информация о типах;
  • DBException - "родитель" всех классов Informix, предназначенных для обработки исключительных ситуаций;
  • DBClientException - обработчик исключительной ситуации, возникающей в клиентском приложении;
  • DBConversionException - обработчик исключительной ситуации, возникающей при преобразовании типов;
  • DBMalformedInput - обработчик исключительной ситуации, возникающей в том случае, когда строка запроса не может быть преобразована в какой-либо объект;
  • DBServerException - обработчик исключительной ситуации, возникающей при какой-либо ошибке в Universal Server;
  • DBUnsupportedConversion - обработчик исключительной ситуации, возникающей в случае попытки некорректного преобразования;
  • DBUnsupportedException - обработчик исключительной ситуации, возникающей в случае некорректной операции;
  • DBServerWarning - предупредительное сообщение Universal Server.