Как хранить ссылки на объекты на протяжении жизни всего клиента?

fedotxxl

Well-known member
09.11.2005
614
0
#1
Всем привет =)
Предположим у меня есть вид / база, к которому пользователь часто обращается, пока работает в среде. Зачем мне постоянно получать данные объекты (Set db = ns..., Set nv = db...). Что если один раз получить и дальше хранить в памяти? Как можно сохранить объект, пока пользователь работает в LN? Может CAPI, могёт ещё какие-нить нестандартные конструкции?
 

Omh

Lotus team
04.07.2007
2 210
1
#2
На итертрасте было про это дело обсуждение пару лет назад:
Там было и про объекты, и про очереди и всё такое...
 

Omh

Lotus team
04.07.2007
2 210
1
#4
Да, читал когда-то.
Я по идее именно эту тему и искал, но сразу не нашёл.

Скажу сразу, что сам не пробовал :)
 

fedotxxl

Well-known member
09.11.2005
614
0
#5
Потестировал я http://main...D5?OpenDocument

Получилось:
Нужно что-то, что будет постоянно поддерживать жизнь объекта "DCN_Obj.ObjCollection"
Метод Add не может принимать самописные классы. Я так понимаю их где-то нужно регистрировать...

Есть идеи по развитию?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#6
если касается не UI (и не привяз. к LS) - можно обойтись без подобных "извращений"...
любой класс из jvm библиотек (например lib/ext) будет жить (ежели его там и создать) всё время жизни Нотусов. неНотусёвые классы - точно, Нотусёвые не проверял, но отличий быть не должно
безо всяких КОМов и винды

типа вызывем ф-цию из библиотеки - кот. создает объект и возвращает ссылку
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#8
готового для выкладывания - нет
концептуально - я привел схему
пишем jar , в кот. некая ф-ция
Код:
class ExamplePerssistent{
static Session gses=null;
public static Session getSession(){
if(gses==null){
//Create new session
......
}
return gses;
}
}
т.о. не создавая инстанса класса (ExamplePersistent): ExamplePersistent.getSession() выдаст некую "глобальную" сессию
т.к. этот jar "проинициализирован" на всё время жизни Нотусов, то и все его объекты будут обладать подобной жизнью
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#9
давно подобным увлекаюсь действуя по принцыпу давать пользователю уже "обработанные данные", а если он обращается повторно то поднимаю ему их из "кеша"
 

fedotxxl

Well-known member
09.11.2005
614
0
#10
Уточню задачу
Как напрямую передать объект из одного клиента в другой
Вот эта вещь - http://main...D5?OpenDocument - почти позволяет это сделать. Только две проблемы - COM сервер должен быть постоянно кем-то поднят и на самописные классы функция ругается
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#11
это уточнение не даёт ясности...
чем создание "перманентного" Нотус объекта в java библиотеке не устроит?
ведь ссылку на него можно получить во время жизни jvm Ноусов, а оно равно жизни инстанса Нотуса
 
02.04.2005
170
1
#12
если касается не UI (и не привяз. к LS) - можно обойтись без подобных "извращений"...
любой класс из jvm библиотек (например lib/ext) будет жить (ежели его там и создать) всё время жизни Нотусов. неНотусёвые классы - точно, Нотусёвые не проверял, но отличий быть не должно
безо всяких КОМов и винды

типа вызывем ф-цию из библиотеки - кот. создает объект и возвращает ссылку
Отличная идея! Спасибо за интерсную идею!
 

fedotxxl

Well-known member
09.11.2005
614
0
#13
lmike
Такой вопрос - можно ли таким образом сохранять в памяти любой объект, заранее неизвестный (т.е. коллекцию, в которую можно добавить/взять любой объект
И главное - что делать с LS?
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#14
давайте вопрос поделим так:
-формирование объекта происходит на основе кода (не так ли?), этот код содержится в библиотеках (как пр-ло)
т.о. создавать объект можно написав любой класс в библиотеке, а сделать его переманентным - вынос за пределы видимости базы (т.е. - внешний jar).
Объект не может быть неизвестным - ибо его пишет программист ;) Мы конечно можем дойти до RMI или CORBA и добавить (для динамики) рефлекшн, но стоит оно того? ;)

-какими объектами должен манипулировать LS? Если имеем стринги, их массивы, скалярные переменные - LS2J подойдет. Организовывать колекции можно и на java классах (и даже проще будет)...

Да - объекты LS передавать не получится, но если на LS не зацикливаться - то оно и не надо.
Понятно, что сущ. LS код, под такую модель либо переделывать, либо модель не использовать

одно из серьёзных ограничений - UI, но это (как мне кажется) и КОМ модель не потянет ;)
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#15
забыл ещё одну деталь (неприятную)...
сцуконотус жвм убивает Thread (даже глобальные), в агентах точно (апосля выхода из агента)
 

lmike

нет, пердело совершенство
Премиум
27.08.2008
6 567
263
#16
вспомнил еще одну особливость ;) ...
swing объекты нотуса не уничтожают ;)
др. словами - создавая свинговое окошко (класс от JFrame) мы получим его перманентным
кто хочет удостоверится - пущает jdbcsearch экзампел от Сергея (он выкладывал на Интертрасте)

а вот в восьмерке - свинг (по-крайней мере под линух 64-бит) не пущается (жалуется на секурити топмост окна AWT)
это тоже оборимо, но метод убийственный (мне известен) - в секуритях жвм установить пермишн на всё (потому как неизвестно на какой конкретно класс и как надо)