Работа с контекстами
Первоначальный объект, предоставляющий доступ к дереву контекстов, реализует интерфейс ContextManager. Существует несколько методов получения менеджера контекстов.
Получение менеджера контекстов
Метод получения экземпляра ContextManager зависит от текущей среды:
При разработке приложения с помощью AggreGate 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 AggreGate 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. Он валиден, если контекст прокси представляет удаленное соседнее устройство посредством распределенной архитектуры.
![]() | Поэтому вызов методов |
Пример получения контекста с указанным путем.
Context deviceContext = anotherContext.get("users.admin.devices.device1");Метод get() вернет null, если запрашиваемый контекст не существует или недоступен с этими правами доступа.
![]() | Использование метода |
Используйте Context.getParent() и Context.getChild(String name) при работе с особым контекстом, чтобы иметь доступ к их родительским и дочерним контекстам соответственно.
Используйте узел ContextManager.getRoot(), чтобы получить доступ к корню контекста дерева контекстов.
Использование вспомогательных методов
![]() | Константы, определенные в классе Пример: |
Обработка списка дочерних контекстов
Для получения списка дочерних контекстов определенного контекста вызовите Context.getChildren().
![]() |
|
Получение контекстной информации
Интерфейс Context имеет несколько методов получения основной информации о контексте:
getName()getPath()getDescription()getType()getGroup()
Контексты прокси
Если вы разрабатываете код, работающий в AggreGate Client или в любом другом приложении и получаете Context посредством API, результатом будет получение контекста прокси, который соединяется с удаленным соседним устройством на стороне сервера. Таким образом, даже наипростейшие вызовы метода могут стать результатом ввода/вывода сети и надолго отложатся или даже прекратят работу из-за ошибок сети.
Was this page helpful?


