Обращение из внутренней системы
Java-взаимодействие
При таком типе взаимодействия внутренняя система обращается напрямую к Java-элементам lsFusion-системы — как к обычным Java-объектам. Это позволяет выполнять те же операции, что и через сетевые протоколы, но без существенного оверхеда: без сериализации параметров и десериализации результата.
Этот способ особенно удобен и эффективен, когда взаимодействие очень тесное (одна операция требует постоянного обращения в обе стороны — от lsFusion-системы к другой системе и обратно) и/или нужен доступ к специфическим узлам платформы.
Стоит отметить, что для того чтобы обращаться к Java элементам lsFusion системы напрямую, нужно предварительно получить ссылку на некоторый объект, у которого будут интерфейсы по поиску этих Java элементов. Как правило это делается одним из двух способов:
- Если первоначально обращение идет из lsFusion системы через механизм Java-взаимодействия, то в качестве "объекта поиска" можно использовать объект действия, "через которое" идет это обращение (класс этого действия, должен наследоваться от
lsfusion.server.physics.dev.integration.internal.to.InternalAction, у которого, в свою очередь, есть все необходимые интерфейсы). Что именно доступно при таком обращении и пример Java-класса описаны в статье внутренний вызов (INTERNAL). - Если объект, из метода которого необходимо обратиться к lsFusion системе, является Spring bean-ом, нужные платформенные зависимости получаются через dependency injection. Канонический паттерн такого компонента — наследование от иерархии
EventServer; подробности — в статье свой Spring bean (EventServer).
Java-классы и методы, общие для обоих путей (LP / LA, DataSession, ExecutionStack, InternalAction / EventServer и т.д.) — в Java API для интеграций.
SQL-взаимодействие
Системы имеющие доступ к SQL-серверу lsFusion-системы (одной из таких систем, к примеру, является сам SQL-сервер), могут обращаться непосредственно к таблицам и полям, созданным lsFusion-системой, средствами SQL-сервера. При этом необходимо учитывать что, если чтение данных относительно безопасно (за исключением возможного удаления / изменения таблиц и их полей), то при записи данных не будут вызваны никакие события (и соответственно все элементы их использующие - ограничения, агрегации и т.п.), а также не будут пересчитаны никакие материализации. Поэтому записывать данные напрямую в таблицы lsFusion-системы крайне не рекомендуется, а если это все же необходимо, важно учесть все вышеупомянутые особенности.