Object Entity Serialization & Stability (ObjESSty)

Инструмент для сериализации и долговременного хранения сложных C++ объектов


Коротко об ObjESSty
-------------------

ObjESSty -- это инструмент для сериализации и долговременного хранения сложных
C++ объектов.  ObjESSty включает в себя средства для сериализации/
десериализации C++ объектов в двоичное, платформо-независимое представление.
Так же в состав ObjESSty входит небольшая, встраиваемая система долговременного
хранения сериализованных объектов.

Основная идея в ObjESSty -- это необходимость описания схемы данных на
специальном языке и объявление сериализуемых типов производными от специального
класса oess_1::stdsn::serializable_t. Все остальное -- задача ObjESSty. По
описанию схемы данных автоматически генерируется вспомогательный код, который и
выполняет сериализацию/десериализацию.

ObjESSty реализован на языке C++ и предназначен для использования в C++
приложениях. Поэтому в ObjESSty встроена поддержка атрибутов-указателей и
атрибутов-контейнеров STL.

ObjESSty распространяется в исходных текстах по BSD-лицензии.

Дополнительная информация об ObjESSty может быть получена со страницы
разработчика (http://eao197.narod.ru/objessty) или из генерируемой по исходным
текстам ObjESSty документации.



Получение и инсталляция ObjESSty
--------------------------------

Загрузить ObjESSty можно со страницы разработчика --
http://eao197.narod.ru/objessty. ObjESSty распространяется только в исходных
текстах.

Для компиляции ObjESSty потребуется инструмент для управления компиляцией
проектов mxx_ru (http://eao197.narod.ru/mxx_ru) и язык Ruby
(http://www.ruby-lang.org).

Возможны два способа инсталляции ObjESSty.


Единственная инсталляция на компьютере
======================================

Архив с ObjESSty распаковывается в некоторый каталог (например,
d:/usr/tools/oess_1). Пусть этот каталог называется oess_root. Компиляция
ObjESSty запускается из подкаталога oess_root/dev. Результирующие dll
размещаются в каталоге oess_root/dev, библиотеки импорта в oess_root/dev/lib.

Для использования ObjESSty необходимо добавить oess_root/dev в переменную среды
PATH, oess_root/dev в переменную среды INCLUDE, а oess_root/dev/lib -- в LIB.

Замечание для платформы Unix. ObjESSty не использует GNU autotools, поэтому
инсталляция через ./configure; make; make install в ObjESSty не поддерживается.
Все настройки на конкретную платформу для ObjESSty осуществляются через
настройку mxx_ru для этой платформы. После компиляции ObjESSty необходимо
прописать каталог oess_root/dev в LD_LIBRARY_PATH, а при компиляции
использующих ObjESSty проектов необходимо указывать в опциях компилятора пути к
каталогам oess_root/dev (для заголовочных файлов) и oess_root/dev,
oess_root/dev/lib (для поиска библиотек).

Данный способ является наиболее сложным способом инсталляции и подключения
ObjESSty к собственным проектам. Более предпочтительным является следующий
способ.


Включение ObjESSty в состав использующего его проекта
=====================================================

Путь ObjESSty должен использоваться в проекте A. Пусть исходные тексты проекта
находятся в дереве каталогов с вершиной в каталоге A_root. Для использования
ObjESSty в проекте A необходимо поместить в A_root все каталоги из каталога dev
архива ObjESSty за исключением каталогов htm, sample, test.  В результате
должно получиться такое соотвествие: 

oess.tar.bz2/dev/ace          A_root/ace
oess.tar.bz2/dev/args_4       A_root/args_4
oess.tar.bz2/dev/auto_ptr_3   A_root/auto_ptr_3
oess.tar.bz2/dev/cls_2        A_root/cls_2
oess.tar.bz2/dev/cpp_util_2   A_root/cpp_util_2
oess.tar.bz2/dev/lib          A_root/lib
oess.tar.bz2/dev/libpcre++    A_root/libpcre++
oess.tar.bz2/dev/oess_1       A_root/oess_1
oess.tar.bz2/dev/pcre         A_root/pcre
oess.tar.bz2/dev/smart_ref_3  A_root/smart_ref_3
oess.tar.bz2/dev/threads_1    A_root/threads_1

Затем в настройки проекта A добавляются:
- путь для поиска заголовочных файлов: каталог A_root;
- путь для поиска библиотек: каталог A_root/lib.

На платформе Unix так же потребуется добавить каталог A_root в путь для поиска
библиотек (в него будут помещаться скомпилированные so-файлы) и указать
каталог A_root в LD_LIBRARY_PATH.

По умолчанию, в результате компиляции ObjESSty будет размещать полученные
dll/exe файлы в каталог A_root, а библиотеки импорта/статические библиотеки в
A_root/lib. Расположение результатов компиляции может быть изменено при помощи
возможно назначения obj_placement в mxx_ru. Например, включением в файл
build.rb инструкции вида:

global_obj_placement(
	Mxx_ru::Cpp::Runtime_subdir_obj_placement.new(
		"output" ) )

(Подробнее см. в документации по mxx_ru: http://eao197.narod.ru/mxx_ru).

Такой способ инсталляции и использования ObjESSty позволяет:
- компилировать ObjESSty с теми же настройками, что и использующий его проект;

- перекомпилировать ObjESSty вместе с проектом либо в debug, либо в release
режиме, не затрагивая других проектов, которые так же могут использовать
ObjESSty;

- использовать разные версии ObjESSty в разных проектах на одном компьютере.
Например, проект A использует версию 1.4.0, проект B -- версию 1.5.4, а
проект C -- версию 1.4.6b1. Все эти проекты могут мирно сосуществовать на одном
компьюере не мешая друг другу и не требуя изменений глобальных переменных среды
при необходимости переключения с одного проекта на другой.



Получение документации по ObjESSty
----------------------------------

Документация по ObjESSty доступна в электронном виде со страницы разработчика:
http://eao197.narod.ru/objessty.

Большая часть документации получена из исходных текстов с помощью инструмента
doxygen (http://www.doxygen.org). Для извлечения этой документации из исходных
текстов ObjESSty необходимо:

- установить инструмент doxygen (при работе с ObjESSty использовалась версия
1.4.1);

- распаковать ObjESSty в какой-либо каталог. Пусть этот каталог называется
oess_root;

- зайти в подкаталог oess_root/doxygen и запусть doxygen;

- html-документация будет помещена в oess_root/dev/doc/html.



Лицензия
--------

ObjESSty распространяется под т.н. "обновленной" BSD-лицензией, которая не
требует включения в использующие ObjESSty проекты рекламной информации.
BSD-лицензия позволяет использовать ObjESSty как в открытых, так и в закрытых
проектах.

ObjESSty использует ряд сторонних компонентов, которые распространяются под
собственными лицензиями. Все эти компоненты так же допускают их использование
и в открытых, и в закрытых проектах. Но при включении ObjESSty в какой-либо
проект следует убедиться, что лицензия этого проект на противоречит лицензиям
использующихся в ObjESSty компонентов.

Все лицензии, использованные в ObjESSty, перечислены в LICENSE. Так же в
lgpl.txt содержится текст GNU LESSER GENERAL PUBLIC LICENSE, которая необходима
для компонента pcre++.



О разработчике
--------------

Разработка ObjESSty до версии 1.4.0 включительно осуществлялась Евгением
Охотниковым (http://eao197.narod.ru).

eao197@intervale.ru
eao197@yahoo.com

