Работа с контекстами
Первоначальный объект, предоставляющий доступ к дереву контекстов, реализует интерфейс ContextManager
. Существует несколько методов получения менеджера контекстов.
Получение менеджера контекстов
Метод получения экземпляра ContextManager зависит от текущей среды:
- При разработке приложения с помощью SberMobile Server API используйте
RemoteServerController.getContextManager()
для получения дерева контекстов удаленного сервера - При разработке драйвера устройства используйте
DeviceContext.getContextManager()
для получения менеджера дерева контекстов - При разработке плагина менеджер контекстов передается как параметр при помощи методов
install(ContextManager cm)
иdeinstall(ContextManager cm)
. В случае применения методовinstall(ServerContext context)
иdeinstall(ServerContext context)
используйтеServerContext.getContextManager()
. - При разработке Агента на Java помните, что у вашего Агента есть только один контекст. Однако получить доступ в его менеджер контекстов можно через
Agent.getContext().getContextManager()
. - При написании скрипта сервера вызовите
ScriptExecutionEnvironment.getScriptContext().getContextManager()
для получения доступа в менеджер контекстов сервера. - При написании скрипта виджетов вызовите
WidgetScriptExecutionEnvironment.getEngine().getServerContextManager()
для получения доступа в менеджер контекстов удаленного сервера. Также можно вызватьWidgetScriptExecutionEnvironment.getComponentContext("componentName").getContextManager()
для получения доступа в менеджер контекстов дерева контекстов компонентов виджета.
Права доступа
Экземпляр объекта CallerController
, включающий текущие права доступа пользователя, должен передаваться в большинство вызовов, относящихся к контексту, если вы пишете код, работающий в виртуальной машине Java SberMobile Server (т.е. при разработке скрипта сервера или плагина). Если этого не сделать, результаты различных исключений отказа в доступе будут нулевыми.
Для получения более подробной информации см. Работа с правами доступа.
Получение индивиуальных контекстов
Есть два вида основных путей, помогающие контексту иметь свой собственный путь:
- Вызвать
get(String path)
или методget(String path, CallerController caller)
отContext
- Вызвать
get(String path)
или методget(String path, CallerController caller)
отContextManager
Они обычно возвращают тот же самый результат, если только не будут использованы в распределенной архитектуре. Однако в распределенной среде их поведение будет полностью иным:
- Методы интерпретации
ContextManager
предоставляют строкуpath
как локальный путь на сервере, которому принадлежитContextManager
. - Методы интерпретации
Context
предоставляют строкуpath
как путь на удаленном сервере, которому принадлежитContext
. Он валиден, если контекст прокси представляет удаленное соседнее устройство посредством распределенной архитектуры.
Поэтому вызов методов |
Пример получения контекста с указанным путем.
|
Метод get()
вернет null, если запрашиваемый контекст не существует или недоступен с этими правами доступа.
Использование метода |
Используйте Context.getParent()
и Context.getChild(String name)
при работе с особым контекстом, чтобы иметь доступ к их родительским и дочерним контекстам соответственно.
Используйте узел ContextManager.getRoot()
, чтобы получить доступ к корню контекста дерева контекстов.
Использование вспомогательных методов
Константы, определенные в классе Пример: |
Обработка списка дочерних контекстов
Для получения списка дочерних контекстов определенного контекста вызовите Context.getChildren()
.
getChildren(CallerController caller) вернет только те дочерние контексты, которые доступны вызывающему пользователю (представленному в виде CallerController ).getChildren() прокси-контекста (т.е. при использовании удаленного API или разработке Агента) вернет только те дочерние контексты, которые доступны пользователю, аутентифицированному в текущем соединении сервера. |
Получение контекстной информации
Интерфейс Context
имеет несколько методов получения основной информации о контексте:
getName()
getPath()
getDescription()
getType()
getGroup()
Контексты прокси
Если вы разрабатываете код, работающий в SberMobile IIoT Platform Client или в любом другом приложении и получаете Context
посредством API, результатом будет получение контекста прокси, который соединяется с удаленным соседним устройством на стороне сервера. Таким образом, даже наипростейшие вызовы метода могут стать результатом ввода/вывода сети и надолго отложатся или даже прекратят работу из-за ошибок сети.