27
Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Используем объекты Caché Бакулин Сергей Москва, 11 апреля

  • View
    248

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Используем объекты CachéБакулин Сергей

Москва, 11 апреля

Page 2: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Caché Server Pages (CSP)Caché Server Pages (CSP)

Объекты в Caché 5.1

ПлатформыПлатформы

Ядро CachéЯдро Caché

SQLSQL

ODBCODBC JDBCJDBC

ObjectsObjectsDirectDirect

Cal

lin

Cal

lin

Cal

lou

tC

allo

ut

Vis

MV

isM

Caché Object Script & Caché BasicCaché Object Script & Caché Basic

MultiValueMultiValue

SO

AP

SO

AP

C+

+C

++

Java

Java

Per

lP

erl

Act

iveX

Act

iveX

Pyt

ho

nP

yth

on

Jalo

pen

oJa

lop

eno

.NE

T.N

ET

Сервер CachéСервер Caché

Объектная модель Объектная модель CachéCaché• Множественное наследованиеМножественное наследование

• АтрибутыАтрибуты

– ЛитералыЛитералы

– СсылкиСсылки

– КоллекцииКоллекции

– ПотокиПотоки

• МетодыМетоды

– Методы объектовМетоды объектов

– Методы классовМетоды классов

• Запросы на Запросы на SQLSQL

Page 3: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

• Объекты Объекты CachéCaché в клиентском в клиентском приложенииприложении

– Создание, редактирование и Создание, редактирование и удаление объектов удаление объектов CachéCaché

– Запуск методов классов Запуск методов классов CachéCaché– Работа с запросами классов Работа с запросами классов

CachéCaché

• Объектная модель данныхОбъектная модель данных

• Бизнес логика в Бизнес логика в CachéCaché

• Нет необходимости Нет необходимости использовать реляционные использовать реляционные интерфейсы с ОО средством интерфейсы с ОО средством разработкиразработки

Объекты в Caché 5.1

Объектная модель Объектная модель CachéCaché• Множественное наследованиеМножественное наследование

• АтрибутыАтрибуты

– ЛитералыЛитералы

– СсылкиСсылки

– КоллекцииКоллекции

– ПотокиПотоки

• МетодыМетоды

– Методы объектовМетоды объектов

– Методы классовМетоды классов

• Запросы на Запросы на SQLSQL

Page 4: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Caché Object Factory

• ActiveX-ActiveX-компонент компонент CacheObject.FactoryCacheObject.Factory

• Объектная фабрикаОбъектная фабрика– Называется так, поскольку именно Называется так, поскольку именно

этот объект создает объекты классов этот объект создает объекты классов CachéCaché

– Эта же фабрика используется для Эта же фабрика используется для открытия объектов из БД и открытия объектов из БД и сохранения ихсохранения их

• Разработчик получает доступ ко всем Разработчик получает доступ ко всем свойствам и методам объектовсвойствам и методам объектов

Page 5: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Caché Objects : использование фабрики

