powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Не закрываются объекты через CacheActiveX
18 сообщений из 18, страница 1 из 1
Не закрываются объекты через CacheActiveX
    #35403790
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, проблема в следующем...
Используя COM оболочку CacheActiveX подключаемся к Каше и работаем с объектами. По завершению работы с объектом на клиентской стороне убиваем ссылку на него - при этом на серверной стороне объект не отцепляется и висит в процессе, соответственно деструктор не вызывается. Объект с серверной стороны может(!!!) убиться только при следующем вызове сервера и то не всегда. Такое ощущение, как будто объект кто-то держит, хотя на клиенте полностью убиты все ссылки на него. Возможно ActiveX прослойка вызывает очистку ссылок на объект только при обращении к этой прослойке - тогда вопрос, почему некоторые ссылки убиваются не сразу при обращении к серверу, а спустя несколько вызовов, когда на клиенте очистятся некоторое количество объектов?

В общем, как добиться того, чтобы при очистке ссылки на клиенте - объект на серверной стороне сразу же отцеплялся?
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35403893
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для корректного закрытия объекта на сервере необходимо вызывать метод SYS_Close.
Например (код на Delphi с ранним связыванием):
Код: plaintext
1.
2.
3.
4.
5.
6.
var p:Person;
...
p:=Person(f.OpenId('test.person','45'));
ShowMessage(p.SYS_Id);
p.SYS_Close;
p:=nil;
Подробнее см. документацию на аналогичные методы только для .NET или SYS_Close для ActiveX.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35405562
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используем Cache' 5.2.
Клиент на Delphi.
Взаимодействие осуществляется через CacheActiveX.

Маленький примерчик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
var
    CacheFactory: Factory;
    emp,comp: variant;
    str: String;
begin
    CacheFactory := CoFactory.Create;
    if not CacheFactory.Connect('cn_iptcp:127.0.0.1[1972]:SAMPLES) then Exit;
    emp := CacheFactory.OpenId('Sample.Employee','101',EmptyParam);
    if Assigned(IDispatch(emp)) then begin
        str := emp.Title;
        comp := emp.company;
        if Assigned(IDispatch(comp)) then begin
            str := comp.Name;
            comp.SYS_Close;   // Закрываем Sample.Company
            comp := NULL;     // Убиваем ссылку
        end;
        emp.SYS_Close;        // Закрываем Sample.Employee
        emp := NULL;          // Убиваем ссылку
    end;
    CacheFactory.Disconnect;
    CacheFactory:=nil;

После зыкрытия объектов на клиенте объекты всё еще висят в процессе, деструктор не вызывается, логика при закрытии объектов не отрабатывается.
Если зайти посмотреть переменные процесса через портал управления, то там будут видны ссылки на эти объекты - %sysOrefs(2), %sysOrefs(3).
Больше объекты с клиентской стороны ни кто не держит - получается, что держит ActiveX прослойка.

Кстати, вызывать метод SYS_Close - это пережиток прошлого, т.к. он вызывает на сервере %Close, который ни чего не делает. Сейчас система сама подсчитывает ссылки на объект и уничтожает его (вызывается деструктор) при при достижении кол-ва ссылок 0.

Вопрос вот в чем - почему прослойка не отпускает объекты и как добиться того, чтобы объекты на сервере сразу отцеплялись???

ЗЫ: Кажется мне, что это баг каши... :)
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35405756
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще - если работать через CacheObject, а не CacheActiveX, то объекты вроде закрываются сразу при убивании ссылки на клиенте.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35406004
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наш опыт показал, что CacheActiveX еще довольно сырой (версии 2007.1-2008.1). По нему было открыто (и решено) несколько проблем в WRC. Хотя с закрытием объектов проблем в этих версиях не было.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35406046
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey MaslovНаш опыт показал, что CacheActiveX еще довольно сырой (версии 2007.1-2008.1). По нему было открыто (и решено) несколько проблем в WRC. Хотя с закрытием объектов проблем в этих версиях не было.
Видать, просто не обращали внимание на закрытие объектов - т.к. при следующем опросе сервера или манипуляции с серверными объектами битые ссылки удаляются. Думаю, это связано с быстродействием, т.к. в CacheObject были периодические задержки при обращении к серверу, которые могли возникать из-за чистки серверных ссылок, а в CacheActiveX ссылки подчищаются не автоматически, а только при последующем доступе к серверу. Только вот происходит это не всегда.
Может кто знает 100% метод заставить сервер очистить все свои битые ссылки?
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35406195
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правы, в 2008.1 то же самое (версия CacheActiveX.dll 2008.1.0.401.0.6787). Думаю, это бага, а не фича. Глядя на их кол-во в subj, не перестаю удивляться, как они сами с ним работают (в Studio). Что ж, Вы первый заметили - вам и проблему открывать :)
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35406928
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SocratdvКстати, вызывать метод SYS_Close - это пережиток прошлого , т.к. он вызывает на сервере %Close, который ни чего не делает.
Всё верно. Но в то же время и sys_Close (другая ссылка). Возможно документация устарела, но я предпочитаю не рисковать.

To Alexey Maslov
Где Вы нашли, что Студия использует CacheActiveX.dll?
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35407176
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitГде Вы нашли, что Студия использует CacheActiveX.dll?Признаю, был неточен. Студия, начиная с 5.1, использует CacheODBC.dll, которая реализует единый транспорт и для ActiveX- (CacheActiveX.dll), и для ODBC-доступа.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35407798
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Студия, как и CacheActiveX работает через программу %SYS.DBSRV, поэтому у меня тоже сложилось мнение, что Студия работает через CacheActiveX.

Мы тут заметили, что ActiveX для убивания битых ссылок и закрытия объектов на сервере посылает сообщения приограмме %SYS.DBSRV. Возможно, что для принудительного убития ссылки можно самому послать это сообщение. Вопрос лишь в том - как достучаться до этой программы, чтобы посмотреть код и узнать что именно делать? Стандартными средствами найти её не удалось, хотя она точно есть - для проверки можно вызвать d Error^%SYS.DBSRV .
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35407800
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ошибся в предыдущем посте - CacheActiveX работает через %SYS.BINDSRV.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35407983
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Socratdv
Попробуйте так:
Код: plaintext
1.
2.
3.
4.
5.
...
        emp.SYS_Close;        // Закрываем Sample.Employee
        emp := NULL;          // Убиваем ссылку
    end;
CacheFactory.ForceSync;
...
У меня на версии 2008.2.FT3 не остаётся ни одной ссылки.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35408031
Socratdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подобный метод (ForceSync), очишающий ссылки на сервере мы уже искали...
К сожалению, в Cache' 5.2 такого метода нету.. В 2007, вроде, тоже нет.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35408416
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Socratdv
Тогда закажите adhoc для Вашей версии Caché.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35410467
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2servit
У меня Cache 2008.1 метода ForceSync у Factory - нет. :(
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35414635
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В CacheActiveX.dll версия 2008.1.0.401.0.6787 метод имеется и работает, как и пишет Servit (спасибо!). Это специальный билд Cache for Windows 2008.1 (Build 401_0_6787), включающий несколько AdHoc'ов, в том числе и CacheActiveX, перенесенный из 2008.2. Кстати, sys_Close() все-таки нужен, без него серверный счетчик ссылок не декрементируется.
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35415146
=Dimon=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И где взять сей замечательный билд?
...
Рейтинг: 0 / 0
Не закрываются объекты через CacheActiveX
    #35415165
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Известно где. В саппорте ИнтерСистемз. Для этого, возможно, Вам придется открыть проблему.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Не закрываются объекты через CacheActiveX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]