Обновление Кодов И Их Кеширование

Тема в разделе "Lotus - Программирование", создана пользователем Kizarek86, 30 сен 2011.

  1. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Доброго дня, Всем.

    Что-то тихо стало на форуме)

    Есть следующая проблема:
    Выполняются какие либо доработки, заливаются в рабочую базу,
    и тут сталкиваемся с ситуацией когда код закеширован (наблюдаю такую штуку в 6.5, в 8 такого нету), следовательно новый функционал не работает.
    Если обновления были глобальные, то и старый может перестать работать.
    Лечится переоткрытие базы/клиента.

    кто как с этим борется?
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Обновления надо делать тогда, когда люди не работают с приложением.

    Вообще, нотес довольно хитро кеширует код. Обычно, агенты не кешируются. Форма кеширует библиотеки и т.п. Переоткрытие формы обычно сбрасывает этот кеш. Код БД кешируется до закрытия БД.
    Если переоткрытие БД не помогает, возможно, проблемы с сетью. Если нотес думает, что связь с сервером не устойчива, то он создает кеш кода в спец базе, и переоткрытие может не сработать. В сложных случаях приходится и иконку с рабочей области удалять или убивать кеш-бд.
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Akupaka а откуда инфа, что и как кешируется? опыт или это где-то описано? если последнее, укажи ссылку, плз...
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Совсем недавно мучился с кэшированием кода java-библиотеки, вызываемой из LS через LS2J. Помогало только переоткрытие Лотоса.
     
  5. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Увы и ах но в данном случае это нереально)

    В лотусе вроде нету штатных средств по "выбросу" пользователей из баз... или я ошибаюсь?
     
  6. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    В администраторе вроде как есть.
     
  7. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    из админа drop all в таком случае можно попробовать
    вроде это то, что надо.
     
  8. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Что при этом дропается? Только текущий коннект пользователя к базе?
    База то открыта у него останется, следовательно и кеш тоже, при любом действии пользователя должен выполниться новый коннект по идее.
     
  9. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    А удаление документов Cache-базы не помогает?
    <!--shcode--><pre><code class='avto'>Set dbcache=New NotesDatabase("","cache.ndk")
    If dbcache.IsOpen Then
    Set coll=dbcache.AllDocuments
    Set cachedoc=coll.GetFirstDocument

    While Not cachedoc Is Nothing
    Set delcachedoc=cachedoc
    Set cachedoc=coll.GetNextDocument(cachedoc)
    Call delcachedoc.Remove(True)
    Wend
    End If[/CODE]
     
  10. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Да поможет скорее всего, просто сей скрипт не обладает быстротой работы, а реально вешать его придется на больше кол-во действий, что реально затормозить и без того тормозную систему)
     
  11. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    версию 6.5.1 помоему прекрасна еще тем, что если сделать обновление в момент когда юзер в базе, но "кешь" закрепится навсегда и будет горе

    и что значит не реально, неужели так тяжело работать не с рабочей базой а шаблоном, который по дефоулту сам в 2 часа ночи всё обновит?
     
  12. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Обновление приложения - процесс организационный! Проводится в нерабочее время, либо, если критично, то требуется организационно выход всех пользователей из системы.

    Какой "вешать"? Этот код необходимо выполнять лишь изредка в совсем критичных случаях! И то, не удалять все документы, а закрыть нотес, убить файл БД cache.ndk, запустить нотес. И этот код не понадобится. А, если уж удалять документы, так не все, а лишь те, которые относятся к конкретному приложению.

    Никогда не сталкивался с чем-либо подобным в нормальной сети, хотя имели место пару случаев с глюками кеша у "дальних" клиентов, лечилось удалением БД кеша.

    Добавлено: OKEN ,
    эт по памяти... Возможно про кеш есть в inside notes, я уже не помню.
     
  13. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Да понятно что вопрос организационный, не всегда можно решить, находятся индивиды которые не делают то что просят.
    Обновление с шаблона в не рабочее время не решает проблему, т.к. никто не запрещает оставить открытым документ/базу и вне рабочее время.
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Не стоит пытаться решить организационные задачи техническими средствами. Такие проблемы решаются приказом по организации, обязующим пользователей выключать ПК на ночь и предусматривающим санкции за неисполнение. Для проталкивания такого приказа можете указать следующие аргументы: экономия электроэнергии, экономия ресурса ПК/увеличение их сроков эксплуатации, снижение риска возникновения пожара от невыключенных электроприборов.
     
  15. Kizarek86

    Kizarek86 Lotus team
    Lotus team

    Регистрация:
    20 июл 2007
    Сообщения:
    857
    Симпатии:
    5
    Да я прекрасно понимаю что этот вопрос нужно решать организационно, но как говорил небезызвестный поручик
    "Кто на это согласится, Господа?".

    Вообще считаю что нужен функционал по блокировке работы пользователей в системе, в том же 1С неплохая схема, жаль что в Lotus нет такой)
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    ACL Вам в руки :). Как говорилось в известном фильме, если пользователь не хочет добровольно закрывать БД — "Отключим газ".
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    ну можно проверить - закрывал ли юзер приложение...
    например создавать очередь при открытии приложения и убивать её при закрытии
    в очереди хранить дату ну и чекать при опред событиях, при надобности - просить закрыть
     
  18. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а sh user не это ли показывает?

    зы: а в совсем не рабочее время и drop all незазорно, как по мне...
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.081
    Симпатии:
    300
    Akupaka это ты про сервер, я про клиент, обрыв коннекта не даст инфы о перезагрузке базы на клиенте
     
  20. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А, ты имеешь в виду, что БД должна сама проситься закрыться? Понял, вроде...
    Но что должно проверяться в конце концов, как определять необходимость переоткрыть БД? Создавать где-то на сервере объект, сигнализирующий необходимость переоткрытия БД, и проверять время его создания и время начала сессии на клиенте?
     
Загрузка...

Поделиться этой страницей