Uses ComObj;Var Factory : Variant; Pers: Variant;procedure Start();Begin Factory := CreateOleObject( 'CachéObject.Factory'); Factory.Connect( 'cn_iptcp:127.0.0.1[1972]:Samples'); Pers := Factory.New(‘User.Person'); Pers.Name=‘Serguey’; Pers.sys_Save;End;

Page 6: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Web-сервисы

• Простой Простой Web-Web-сервиссервис

• Создан мастером Создан мастером Web-Web-сервисовсервисов

• Автоматически Автоматически на веб-сервере на веб-сервере помещается помещается WSDLWSDL -- описание описание

Class User.CacheServ Extends %SOAP.WebService [ProcedureBlock]{/// Название сервисаParameter SERVICENAME = "AplusB";/// URL для вызова вебсервисаParameter LOCATION = "http://localhost/csp/samples";/// AplusBMethodClassMethod AplusBMethod(a as %Integer, b as %Integer) As %String [ WebMethod ]{ Quit a+b}

http://Сервер/csp/приожение/класс.cls?WSDLhttp://Сервер/csp/приожение/класс.cls?WSDL

Page 7: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Генератор классов C++

• Новое расширение Новое расширение компилятора классов компилятора классов Caché, создающее Caché, создающее классы С++ (код и классы С++ (код и заголовочные файлы) заголовочные файлы) на основании классов, на основании классов, определенных в Caché определенных в Caché Class DictionaryClass Dictionary

• Является внешним по Является внешним по отношении к отношении к Caché Caché приложениемприложением

С++С++С++С++

ПроксиПроксиклассыклассы

CachéCachéCachéCaché

Библиотека Библиотека классовклассов

Библиотека Библиотека классовклассов

Page 8: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Библиотека Caché C++

• Новый набор классов C++, с помощью Новый набор классов C++, с помощью которого реализуется проекция классов которого реализуется проекция классов Caché Caché в классы в классы C++C++ с сохранением их с сохранением их функциональностифункциональности

• Поддерживаются среды разработкиПоддерживаются среды разработки

• MS VS 6.0MS VS 6.0

• MS VS 7.1MS VS 7.1

• Borland C++ Builder 6.0Borland C++ Builder 6.0

• ggссcc

• Нужно еще? Нужно еще? Свяжитесь с нами!Свяжитесь с нами!

Page 9: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Раннее связывание и динамические объектыd_ref<d_ref<UserUser__PersonPerson> > perper = = UserUser__PersonPerson::openid(&db,L"1");::openid(&db,L"1");

d_string name=d_string name=perper->getName();->getName();

d_string res=d_string res=perper->Method();->Method();

d_ref<Dyn_obj>d_ref<Dyn_obj>perper=NULL;=NULL;

const_name_t cl_name(L"const_name_t cl_name(L"UserUser..PersonPerson"); ");

perper = Dyn_obj::openid(&db, cl_name, L"1"); = Dyn_obj::openid(&db, cl_name, L"1");

d_ref<Dyn_obj> d_ref<Dyn_obj> perper = =

Dyn_obj::openref(Dyn_obj::openref(perper-->get_property(L“>get_property(L“NameName"), &db);"), &db);

D_type** args =(D_type**)db.get_arg_ptrs_buf();D_type** args =(D_type**)db.get_arg_ptrs_buf();

d_int arg1(1);d_int arg1(1); args[0]=&arg1;args[0]=&arg1;

d_string d_string resres((perper->run_obj_method(L“->run_obj_method(L“MethodMethod",args,1));",args,1));

• Стандартный подход для Стандартный подход для большинства разработчиковбольшинства разработчиков

• Удобство синтаксисаУдобство синтаксиса

• Работа непосредственно с Работа непосредственно с прокси-классамипрокси-классами

o Динамическое Динамическое определение определение типов данныхтипов данных

o Помогает Помогает более широко более широко использовать использовать наследованиенаследование

Page 10: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Использование Java

• BEA WebLogic8.1BEA WebLogic8.1

• JBoss4.0 3JBoss4.0 3

CachéCaché

Java BindingJava

BindingEJB

BindingEJB

Binding

• Генератор Генератор классовклассов

• Библиотека Библиотека прокси-классовпрокси-классов

• Объектный Объектный серверсервер

Page 11: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

EJB в один момент

Автоматически создаетАвтоматически создает::

• Entity beanEntity bean

• Дескриптор установкиДескриптор установки

• Сценарий установкиСценарий установки

• Тестовое приложениеТестовое приложение

Автоматически создаетАвтоматически создает::

• Entity beanEntity bean

• Дескриптор установкиДескриптор установки

• Сценарий установкиСценарий установки

• Тестовое приложениеТестовое приложение

Page 12: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Пример работы с объектом Cachéиз Java

• Открываем объектОткрываем объект

person = (Sample.Person)Sample.Person._open(dbconnection, new person = (Sample.Person)Sample.Person._open(dbconnection, new Id(strID)Id(strID),3,3););

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

System.out.println("Name: " + person.getName());System.out.println("Name: " + person.getName());

• Изменяем свойстваИзменяем свойства

person.person.ssetetNameName("("SergueySerguey"); ");

• Сохраняем объект в БДСохраняем объект в БД

person._save();person._save();

• Закрываем объектЗакрываем объект

dbconnection.closeObject(person.getOref());dbconnection.closeObject(person.getOref());

person = null; person = null;

Page 13: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Perl Binding, Python Binding

•Используются специальные пакеты Используются специальные пакеты системных прокси-классовсистемных прокси-классов

–Соединение с серверомСоединение с сервером

–Фабрика объектовФабрика объектов

–Полная поддержка объектной Полная поддержка объектной модели модели CachéCaché

Page 14: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Пример для Python

• Создание соединения с серверомСоздание соединения с серверомconn = intersys.pythonbind.connection() conn = intersys.pythonbind.connection() conn.connect_now(url,user,password, None) conn.connect_now(url,user,password, None)

database = intersys.pythonbind.database(conn) database = intersys.pythonbind.database(conn)

• Создаем новый объектСоздаем новый объектperson = database.create_new("Sample.Person", None) person = database.create_new("Sample.Person", None)

• Работаем со свойствамиРаботаем со свойствамиperson.set("Name","Doe, Joe A") name = person.get("Name") person.set("Name","Doe, Joe A") name = person.get("Name")

• Выполняем методВыполняем методanswer = person.run_obj_method("Addition",[17,20]) answer = person.run_obj_method("Addition",[17,20])

• Сохраняем объектСохраняем объектperson.run_obj_method("%Save",[]) person.run_obj_method("%Save",[])

Page 15: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

ADO.Net Managed Provider

C#, VBC#, VB..Net, …Net, …C#, VBC#, VB..Net, …Net, …

AD

OA

DO

.. Net

Net O

bjectO

bject

• Высокая скорость Высокая скорость работы в работы в объектном и объектном и реляционном реляционном представлении в представлении в рамках одного рамках одного приложенияприложения

• Visual Studio.Net Visual Studio.Net 20052005

““РоднаяРодная” .Net ” .Net связкасвязка

CachéCachéCachéCaché

Page 16: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Проецируем классы .Net

Windows

.NET Client.NET Client.NET Client.NET Client

Прокси-КлассыПрокси-Классы

ISC ClassBinderISC ClassBinder

CachéCaché

Определение класса

Определение класса

Исходный код

Исходный код

Клиент на любой платформе

• Самостоятельное приложение илиСамостоятельное приложение или инструмент инструмент Visual StudioVisual Studio

• Сгенерированный код напрямую Сгенерированный код напрямую используется приложением используется приложением .Net.Net

Использование Генератора классовИспользование Генератора классовИспользование Генератора классовИспользование Генератора классов

Page 17: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Мастер создания классов .Net

.Net приложение, создающее классы-проекции для

–С#

–C++

–VB.Net

Page 18: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Caché Managed Provider для .Net

Windows

.NET Framework.NET Framework.NET Framework.NET Framework

.NET приложение.NET приложение

КодКод

Caché / EnsembleCaché / Ensemble

Классы/ТаблицыКлассы/Таблицы

Managed Objects

Managed Objects

Сервер (любая платформа)

ADO.NETADO.NET

ObjectsObjects

SQLSQL

TCPTCP

Page 19: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Пример работы с объектом

Sample.Person person = Sample.Person.OpenId(CacheConnect, "1");

Console.WriteLine(“Значение свойств: \r\n "

+ person.Id() + ": "

+ person.Name

Page 20: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Пример SQL-запроса

string SQLtext = "SELECT * FROM Sample.Person WHERE ID = 1";

CacheCommand Command = new CacheCommand(SQLtext, CacheConnect);

CacheDataReader Reader = Command.ExecuteReader();

while (Reader.Read()) {

Console.WriteLine("Provider output: \r\n "

+ Reader[Reader.GetOrdinal("ID")] + ": "

+ Reader[Reader.GetOrdinal("Name")]);

};

Page 21: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Объекты и таблицы

CacheCommand CacheCommand cacheCommandcacheCommand = = User.User.PersonPerson.FindAll(cacheConnection); .FindAll(cacheConnection);

UserUserTable = new DataTable();Table = new DataTable();

UserUserTable.Load(Table.Load(cacheCommandcacheCommand.ExecuteReader()); .ExecuteReader());

UserDSUserDS.DataSource = .DataSource = UserUserTable;Table;

DropDrop.DisplayMember =.DisplayMember = "Name"; "Name";

DropDrop.ValueMember = "ID"; .ValueMember = "ID";

• В коде можно сочетать В коде можно сочетать объектный и реляционный объектный и реляционный подход в одном приложенииподход в одном приложении

Page 22: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Использование коллекций литералов и ссылок на объекты

CacheListOfStrings CacheListOfStrings colorscolors = = personperson.FavoriteColors.FavoriteColors

int row = 0;int row = 0;

foreach (string color in foreach (string color in colorscolors) {) {

Display.WriteLine(" Element #" + row++ + " = " + color);Display.WriteLine(" Element #" + row++ + " = " + color);

}}

//////Плюс стандартные методы обработки коллекций Плюс стандартные методы обработки коллекций CachéCaché

if (if (colorscolors.Count > 0) .Count > 0) colorscolors.RemoveAt(0);.RemoveAt(0);

colorscolors.Insert(0,"Blue");.Insert(0,"Blue");

colorscolors.Add("Green");.Add("Green");

Page 23: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Наследование и отношения

•Классы-проекции .Net соответствуют по структуре своим оригиналам в Caché. Работать с ними можно аналогичным образом:

CacheRelationshipObject CacheRelationshipObject colleaguescolleagues = = companycompany.Employees;.Employees;

foreach (Sample.Employee colleague in foreach (Sample.Employee colleague in colleaguescolleagues) {) {

Display.WriteLine("\t" + colleague.Name);Display.WriteLine("\t" + colleague.Name);

}}

Page 24: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

В версии 5.2. - Jalapenо

•Java Object Schema ImportJava Object Schema Import

–Традиционно Традиционно Caché Caché предлагает предлагает механизмы по созданию прокси-механизмы по созданию прокси-классов из хранимых классов классов из хранимых классов CachéCaché. . Jalapeno Jalapeno обращает этот обращает этот механизм, позволяет создавать механизм, позволяет создавать классы классы Caché Caché из существующих из существующих описаний классов описаний классов Java.Java.

Page 25: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Что нам все это даст?!

•Простота проектирования и Простота проектирования и модернизации приложениймодернизации приложений

•Накопленный багаж ОО практик при Накопленный багаж ОО практик при разработке приложенийразработке приложений

•Единство моделей данных на Единство моделей данных на клиенте и на сервереклиенте и на сервере

Page 26: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Таким образом…

• Полноценная объектная модель на всех уровнях Полноценная объектная модель на всех уровнях разработкиразработки

• Объектные средства реализации бизнес логикиОбъектные средства реализации бизнес логики

• Широкие возможности по применению объектных Широкие возможности по применению объектных средств разработкисредств разработки

– .Net.Net– JavaJava– C++C++– DelphiDelphi– PerlPerl– PythonPython

• Возможность сочетать мощь объектного подхода со Возможность сочетать мощь объектного подхода со стандартным стандартным SQL-SQL-доступомдоступом

Возьмите у нас Возьмите у нас Caché 5.1Caché 5.1!!

Page 27: Используем объекты Caché Бакулин Сергей Москва, 11 апреля

Используем объекты Caché Бакулин Сергей

([email protected])