Контексты сессии и вызова

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Для того, чтобы можно было реализовать требования распределения прав доступа и логирования действий, любая операция над данными в Celesta производится от имени некоторого пользователя, «анонимных» операций быть не может. Поэтому любой Celesta-код выполняется в некотором контексте вызова (CallContext), который, с свою очередь, существует в контексте сессии (SessionContext).

CallAndSession.png

Привязка пользователя к контексту сессии определяет разрешения на доступ к таблицам, а также обеспечивает возможность логирования изменений, производимых от его имени.


Контекст вызова

Каждая из процедур, вызываемых в Celesta, принимает в качестве аргумента объект context, являющийся экземпляром класса контекста вызова (CallContext). Этот объект предназначен в первую очередь для использования в качестве аргумента при вызове конструкторов курсоров. Cам этот объект имеет следующие публично доступные методы и атрибуты:

  • commit() — фиксирует текущую транзакцию. Вызывать данный метод требуется только в редких случаях, когда транзакцию обработки данных необходимо разбить на несколько частей. Обычно в вызове этого метода необходимости нет, т. к. транзакция фиксируется автоматически по завершении процедуры.
  • getCelesta() — вызывает текущий экзмемпляр объекта Celesta. Необходимо, например, для получения информации о метаданных.
  • getUserId() — возвращает имя пользователя, от лица которого производятся действия.
  • getSessionId() — возвращает идентификатор сессии, в рамках которой производятся действия.
  • getStartTime() — возвращает время создания контекста вызова (время начала работы Celesta-процедуры).
  • getShowcaseContext() — возвращает объект, содержащий набор контекстов Showcase.
  • getData() — возвращает объект-словарь Python, в котором могут храниться произвольные данные, привязанные к текущей сессии.
  • message(...), warning(...), error(...) — инициирует создание сообщения, предупреждения или ошибки для вывода во внешней среде (например, в виде сообщения ShowCase). В качестве аргумента передаётся текст или идентификатор сообщения, а также заголовок сообщения и путь к файлу картинки, которая будет показана вместо стандартной. При этом, при вызове метода error происходит выброс исключения и откат транзакции. Пример,
    context.error(u"555");
    context.error(u"Сообщение", u"Заголовок");
    context.error(u"Сообщение", u"Заголовок", u"solutions/default/resources/group_icon_default.png");
  • getGrain() — возвращает гранулу (объект ru.curs.celesta.score.grain), из которой изначально был запущен скрипт (см. статью Метаданные Celesta). Получив объект-гранулу, далее получить имя гранулы можно через его метод getName(), получить путь, в котором находится текущая гранула, можно через метод getGrainPath().
  • getProcName() — возвращает имя процедуры, которая была изначально вызвана (используется для нужд отладки).
  • getDBPid() — возвращает PID (process identifier) текущего соединения с базой данных (используется для нужд отладки).

Связь класса CallContext с ключевыми компонентами Celesta показана на следующей диаграмме классов:

Contexts.png