Используем объекты caché Бакулин Сергей Москва, 11 апреля
Post on 18-Dec-2015
269 views
TRANSCRIPT
![Page 1: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/1.jpg)
Используем объекты CachéБакулин Сергей
Москва, 11 апреля
![Page 2: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/2.jpg)
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/3.jpg)
• Объекты Объекты CachéCaché в клиентском в клиентском приложенииприложении
– Создание, редактирование и Создание, редактирование и удаление объектов удаление объектов CachéCaché
– Запуск методов классов Запуск методов классов CachéCaché– Работа с запросами классов Работа с запросами классов
CachéCaché
• Объектная модель данныхОбъектная модель данных
• Бизнес логика в Бизнес логика в CachéCaché
• Нет необходимости Нет необходимости использовать реляционные использовать реляционные интерфейсы с ОО средством интерфейсы с ОО средством разработкиразработки
Объекты в Caché 5.1
Объектная модель Объектная модель CachéCaché• Множественное наследованиеМножественное наследование
• АтрибутыАтрибуты
– ЛитералыЛитералы
– СсылкиСсылки
– КоллекцииКоллекции
– ПотокиПотоки
• МетодыМетоды
– Методы объектовМетоды объектов
– Методы классовМетоды классов
• Запросы на Запросы на SQLSQL
![Page 4: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/4.jpg)
Caché Object Factory
• ActiveX-ActiveX-компонент компонент CacheObject.FactoryCacheObject.Factory
• Объектная фабрикаОбъектная фабрика– Называется так, поскольку именно Называется так, поскольку именно
этот объект создает объекты классов этот объект создает объекты классов CachéCaché
– Эта же фабрика используется для Эта же фабрика используется для открытия объектов из БД и открытия объектов из БД и сохранения ихсохранения их
• Разработчик получает доступ ко всем Разработчик получает доступ ко всем свойствам и методам объектовсвойствам и методам объектов
![Page 5: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/5.jpg)
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/6.jpg)
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/7.jpg)
Генератор классов C++
• Новое расширение Новое расширение компилятора классов компилятора классов Caché, создающее Caché, создающее классы С++ (код и классы С++ (код и заголовочные файлы) заголовочные файлы) на основании классов, на основании классов, определенных в Caché определенных в Caché Class DictionaryClass Dictionary
• Является внешним по Является внешним по отношении к отношении к Caché Caché приложениемприложением
С++С++С++С++
ПроксиПроксиклассыклассы
CachéCachéCachéCaché
Библиотека Библиотека классовклассов
Библиотека Библиотека классовклассов
![Page 8: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/8.jpg)
Библиотека 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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/9.jpg)
Раннее связывание и динамические объекты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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/10.jpg)
Использование Java
• BEA WebLogic8.1BEA WebLogic8.1
• JBoss4.0 3JBoss4.0 3
CachéCaché
Java BindingJava
BindingEJB
BindingEJB
Binding
• Генератор Генератор классовклассов
• Библиотека Библиотека прокси-классовпрокси-классов
• Объектный Объектный серверсервер
![Page 11: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/11.jpg)
EJB в один момент
Автоматически создаетАвтоматически создает::
• Entity beanEntity bean
• Дескриптор установкиДескриптор установки
• Сценарий установкиСценарий установки
• Тестовое приложениеТестовое приложение
Автоматически создаетАвтоматически создает::
• Entity beanEntity bean
• Дескриптор установкиДескриптор установки
• Сценарий установкиСценарий установки
• Тестовое приложениеТестовое приложение
![Page 12: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/12.jpg)
Пример работы с объектом 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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/13.jpg)
Perl Binding, Python Binding
•Используются специальные пакеты Используются специальные пакеты системных прокси-классовсистемных прокси-классов
–Соединение с серверомСоединение с сервером
–Фабрика объектовФабрика объектов
–Полная поддержка объектной Полная поддержка объектной модели модели CachéCaché
![Page 14: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/14.jpg)
Пример для 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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/15.jpg)
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/16.jpg)
Проецируем классы .Net
Windows
.NET Client.NET Client.NET Client.NET Client
Прокси-КлассыПрокси-Классы
ISC ClassBinderISC ClassBinder
CachéCaché
Определение класса
Определение класса
Исходный код
Исходный код
Клиент на любой платформе
• Самостоятельное приложение илиСамостоятельное приложение или инструмент инструмент Visual StudioVisual Studio
• Сгенерированный код напрямую Сгенерированный код напрямую используется приложением используется приложением .Net.Net
Использование Генератора классовИспользование Генератора классовИспользование Генератора классовИспользование Генератора классов
![Page 17: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/17.jpg)
Мастер создания классов .Net
.Net приложение, создающее классы-проекции для
–С#
–C++
–VB.Net
![Page 18: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/18.jpg)
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/19.jpg)
Пример работы с объектом
Sample.Person person = Sample.Person.OpenId(CacheConnect, "1");
Console.WriteLine(“Значение свойств: \r\n "
+ person.Id() + ": "
+ person.Name
![Page 20: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/20.jpg)
Пример 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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/21.jpg)
Объекты и таблицы
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/22.jpg)
Использование коллекций литералов и ссылок на объекты
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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/23.jpg)
Наследование и отношения
•Классы-проекции .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 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/24.jpg)
В версии 5.2. - Jalapenо
•Java Object Schema ImportJava Object Schema Import
–Традиционно Традиционно Caché Caché предлагает предлагает механизмы по созданию прокси-механизмы по созданию прокси-классов из хранимых классов классов из хранимых классов CachéCaché. . Jalapeno Jalapeno обращает этот обращает этот механизм, позволяет создавать механизм, позволяет создавать классы классы Caché Caché из существующих из существующих описаний классов описаний классов Java.Java.
![Page 25: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/25.jpg)
Что нам все это даст?!
•Простота проектирования и Простота проектирования и модернизации приложениймодернизации приложений
•Накопленный багаж ОО практик при Накопленный багаж ОО практик при разработке приложенийразработке приложений
•Единство моделей данных на Единство моделей данных на клиенте и на сервереклиенте и на сервере
![Page 26: Используем объекты Caché Бакулин Сергей Москва, 11 апреля](https://reader037.vdocuments.site/reader037/viewer/2022102522/56649d245503460f949fad31/html5/thumbnails/26.jpg)
Таким образом…
• Полноценная объектная модель на всех уровнях Полноценная объектная модель на всех уровнях разработкиразработки
• Объектные средства реализации бизнес логикиОбъектные средства реализации бизнес логики
• Широкие возможности по применению объектных Широкие возможности по применению объектных средств разработкисредств разработки
– .Net.Net– JavaJava– C++C++– DelphiDelphi– PerlPerl– PythonPython
• Возможность сочетать мощь объектного подхода со Возможность сочетать мощь объектного подхода со стандартным стандартным SQL-SQL-доступомдоступом
Возьмите у нас Возьмите у нас Caché 5.1Caché 5.1!!