ENTAXY-248 release 1.8.1
0
aggregate.marker
Normal file
@ -22,7 +22,7 @@ _src/main/resource/template/example-in-connector.ftl_
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
|
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
|
||||||
|
|
||||||
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.QueueInConnectorImpl">
|
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl">
|
||||||
<property name="endpointName" value="example"/>
|
<property name="endpointName" value="example"/>
|
||||||
<property name="systemName" value="[=systemName]"/>
|
<property name="systemName" value="[=systemName]"/>
|
||||||
</bean>
|
</bean>
|
||||||
@ -49,7 +49,7 @@ _src/main/resource/template/example-in-connector.ftl_
|
|||||||
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
|
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
|
||||||
[source, xml]
|
[source, xml]
|
||||||
----
|
----
|
||||||
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.QueueInConnectorImpl">
|
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.DirectVMInConnectorImpl">
|
||||||
<property name="endpointName" value="example"/>
|
<property name="endpointName" value="example"/>
|
||||||
<property name="systemName" value="[=systemName]"/>
|
<property name="systemName" value="[=systemName]"/>
|
||||||
</bean>
|
</bean>
|
||||||
@ -113,7 +113,7 @@ _src/main/resource/template/example-out-connector.ftl_
|
|||||||
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
|
<bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl">
|
||||||
<property name="endpointName" value="example"/>
|
<property name="endpointName" value="example"/>
|
||||||
<property name="systemName" value="[=systemName]"/>
|
<property name="systemName" value="[=systemName]"/>
|
||||||
</bean>
|
</bean>
|
||||||
@ -144,7 +144,7 @@ _src/main/resource/template/example-out-connector.ftl_
|
|||||||
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
|
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
|
||||||
[source, xml]
|
[source, xml]
|
||||||
----
|
----
|
||||||
<bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
|
<bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.DirectVMOutConnectorImpl">
|
||||||
<property name="endpointName" value="example"/>
|
<property name="endpointName" value="example"/>
|
||||||
<property name="systemName" value="[=systemName]"/>
|
<property name="systemName" value="[=systemName]"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
= Shema
|
= Sсhema
|
||||||
|
|
||||||
Есть три типа ресурсов, которые можно загружать в шину и использовать в маршрутах:
|
Есть три типа ресурсов, которые можно загружать в шину и использовать в маршрутах:
|
||||||
|
|
||||||
|
@ -344,6 +344,13 @@ sudo chown -R karaf:karaf /opt/karaf
|
|||||||
sudo sed -i 's/# export JAVA_HOME/export JAVA_HOME=\/opt\/openjdk\/jdk-11.0.11/g' /opt/karaf/bin/setenv
|
sudo sed -i 's/# export JAVA_HOME/export JAVA_HOME=\/opt\/openjdk\/jdk-11.0.11/g' /opt/karaf/bin/setenv
|
||||||
----
|
----
|
||||||
+
|
+
|
||||||
|
. Отредактировать переменную окружения `EXTRA_JAVA_OPTS` для Karaf, чтобы устранить возможность эксплуатацию критической уязвимости Log4j CVE-2021-44228:
|
||||||
|
+
|
||||||
|
[source,bash]
|
||||||
|
----
|
||||||
|
sudo sed -i 's/# export EXTRA_JAVA_OPTS/export EXTRA_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true/g' /opt/karaf/bin/setenv
|
||||||
|
----
|
||||||
|
+
|
||||||
. Создать файл сервиса `/etc/systemd/system/karaf.service` со следующим содержимым:
|
. Создать файл сервиса `/etc/systemd/system/karaf.service` со следующим содержимым:
|
||||||
+
|
+
|
||||||
.karaf.service
|
.karaf.service
|
||||||
@ -495,7 +502,7 @@ karaf@root()>
|
|||||||
|
|
||||||
[source,bash]
|
[source,bash]
|
||||||
----
|
----
|
||||||
feature:repo-add mvn:ru.entaxy.esb/karaf-features/1.8.0/xml/features
|
feature:repo-add mvn:ru.entaxy.esb/karaf-features/1.8.1/xml/features
|
||||||
----
|
----
|
||||||
|
|
||||||
Затем запускается команда установки всех компонентов Entaxy
|
Затем запускается команда установки всех компонентов Entaxy
|
||||||
|
@ -8,3 +8,4 @@ Entaxy have different installation ways OOTB:
|
|||||||
* xref:../../distribution/entaxy-docker/ReadMe.md[Development docker installation]
|
* xref:../../distribution/entaxy-docker/ReadMe.md[Development docker installation]
|
||||||
* xref:../../features/README.md[Development standalone installation]
|
* xref:../../features/README.md[Development standalone installation]
|
||||||
* xref:install.adoc[Enterprise environment installation]
|
* xref:install.adoc[Enterprise environment installation]
|
||||||
|
* xref:local-installation/local-installation.adoc[Local installation]
|
||||||
|
@ -5,6 +5,7 @@ __Alternative languages:__
|
|||||||
= Установка
|
= Установка
|
||||||
Entaxy из коробки имеет разные варианты установки:
|
Entaxy из коробки имеет разные варианты установки:
|
||||||
|
|
||||||
* xref:local-installation/ReadMe.md[Установка для разработки в докер]
|
* xref:../../distribution/entaxy-docker/ReadMe.md[Установка для разработки в докер]
|
||||||
* xref:../../features/README.ru.md[Установка для разработки отдельных серверных приложений]
|
* xref:../../features/README.ru.md[Установка для разработки отдельных серверных приложений]
|
||||||
* xref:install.adoc[Установка на промышленное окружение]
|
* xref:install.adoc[Установка на промышленное окружение]
|
||||||
|
* xref:local-installation/local-installation.ru.adoc[Локальная установка]
|
||||||
|
@ -1,141 +0,0 @@
|
|||||||
## Docker compose для сборки и запуска Entaxy.
|
|
||||||
|
|
||||||
Запуск локального окружения с несколькими docker контейнерами:
|
|
||||||
* Караф
|
|
||||||
* Брокер
|
|
||||||
* СУБД
|
|
||||||
* Менеджер артефактов
|
|
||||||
|
|
||||||
Для начала клонируем репозиторий и переходим в корень проекта:
|
|
||||||
```bash
|
|
||||||
git clone <entaxy-framework-repository>
|
|
||||||
cd entaxy-framework
|
|
||||||
```
|
|
||||||
Далее у нас есть разные варианты хранения необходимых для установки Entaxy артефактов.
|
|
||||||
### 1. Самый простой способ: локальный репозиторий артефактов включаеться в образ карафа.
|
|
||||||
В корневом POM находится профиль для деплоя артефактов в образ карафа:
|
|
||||||
```xml
|
|
||||||
<profile>
|
|
||||||
<id>docker.file.repo</id>
|
|
||||||
<distributionManagement>
|
|
||||||
<snapshotRepository>
|
|
||||||
<id>entaxy-maven-repo-file</id>
|
|
||||||
<url>file:./distribution/entaxy-docker/karaf/repo</url>
|
|
||||||
</snapshotRepository>
|
|
||||||
</distributionManagement>
|
|
||||||
</profile>
|
|
||||||
```
|
|
||||||
Запускаем мевен деплой из корня проекта с этим профилем:
|
|
||||||
```bash
|
|
||||||
mvn deploy -P docker.file.repo
|
|
||||||
```
|
|
||||||
И после успешной сборки запускаем контейнеры из директории проекта, в которой находится docker-compose.yml:
|
|
||||||
```bash
|
|
||||||
cd ./distribution/entaxy-docker
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
Или `docker compose up` для новых версий docker.
|
|
||||||
После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала.
|
|
||||||
```bash
|
|
||||||
docker-compose stop
|
|
||||||
docker-compose start
|
|
||||||
```
|
|
||||||
После запуска контейнеров открываем новый терминал и заходим в караф:
|
|
||||||
```bash
|
|
||||||
docker-compose exec karaf /opt/apache-karaf/bin/client
|
|
||||||
```
|
|
||||||
или ssh клиент с дальнейшим вводом пароля (karaf)
|
|
||||||
```bash
|
|
||||||
ssh -p 8101 karaf@localhost
|
|
||||||
```
|
|
||||||
|
|
||||||
И в консоли карафа запускаем скрипт с установкой необходимых фич:
|
|
||||||
```bash
|
|
||||||
shell:source ./install.karaf
|
|
||||||
```
|
|
||||||
Ждём окончания деплоя в караф.
|
|
||||||
(Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`)
|
|
||||||
|
|
||||||
### 2. Reposilite: легковесный http репозиторий артефактов запускается в отдельном контейнере.
|
|
||||||
Комментируем в файле install.karaf строку начинающуюся с:
|
|
||||||
```bash
|
|
||||||
config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories file:/opt/apache-karaf/repo
|
|
||||||
```
|
|
||||||
И убираем комментарий в строке начинающейся:
|
|
||||||
```bash
|
|
||||||
#config:property-set -p org.ops4j.pax.url.mvn org.ops4j.pax.url.mvn.repositories http://maven-repo/snapshots
|
|
||||||
```
|
|
||||||
|
|
||||||
Запускаем контейнеры из директории проекта, в которой находится docker-compose.yml:
|
|
||||||
```bash
|
|
||||||
cd ./distribution/entaxy-docker
|
|
||||||
docker-compose up
|
|
||||||
```
|
|
||||||
Или `docker compose up` для новых версий docker.
|
|
||||||
После запуска комманды мы будем видеть прогресс сборки образов, запуска контейнеров и логи запущенных приложений. Для остановки контейнеров достаточно нажать сочетание клавиш Ctrl+C или через команды запущенные из другого окна/вкладки терминала.
|
|
||||||
```bash
|
|
||||||
docker-compose stop
|
|
||||||
docker-compose start
|
|
||||||
```
|
|
||||||
|
|
||||||
Для деплоя в reposilite добавляем учётные данные в конфигурацию мавена (`~/.m2/settings.xml`):
|
|
||||||
```xml
|
|
||||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
||||||
<servers>
|
|
||||||
<server>
|
|
||||||
<id>entaxy-maven-repo</id>
|
|
||||||
<username>admin</username>
|
|
||||||
<password>aW7frfS9NPGrOnuNBMf9gyO0eXNRaCoOGtXHTcLU5akDFJ9ACiUJhgmZxlOKnLC5</password>
|
|
||||||
</server>
|
|
||||||
</servers>
|
|
||||||
</settings>
|
|
||||||
```
|
|
||||||
В корневом POM находится профиль для деплоя артефактов на сервер reposilite:
|
|
||||||
```xml
|
|
||||||
<profile>
|
|
||||||
<id>docker.reposilite</id>
|
|
||||||
<distributionManagement>
|
|
||||||
<snapshotRepository>
|
|
||||||
<id>entaxy-maven-repo</id>
|
|
||||||
<url>http://127.0.0.1:8081/snapshots</url>
|
|
||||||
</snapshotRepository>
|
|
||||||
</distributionManagement>
|
|
||||||
</profile>
|
|
||||||
```
|
|
||||||
Запускаем мевен деплой из корня проекта с этим профилем:
|
|
||||||
```bash
|
|
||||||
mvn deploy -P docker.reposilite
|
|
||||||
```
|
|
||||||
После успешной сборки открываем новый терминал и заходим в караф:
|
|
||||||
```bash
|
|
||||||
docker-compose exec karaf /opt/apache-karaf/bin/client
|
|
||||||
```
|
|
||||||
или ssh клиент с дальнейшим вводом пароля (karaf)
|
|
||||||
```bash
|
|
||||||
ssh -p 8101 karaf@localhost
|
|
||||||
```
|
|
||||||
|
|
||||||
И в консоли карафа запускаем скрипт с установкой необходимых фич:
|
|
||||||
```bash
|
|
||||||
shell:source ./install.karaf
|
|
||||||
```
|
|
||||||
Ждём окончания деплоя в караф.
|
|
||||||
(Не всегда полная установка проходит с первой попытки и тогда помогает повторный запуск `source install.karaf`)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Также есть вариант с nexus
|
|
||||||
После старта получаем пароль для admin через команду:
|
|
||||||
`docker-compose exec nexus cat /nexus-data/admin.password`.
|
|
||||||
Через админку нужно разрешить анонимный деплой или настроить доступы.
|
|
||||||
Урл для install.karaf
|
|
||||||
`http://nexus:8081/repository/maven-snapshots/@id=local-nexus@snapshots@noreleases`
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Остановить все контейнеры
|
|
||||||
`docker-compose down`
|
|
||||||
Остановить и удалить хранилища с БД и репой
|
|
||||||
`docker-compose down -v`
|
|
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 43 KiB |
@ -0,0 +1,246 @@
|
|||||||
|
= Локальная установка Entaxy на рабочую станцию или сервер.
|
||||||
|
|
||||||
|
__Alternative languages:__
|
||||||
|
|
||||||
|
* xref:windows-local-installation.adoc[English]
|
||||||
|
|
||||||
|
|
||||||
|
== Введение.
|
||||||
|
|
||||||
|
В этой инструкции мы рассмотрим установку Entaxy. Установка на все ОС проходит аналогичным образом и отличается выбором соответствующих инсталляторов или использованием пакетных менеджеров.
|
||||||
|
|
||||||
|
|
||||||
|
== Установка Java.
|
||||||
|
|
||||||
|
. Скачиваем и устанавливаем JAVA. Для работы Entaxy рекомендуется Java 11. Работа платформы протестирована на OpenJDK и LibericaJDK от BellSoft (https://libericajdk.ru/pages/downloads/)
|
||||||
|
|
||||||
|
. Создаем переменную окружения JAVA_HOME.
|
||||||
|
|
||||||
|
. Добавляем абсолютный путь к директории bin в системную переменную окружения PATH.
|
||||||
|
|
||||||
|
|
||||||
|
== Дистрибутивы Entaxy
|
||||||
|
|
||||||
|
Сущетсвет несколько вариантов сборок Entaxy, которые доступны по адресу https://entaxy.ru/download
|
||||||
|
|
||||||
|
. `entaxy-assembly-compact*` - все-в-одном, брокер, бд и графический веб-интерфейс в одной сборке. См. xref:#_установка_all_in_one [Установка all-in-one]
|
||||||
|
|
||||||
|
. `entaxy-assembly*` - сборка без предустановленного графического веб-интерфейса. См. xref:#_установка_без_ui [Установка без UI]
|
||||||
|
|
||||||
|
. `entaxy-assembly-with-ui*` - сборка без предустановленного брокера сообщений. См. xref:#_установка_с_внешним_брокером [Установка с внешним брокером]
|
||||||
|
|
||||||
|
. Все компоненты устанавливаются отдельно. См. xref:#_покомпонентная_установка [Покомпонентная установка]
|
||||||
|
|
||||||
|
|
||||||
|
== Установка all-in-one
|
||||||
|
|
||||||
|
. Распаковываем архив `entaxy-assembly-compact*`
|
||||||
|
|
||||||
|
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
|
||||||
|
|
||||||
|
. Переходим в каталог `/bin` приложения и запускаем:
|
||||||
|
- entaxy - для Linux
|
||||||
|
- entaxy.bat - для Windows
|
||||||
|
|
||||||
|
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
|
||||||
|
|
||||||
|
|
||||||
|
== Установка без UI
|
||||||
|
|
||||||
|
. Распаковываем архив `entaxy-assembly*`
|
||||||
|
|
||||||
|
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
|
||||||
|
|
||||||
|
. Переходим в каталог `/bin` приложения и запускаем:
|
||||||
|
- entaxy - для Linux
|
||||||
|
- entaxy.bat - для Windows
|
||||||
|
|
||||||
|
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
|
||||||
|
|
||||||
|
. Веб-интерфейс можно установить, после запуска системы, командой (в консоли Карафа): `source scripts/entaxy-ui.install`
|
||||||
|
|
||||||
|
|
||||||
|
== Установка с внешним брокером
|
||||||
|
|
||||||
|
. Для установки брокера смотрите инструкцию: xref:#_установка_и_настройка_брокера[Установка и настройка брокера]
|
||||||
|
|
||||||
|
. Распаковываем архив `entaxy-assembly-with-ui*`
|
||||||
|
|
||||||
|
. Распакованный архив лучше перенести в другое место, чтобы абсолютный путь до каталога приложения не был слишком длинным, также необходимо чтобы путь содержал только латинские символы и был без пробелов.
|
||||||
|
|
||||||
|
. Переходим в каталог `/bin` приложения и запускаем:
|
||||||
|
- entaxy - для Linux
|
||||||
|
- entaxy.bat - для Windows
|
||||||
|
|
||||||
|
. Немного ждем и проверяем, что система корректно запустилась см. xref:#_проверка_готовности_системы [Проверка готовности системы]
|
||||||
|
|
||||||
|
|
||||||
|
== Покомпонентная установка
|
||||||
|
|
||||||
|
=== Установка и настройка БД.
|
||||||
|
|
||||||
|
Entaxy не привязана к какой-либо конкретной СУБД, но по умолчанию используется встроенная H2, в данной инструкции будет показано как установить и настроить систему на работу с БД Postgres.
|
||||||
|
|
||||||
|
. Скачиваем инсталятор с официального сайта (https://www.enterprisedb.com/downloads/postgres-postgresql-downloads).
|
||||||
|
|
||||||
|
. Запускаем установку. image:image/postgresql-installation-1.jpg[postgresql-installation]
|
||||||
|
|
||||||
|
. Оставляем все настройки по умолчанию и устанавливаем пароль `postgres`.
|
||||||
|
|
||||||
|
. Запускаем pgAdmin 4 и устанавливаем мастер пароль для приложения `postgres`. image:image/pgadmin-start.jpg[pgadmin-start]
|
||||||
|
|
||||||
|
. Добавляем подключение к локальному серверу БД.
|
||||||
|
|
||||||
|
. Выбираем доступную базу данных из списка и переходим в Query Tool, в котором выполняем sql запрос:
|
||||||
|
|
||||||
|
[source,sql]
|
||||||
|
----
|
||||||
|
CREATE USER "entaxy" WITH PASSWORD 'entaxy';
|
||||||
|
----
|
||||||
|
image:image/pgadmin-create-user.jpg[pgadmin-create-user]
|
||||||
|
|
||||||
|
[start=7]
|
||||||
|
. Теперь в том же окне по очереди (по одной строчке) выполняем запросы для создания необходимых для Entaxy баз данных.
|
||||||
|
|
||||||
|
[source,sql]
|
||||||
|
----
|
||||||
|
CREATE DATABASE esb_entaxy;
|
||||||
|
----
|
||||||
|
|
||||||
|
[source,sql]
|
||||||
|
----
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE esb_entaxy TO entaxy;
|
||||||
|
----
|
||||||
|
|
||||||
|
[source,sql]
|
||||||
|
----
|
||||||
|
CREATE DATABASE cache;
|
||||||
|
----
|
||||||
|
|
||||||
|
[source,sql]
|
||||||
|
----
|
||||||
|
GRANT ALL PRIVILEGES ON DATABASE cache TO entaxy;
|
||||||
|
----
|
||||||
|
|
||||||
|
На этом настройка СУБД завершена.
|
||||||
|
|
||||||
|
|
||||||
|
=== Установка и настройка брокера
|
||||||
|
|
||||||
|
В этой инструкции мы рассмотрим использование брокера сообщений Artemis.
|
||||||
|
|
||||||
|
. Скачиваем архив с официального сайта (https://activemq.apache.org/components/artemis/download/).
|
||||||
|
|
||||||
|
. Распаковываем архив и переходим в директорию bin.
|
||||||
|
|
||||||
|
. Запускаем в командной строке создание брокера `artemis create --user entaxy --password entaxy --allow-anonymous $ARTEMIS_HOME/brokers/entaxy-broker`.
|
||||||
|
|
||||||
|
. После создания брокера надо открыть файл `$ARTEMIS_HOME/brokers/entaxy-broker/etc/broker.xml` и проверить, что автоматическое удаление очередей и адресов отключено:
|
||||||
|
|
||||||
|
[source,xml]
|
||||||
|
----
|
||||||
|
<!--default for catch all-->
|
||||||
|
<address-setting match="#">
|
||||||
|
|
||||||
|
<auto-delete-queues>false</auto-delete-queues>
|
||||||
|
<auto-delete-addresses>false</auto-delete-addresses>
|
||||||
|
|
||||||
|
</address-setting>
|
||||||
|
----
|
||||||
|
|
||||||
|
. Запускаем брокер сообщений `$ARTEMIS_HOME/brokers/entaxy-broker/bin/artemis run`
|
||||||
|
|
||||||
|
Установка брокера завершена.
|
||||||
|
|
||||||
|
|
||||||
|
=== Установка Entaxy
|
||||||
|
|
||||||
|
. xref:#_установка_с_внешним_брокером [Выполняем установку Entaxy без брокера]
|
||||||
|
|
||||||
|
. xref:#_настройка_entaxy_на_внешнюю_базы_данных [Перенастраиваем Entaxy на внешнюю БД], установленную на предыдущем шаге.
|
||||||
|
|
||||||
|
|
||||||
|
== Проверка готовности системы
|
||||||
|
|
||||||
|
Чтобы проверить, что все сервисы Entaxy готовы к работае, открываем следующий адрес в браузере http://localhost:8181/system/health
|
||||||
|
|
||||||
|
При полной готовности система выдаст следующую информацию:
|
||||||
|
image:image/health-check.png[]
|
||||||
|
|
||||||
|
Если при первом запуске Entaxy Connections находится в статусе TEMPORARILY_UNAVAILABLE, необходимо перезапустить Entaxy.
|
||||||
|
|
||||||
|
== Настройка Entaxy на внешнюю базу данных
|
||||||
|
|
||||||
|
По умолчанию все сборки Entaxy используют встроенную БД H2.
|
||||||
|
|
||||||
|
Для того чтобы перенестроить Entaxy на использование внешней БД, нужно выполнить следующие шаги:
|
||||||
|
|
||||||
|
В каталоге `/etc` приложения:
|
||||||
|
|
||||||
|
. Найти файлы `org.ops4j.datasource-entaxy.esb.cache.cfg` и `org.ops4j.datasource-entaxy.esb.storage.cfg`
|
||||||
|
|
||||||
|
. Удалить их или переименовать путем добавления постфикса, например, `*.defaultdb`.
|
||||||
|
|
||||||
|
. Найти файлы `org.ops4j.datasource-entaxy.esb.cache.cfg.pg` и `org.ops4j.datasource-entaxy.esb.storage.cfg.pg` и удалить постфикс `.pg` из имени.
|
||||||
|
|
||||||
|
. Если при выполнении установки БД были указаны другие данные или была выполненна установка на другом хосте, то вводим соответствующие значения в файлах.
|
||||||
|
|
||||||
|
|
||||||
|
== Тестирование.
|
||||||
|
|
||||||
|
Для проверки работоспособности платформы переходим к xref:../../connectors/uniform-exchange-service/tests/postman.adoc[инструкции по тестированию].
|
||||||
|
|
||||||
|
|
||||||
|
== Кластерный запуск Entaxy
|
||||||
|
|
||||||
|
По умолчанию Entaxy использует мультикаст для поиска компонентов кластера по сети, необходимо убедиться что настройки вашего оборудования и файервол настроены для широковещания.
|
||||||
|
|
||||||
|
Чтобы два и более экземпляра соединились в кластер достаточно их запустить на разных хостах из одной подсети.
|
||||||
|
|
||||||
|
|
||||||
|
=== Настройка статичных адресов узлов кластера
|
||||||
|
|
||||||
|
Если требуется указать статичные адреса узлов кластера поиска узлов, то это можно сделать в файле `/etc/hazelcast.xml`
|
||||||
|
|
||||||
|
- Выключаем мультикаст `<multicast enabled="false">`
|
||||||
|
- Включаем ip `<tcp-ip enabled="true">`
|
||||||
|
|
||||||
|
например:
|
||||||
|
[source,xml]
|
||||||
|
----
|
||||||
|
<multicast enabled="false">
|
||||||
|
<multicast-group>224.2.2.3</multicast-group>
|
||||||
|
<multicast-port>54327</multicast-port>
|
||||||
|
</multicast>
|
||||||
|
<tcp-ip enabled="true">
|
||||||
|
<interface>127.0.0.1</interface>
|
||||||
|
</tcp-ip>
|
||||||
|
----
|
||||||
|
|
||||||
|
Также можно задавать маски адресов:
|
||||||
|
[source,xml]
|
||||||
|
----
|
||||||
|
<tcp-ip enabled="true">
|
||||||
|
<interface>192.168.1.*</interface>
|
||||||
|
</tcp-ip>
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
=== Проверка кластера
|
||||||
|
|
||||||
|
Чтобы понимать, что экземпляры соединились в кластер, выполняем следующую команду в одной из консолей карафа: `cluster:node-list`
|
||||||
|
|
||||||
|
image:image/cluster-note-list.png[]
|
||||||
|
|
||||||
|
|
||||||
|
=== Запуск нескольких экземпляров на одном хосте
|
||||||
|
|
||||||
|
Для того чтобы запустить несколько экземпляров системы на одном хосте, необходимо в файле `etc/entaxy.properties` изменить значения свойств:
|
||||||
|
|
||||||
|
- entaxy.rmiRegistryPort
|
||||||
|
- entaxy.rmiServerPort
|
||||||
|
- entaxy.jmxmpPort
|
||||||
|
- entaxy.sshPort
|
||||||
|
- entaxy.org.osgi.service.http.port
|
||||||
|
- entaxy.service.port.management
|
||||||
|
- entaxy.service.port.subscription
|
@ -1,116 +0,0 @@
|
|||||||
= Локальная установка Entaxy на рабочую станцию или сервер.
|
|
||||||
|
|
||||||
__Alternative languages:__
|
|
||||||
|
|
||||||
* xref:windows-local-installation.adoc[English]
|
|
||||||
|
|
||||||
== Введение.
|
|
||||||
|
|
||||||
В этой инструкции мы рассмотрим установку Entaxy, включая брокер и бд, на одной машине с операционной системой Windows. Установка на другие ОС проходит аналогичным образом и отличается выбором соответствующих инсталяторов или использованием пакетных менеджеров.
|
|
||||||
|
|
||||||
== Шаг 1: Установка Java.
|
|
||||||
|
|
||||||
Скачиваем и устанавливаем JAVA. Для работы Entaxy рекомендуется Java 11. Работа платформы протестирована на OpenJDK и LibericaJDK от BellSoft (https://libericajdk.ru/pages/downloads/).
|
|
||||||
|
|
||||||
== Шаг 2: Установка и настройка Maven.
|
|
||||||
|
|
||||||
1. Скачиваем архив с официального сайта (https://maven.apache.org/download.cgi).
|
|
||||||
2. Распаковываем архив и переходи в директорию bin.
|
|
||||||
3. Копируем абсолютный путь к директории bin и добавляем его в системную переменную окружения PATH.
|
|
||||||
|
|
||||||
== Шаг 3: Получение исходных кодов и сборка проекта.
|
|
||||||
|
|
||||||
1. Для получения исходных кодов платформы переходим по адресу https://git.emdev.ru/entaxy-public/entaxy-public и нажимаем иконку `скачать`. image:image/source-download.jpg[source-download]
|
|
||||||
2. Распаковываем архив и переходим в корневую директорию проекта `entaxy-public`.
|
|
||||||
3. Собираем проект командой `mvn install`.
|
|
||||||
|
|
||||||
== Шаг 4: Установка и настройка БД.
|
|
||||||
|
|
||||||
Entaxy не привязана к какой-либо конкретной СУБД, но в большинстве случаев используется PostgreSQL.
|
|
||||||
|
|
||||||
1. Скачиваем инсталятор с официального сайта (https://www.enterprisedb.com/downloads/postgres-postgresql-downloads).
|
|
||||||
2. Запускаем установку. image:image/postgresql-installation-1.jpg[postgresql-installation]
|
|
||||||
3. Оставляем все настройки по умолчанию и устанавливаем пароль `postgres`.
|
|
||||||
4. Запускаем pgAdmin 4 и устанавливаем мастер пароль для приложения `postgres`. image:image/pgadmin-start.jpg[pgadmin-start]
|
|
||||||
5. Добавляем подключение к локальному серверу БД.
|
|
||||||
6. Выбираем доступную базу данных из списка и переходим в Query Tool, в котором выполняем sql запрос:
|
|
||||||
|
|
||||||
[source,sql]
|
|
||||||
----
|
|
||||||
CREATE USER "entaxy" WITH PASSWORD 'entaxy';
|
|
||||||
----
|
|
||||||
image:image/pgadmin-create-user.jpg[pgadmin-create-user]
|
|
||||||
[start=7]
|
|
||||||
. Теперь в том же окне по очереди (по одной строчке) выполняем запросы для создания необходимых для Entaxy баз данных.
|
|
||||||
|
|
||||||
[source,sql]
|
|
||||||
----
|
|
||||||
CREATE DATABASE esb_entaxy;
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,sql]
|
|
||||||
----
|
|
||||||
GRANT ALL PRIVILEGES ON DATABASE esb_entaxy TO entaxy;
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,sql]
|
|
||||||
----
|
|
||||||
CREATE DATABASE cache;
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,sql]
|
|
||||||
----
|
|
||||||
GRANT ALL PRIVILEGES ON DATABASE cache TO entaxy;
|
|
||||||
----
|
|
||||||
|
|
||||||
На этом настройка СУБД завершена.
|
|
||||||
|
|
||||||
== Шаг 5: Установка и настройка брокера.
|
|
||||||
|
|
||||||
В этой инструкции мы рассмотрим использование брокера сообщений Artemis.
|
|
||||||
|
|
||||||
1. Скачиваем архив с официального сайта (https://activemq.apache.org/components/artemis/download/).
|
|
||||||
2. Распаковываем архив и переходим в директорию bin.
|
|
||||||
3. Запускаем в командной строке создание брокера `artemis create --user entaxy --password entaxy --allow-anonymous $ARTEMIS_HOME/brokers/entaxy-broker`.
|
|
||||||
4. После создания брокера надо открыть файл `$ARTEMIS_HOME/brokers/entaxy-broker/etc/broker.xml` и проверить, что автоматическое удаление очередей и адресов отключено:
|
|
||||||
|
|
||||||
[source,xml]
|
|
||||||
----
|
|
||||||
<!--default for catch all-->
|
|
||||||
<address-setting match="#">
|
|
||||||
|
|
||||||
<auto-delete-queues>false</auto-delete-queues>
|
|
||||||
<auto-delete-addresses>false</auto-delete-addresses>
|
|
||||||
|
|
||||||
</address-setting>
|
|
||||||
----
|
|
||||||
5. Запускаем брокер сообщений `$ARTEMIS_HOME/brokers/entaxy-broker/bin/artemis run`
|
|
||||||
|
|
||||||
Установка брокера завершена.
|
|
||||||
|
|
||||||
== Шаг 6: Установка и запуск карафа.
|
|
||||||
|
|
||||||
1. Скачать Karaf Runtime 4.2.9 (Binary Distribution : ZIP) с официального сайта (https://archive.apache.org/dist/karaf/4.2.9/apache-karaf-4.2.9.zip).
|
|
||||||
2. Распаковываем архив и переходим в директорию `etc`.
|
|
||||||
3. Копируем в директорию `etc` карафа все файлы исходных кодов из директории `entaxy-public\features\target\cfg` и ещё один файл `entaxy-public\features\target\script\install.karaf`.
|
|
||||||
4. Переходим в директорию `bin` карафа и запускаем командой `karaf`
|
|
||||||
После запуска откроется консоль карафа.
|
|
||||||
|
|
||||||
== Шаг 7: Установка Entaxy в караф.
|
|
||||||
|
|
||||||
В командной строке карафа выполнить команду
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
shell:source etc/install.karaf
|
|
||||||
----
|
|
||||||
Если времени на установку не хватило, то нужно повторить последнюю команду или выполнить команды установки построчно. Для отображения списка команд достаточно в консоли карафа выполнить команду
|
|
||||||
[source,bash]
|
|
||||||
----
|
|
||||||
cat etc/install.karaf
|
|
||||||
----
|
|
||||||
|
|
||||||
После успешной установки, выполняем команду `list`, чтобы убедиться, что все модули находятся в состоянии `Active`.
|
|
||||||
|
|
||||||
== Шаг 8: Тестирование.
|
|
||||||
|
|
||||||
Для проверки работоспособности платформы переходим к xref:../../connectors/uniform-exchange-service/tests/postman.adoc[инструкции по тестированию].
|
|
29
documentation/monitoring/hawtio.adoc
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
= Использование hawtio для мониторинга entaxy
|
||||||
|
|
||||||
|
hawtio доступно по адресу http://{nginx_address}/hawtio/
|
||||||
|
|
||||||
|
* Открываем в браузере hawtio и аутентифицируемся как karaf / karaf
|
||||||
|
|
||||||
|
http://10.24.2.33:8181/hawtio/
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-43-58.png[]
|
||||||
|
|
||||||
|
* При успешной аутентификации видим вкладку camel со всеми маршрутами и возможностью посмотреть статистику по маршрутам
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-45-07.png[]
|
||||||
|
|
||||||
|
* Возможность просмотреть логи
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-45-35.png[]
|
||||||
|
|
||||||
|
* Возможность просмотреть метрику
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-45-55.png[]
|
||||||
|
|
||||||
|
* Общую статистику можно увидеть на вкладке JMX, выбрав Camel Contexts (отображение данных бывает с небольшой паузой)
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-46-36.png[]
|
||||||
|
|
||||||
|
* Также можно увидеть визуальное отображение маршрута
|
||||||
|
|
||||||
|
image::screenshots/image_2021-09-30_12-47-18.png[]
|
After Width: | Height: | Size: 625 KiB |
After Width: | Height: | Size: 237 KiB |
After Width: | Height: | Size: 271 KiB |
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 339 KiB |
After Width: | Height: | Size: 171 KiB |
@ -1,187 +0,0 @@
|
|||||||
# Entaxy features install
|
|
||||||
|
|
||||||
### Alternative languages
|
|
||||||
|
|
||||||
[Russian](README.ru.md)
|
|
||||||
|
|
||||||
### Introduction
|
|
||||||
|
|
||||||
You need several steps for Entaxy features installation.
|
|
||||||
Use Java 11+.
|
|
||||||
|
|
||||||
### Build
|
|
||||||
You will need to compile this example first:
|
|
||||||
|
|
||||||
mvn install
|
|
||||||
|
|
||||||
### Run
|
|
||||||
|
|
||||||
To run the example on Apache Karaf 4.x or newer
|
|
||||||
|
|
||||||
#### Step 1: Karaf
|
|
||||||
|
|
||||||
Launch the server
|
|
||||||
|
|
||||||
karaf / karaf.bat
|
|
||||||
|
|
||||||
|
|
||||||
#### Step 2: DB, artemis and artefact manager Setup
|
|
||||||
|
|
||||||
If use docker run Artemis
|
|
||||||
|
|
||||||
sudo docker run --rm -p 8161:8161 -p 61616:61616 -e ARTEMIS_USERNAME=entaxy -e ARTEMIS_PASSWORD=entaxy --name=artemis1 -d vromero/activemq-artemis
|
|
||||||
|
|
||||||
And run postgres
|
|
||||||
|
|
||||||
sudo docker run --name entaxy_db -p 5432:5432 -v /etc/timezone:/etc/timezone:ro -e POSTGRES_PASSWORD=entaxy -e POSTGRES_USER=entaxy -e POSTGRES_DB=cache -d postgres
|
|
||||||
|
|
||||||
or mssql
|
|
||||||
|
|
||||||
sudo docker run --name mssql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=entaxy' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-CU8-ubuntu
|
|
||||||
|
|
||||||
`By default project use two db: cache и esb_entaxy,`
|
|
||||||
`Name of db wrote in org.ops4j.datasource-entaxy.esb.*.cfg`
|
|
||||||
|
|
||||||
and run nexus, if do you want to use it(necessary for system-management to work)
|
|
||||||
|
|
||||||
sudo docker run -d -p 8081:8081 --name nexus sonatype/nexus3
|
|
||||||
|
|
||||||
Now we look at the admin password through the command:
|
|
||||||
|
|
||||||
docker exec nexus cat /nexus-data/admin.password
|
|
||||||
And then we go to the admin panel through the browser on http://localhost:8081/.
|
|
||||||
By default, it needs to create a user entaxy / entaxy and a maven repository called entaxy to work.
|
|
||||||
|
|
||||||
On Docker Toolbox, errors may occur due to insufficient memory, solved by changing the memory allocation at startup`
|
|
||||||
|
|
||||||
docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g" sonatype/nexus3
|
|
||||||
|
|
||||||
#### Step 3: Preparing and launching karaf
|
|
||||||
|
|
||||||
Copy the following files from the entaxy-framework\features\src\main\cfg\ repository to etc karaf
|
|
||||||
|
|
||||||
jre.properties
|
|
||||||
org.apache.karaf.cellar.groups.cfg
|
|
||||||
|
|
||||||
|
|
||||||
Also, the local nexus repository must be added to the standard repositories in the file org.ops4j.pax.url.mvn.cfg property org.ops4j.pax.url.mvn.repositories.`
|
|
||||||
|
|
||||||
`The user and the name of the repository are specified in the ru.entaxy.esb.deployer.nexus.cfg configuration file.`
|
|
||||||
|
|
||||||
|
|
||||||
Running Apache Karaf 4.x or newer
|
|
||||||
|
|
||||||
karaf
|
|
||||||
|
|
||||||
Or starting karaf with cleaning to its original state
|
|
||||||
|
|
||||||
karaf clean
|
|
||||||
|
|
||||||
## Step 4: Installing all features in one go using the karaf command line
|
|
||||||
|
|
||||||
shell:source <project-directory>/entaxy-framework/features/src/main/script/install.karaf
|
|
||||||
|
|
||||||
- After that you need to check the configurations of connections to the database in the files org.ops4j.datasource-entaxy.esb. *. Cfg
|
|
||||||
- Check the address of the broker in the file ru.entaxy.esb.cfg property ru.entaxy.esb.jms.url
|
|
||||||
- Check broker address in init/entaxy-platform-connections.json file "name": "entaxy-broker" connection in which property url
|
|
||||||
- Replace org.apache.karaf.cellar.groups.cfg file
|
|
||||||
|
|
||||||
#### Step 4a: Add features
|
|
||||||
|
|
||||||
Add features required
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb/karaf-features/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Install entaxy
|
|
||||||
|
|
||||||
feature:install entaxy-all
|
|
||||||
|
|
||||||
Add base feature required
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/base/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Install base
|
|
||||||
|
|
||||||
feature:install base
|
|
||||||
|
|
||||||
Add core feature required
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/core/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Install core
|
|
||||||
|
|
||||||
feature:install core
|
|
||||||
|
|
||||||
Add entaxy-uniform-service feature required
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime.modules/uniform-service/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Install entaxy-uniform-service
|
|
||||||
|
|
||||||
feature:install entaxy-uniform-service
|
|
||||||
|
|
||||||
Useful comand for dev
|
|
||||||
|
|
||||||
bundle:watch mvn:ru.entaxy.esb/esb/1.8.0
|
|
||||||
|
|
||||||
#### Step 5: Verify that your service is available using the following url in the browser.
|
|
||||||
|
|
||||||
We assume you're using Karaf's default PAX Web configuration which uses port `8181` for http. If you would like to use another port or https, change the configuration in `${KARAF_HOME}/etc/org.ops4j.pax.web.cfg`. The immediate extension after the hostname and port ("cxf" in the below URL) is configured via the org.apache.cxf.osgi.cfg file (Please see [http://team.ops4j.org/wiki//display/paxweb/Pax+Web](http://team.ops4j.org/wiki//display/paxweb/Pax+Web) for more information on PAX Web).
|
|
||||||
|
|
||||||
[http://localhost:8181/cxf/system-management?wsdl](http://localhost:8181/cxf/system-management?wsdl)
|
|
||||||
|
|
||||||
#### Step 6: Start SOAPUI or Postman
|
|
||||||
|
|
||||||
POST request to
|
|
||||||
|
|
||||||
http://localhost:8181/cxf/system-management
|
|
||||||
|
|
||||||
Send test request:
|
|
||||||
|
|
||||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/">
|
|
||||||
<soapenv:Header/>
|
|
||||||
<soapenv:Body>
|
|
||||||
<sys:listTemplateRequest/>
|
|
||||||
</soapenv:Body>
|
|
||||||
</soapenv:Envelope>
|
|
||||||
|
|
||||||
### Forum, Help, etc
|
|
||||||
|
|
||||||
If you hit an problems please let us know on the Camel Forums
|
|
||||||
<http://camel.apache.org/discussion-forums.html>
|
|
||||||
|
|
||||||
Please help us make Apache Camel better - we appreciate any feedback you may
|
|
||||||
have. Enjoy!
|
|
||||||
|
|
||||||
|
|
||||||
The Camel riders!
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Reinstall
|
|
||||||
bin/karaf clean
|
|
||||||
shell:source install.karaf
|
|
||||||
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
<https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/>
|
|
||||||
|
|
||||||
#### Install
|
|
||||||
|
|
||||||
npm install -g newman
|
|
||||||
|
|
||||||
#### Run
|
|
||||||
|
|
||||||
cd test
|
|
||||||
newman run "Entaxy Integration Tests.postman_collection.json" -e "entaxy dev proxy.postman_environment.json"
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
newman run "Entaxy Integration Tests.postman_collection.json" --env-var base_url=http://localhost:8181/cxf
|
|
||||||
|
|
||||||
#### CXF logging messages
|
|
||||||
|
|
||||||
config:property-set -p org.apache.cxf.features.logging enabled true
|
|
||||||
|
|
||||||
and after restart bundle with cxf service
|
|
@ -1,157 +0,0 @@
|
|||||||
# Установка фич (features)
|
|
||||||
|
|
||||||
### Languages
|
|
||||||
|
|
||||||
[English](README.md)
|
|
||||||
|
|
||||||
### Введение
|
|
||||||
|
|
||||||
Для установки фич понадобятся несколько шагов.
|
|
||||||
|
|
||||||
Использовать Java 11+
|
|
||||||
|
|
||||||
### Шаг 1: Сборка проекта
|
|
||||||
|
|
||||||
Необходимо локально собрать корневой проект:
|
|
||||||
|
|
||||||
mvn install
|
|
||||||
|
|
||||||
#### Шаг 2: Настройка брокера, БД и менеджера артефактов.
|
|
||||||
|
|
||||||
При использовании докера запустите Артемис
|
|
||||||
|
|
||||||
sudo docker run --rm -p 8161:8161 -p 61616:61616 -e ARTEMIS_USERNAME=entaxy -e ARTEMIS_PASSWORD=entaxy --name=artemis1 -d vromero/activemq-artemis
|
|
||||||
|
|
||||||
И запустите постгрес
|
|
||||||
|
|
||||||
sudo docker run --name entaxy_db -p 5432:5432 -v /etc/timezone:/etc/timezone:ro -e POSTGRES_PASSWORD=entaxy -e POSTGRES_USER=entaxy -e POSTGRES_DB=cache -d postgres
|
|
||||||
|
|
||||||
или Майкрософт Сиквел
|
|
||||||
|
|
||||||
sudo docker run --name mssql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=entaxy' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-CU8-ubuntu
|
|
||||||
|
|
||||||
`По умолчанию в проекте используется 2 базы данных: cache и esb_entaxy,`
|
|
||||||
`Названия баз данных прописаны в конфигурациях соединений с бд org.ops4j.datasource-entaxy.esb.*.cfg`
|
|
||||||
|
|
||||||
и осталось поднять nexus(необходимо для работы system-management)
|
|
||||||
|
|
||||||
sudo docker run -d -p 8081:8081 --name nexus sonatype/nexus3
|
|
||||||
|
|
||||||
Теперь смотрим админский пароль через команду:
|
|
||||||
|
|
||||||
docker exec nexus cat /nexus-data/admin.password
|
|
||||||
И далее заходим в админку через браузер на http://localhost:8081/.
|
|
||||||
По умолчанию для работы требуется создать пользователя entaxy/entaxy и maven репозиторий с названием entaxy.
|
|
||||||
|
|
||||||
На Docker Toolbox могут возникнуть ошибки из-за нехватки памяти, решается изменением выделения памяти при запуске`
|
|
||||||
|
|
||||||
docker run -d -p 8081:8081 --name nexus -e INSTALL4J_ADD_VM_PARAMS="-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g" sonatype/nexus3
|
|
||||||
|
|
||||||
#### Шаг 3: Подготовка и запуск карафа
|
|
||||||
|
|
||||||
Скопировать в карафовский etc следующие файлы из репозитория entaxy-framework\features\src\main\cfg\
|
|
||||||
|
|
||||||
jre.properties
|
|
||||||
org.apache.karaf.cellar.groups.cfg
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Так же локальный нексус репозиторий необходимо добавить к стандартным репозиториям в файле org.ops4j.pax.url.mvn.cfg свойство org.ops4j.pax.url.mvn.repositories.`
|
|
||||||
`Пользователь и название репозитория прописано в конфигурационном файле ru.entaxy.esb.deployer.nexus.cfg.`
|
|
||||||
|
|
||||||
|
|
||||||
Запуск Apache Karaf 4.x или новее
|
|
||||||
|
|
||||||
karaf
|
|
||||||
|
|
||||||
Или запуск карафа с очисткой до первоначального состояния
|
|
||||||
|
|
||||||
karaf clean
|
|
||||||
|
|
||||||
## Шаг 4: Установка всех фич за один раз, используя командную строку карафа
|
|
||||||
|
|
||||||
shell:source <project-directory>/entaxy-framework/features/src/main/script/install.karaf
|
|
||||||
|
|
||||||
- После требуется проверить конфигурации соединений с бд в файлах org.ops4j.datasource-entaxy.esb.*.cfg
|
|
||||||
- Проверить адрес брокера в файле ru.entaxy.esb.cfg свойство ru.entaxy.esb.jms.url
|
|
||||||
- Проверить адрес брокера в файле init/entaxy-platform-connections.json коннекция "name": "entaxy-broker" в которой свойство url
|
|
||||||
- Заменить файл org.apache.karaf.cellar.groups.cfg
|
|
||||||
|
|
||||||
#### Шаг 4a: Или можно установить фичи вручную
|
|
||||||
|
|
||||||
Добавить необходимую фичу
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb/karaf-features/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Установить entaxy
|
|
||||||
|
|
||||||
feature:install entaxy-all
|
|
||||||
|
|
||||||
Добавить необходимую фичу base
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/base/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Установить base
|
|
||||||
|
|
||||||
feature:install base
|
|
||||||
|
|
||||||
Добавить необходимую фичу core
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/core/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Установить core
|
|
||||||
|
|
||||||
feature:install core
|
|
||||||
|
|
||||||
Добавить необходимую entaxy-uniform-service
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime.modules/uniform-service/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
|
|
||||||
Install entaxy-uniform-service
|
|
||||||
|
|
||||||
feature:install entaxy-uniform-service
|
|
||||||
|
|
||||||
Useful comand for dev
|
|
||||||
|
|
||||||
bundle:watch mvn:ru.entaxy.esb/esb/1.8.0
|
|
||||||
|
|
||||||
#### Шаг 5: Проверка доступности сервиса через браузер, используя следующий адрес.
|
|
||||||
|
|
||||||
Подразумевается использование настроек по умолчанию для карафовского PAX Web, который для http настроен на порт `8181`. Если Вы желаете использовать другой порт или https, то необходимо поменять настройки в `${KARAF_HOME}/etc/org.ops4j.pax.web.cfg`. Непосредственное продолжение адреса после имени хоста и номера порта (в примере ниже `cxf`) можно настроить в файле `org.apache.cxf.osgi.cfg`. (Для более подробной информации по PAX Web перейдите по ссылке [http://team.ops4j.org/wiki/display/paxweb/Pax+Web](http://team.ops4j.org/wiki/display/paxweb/Pax+Web))
|
|
||||||
|
|
||||||
[http://localhost:8181/cxf/system-management?wsdl](http://localhost:8181/cxf/system-management?wsdl)
|
|
||||||
|
|
||||||
#### Шаг 6: Запуск SOAPUI или Postman
|
|
||||||
|
|
||||||
Отправка POST запроса на адрес
|
|
||||||
|
|
||||||
http://localhost:8181/cxf/system-management
|
|
||||||
|
|
||||||
Тестовый запрос:
|
|
||||||
|
|
||||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sys="http://www.entaxy.ru/system-management-service/">
|
|
||||||
<soapenv:Header/>
|
|
||||||
<soapenv:Body>
|
|
||||||
<sys:listTemplateRequest/>
|
|
||||||
</soapenv:Body>
|
|
||||||
</soapenv:Envelope>
|
|
||||||
|
|
||||||
## Автотесты
|
|
||||||
|
|
||||||
<https://learning.getpostman.com/docs/postman/collection_runs/command_line_integration_with_newman/>
|
|
||||||
|
|
||||||
#### Установка
|
|
||||||
|
|
||||||
npm install -g newman
|
|
||||||
|
|
||||||
#### Запуск
|
|
||||||
|
|
||||||
cd test
|
|
||||||
newman run "Entaxy Integration Tests.postman_collection.json" -e "entaxy dev proxy.postman_environment.json"
|
|
||||||
|
|
||||||
#### Запуск нагрузочных тестов через Jmeter
|
|
||||||
|
|
||||||
В тестах прописана система s1
|
|
||||||
|
|
||||||
* UNIFORM-SERVICE-CONNECTOR_SEND_GET_ACK.jmx - запись и чтение с подтверждением последовательно
|
|
||||||
* UNIFORM-SERVICE_SEND_GET_AСK_ASYNC.jmx - запись и чтение с подтверждением в параллельных потоках
|
|
181
features/pom.xml
@ -1,181 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<parent>
|
|
||||||
<groupId>ru.entaxy.esb</groupId>
|
|
||||||
<artifactId>root</artifactId>
|
|
||||||
<version>1.8.0</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>karaf-features</artifactId>
|
|
||||||
<name>SYSTEM :: ENTAXY :: Features</name>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
|
|
||||||
<profiles>
|
|
||||||
<profile>
|
|
||||||
<id>cfg.dev</id>
|
|
||||||
<properties>
|
|
||||||
<environmentConfigurationDirectory>cfg</environmentConfigurationDirectory>
|
|
||||||
</properties>
|
|
||||||
<build>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/${environmentConfigurationDirectory}</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<targetPath>${project.build.directory}/cfg</targetPath>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
</build>
|
|
||||||
<activation>
|
|
||||||
<property>
|
|
||||||
<name>!skipDevConfig</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
|
||||||
<id>cfg.local</id>
|
|
||||||
<properties>
|
|
||||||
<environmentConfigurationDirectory>cfg.local</environmentConfigurationDirectory>
|
|
||||||
</properties>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/feature</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<targetPath>${project.build.directory}/feature</targetPath>
|
|
||||||
</resource>
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/script</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
<targetPath>${project.build.directory}/script</targetPath>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-resources-plugin</artifactId>
|
|
||||||
<version>3.1.0</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<goals>
|
|
||||||
<goal>resources</goal>
|
|
||||||
</goals>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
|
||||||
<artifactId>build-helper-maven-plugin</artifactId>
|
|
||||||
<version>1.12</version>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>attach-artifacts</id>
|
|
||||||
<phase>package</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>attach-artifact</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<artifacts>
|
|
||||||
<artifact>
|
|
||||||
<file>target/feature/feature.xml</file>
|
|
||||||
<type>xml</type>
|
|
||||||
<classifier>features</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.basic_auth.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.basic_auth</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.basic_auth.htpasswd.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.basic_auth.htpasswd</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.event.rest.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.event.rest</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.event.handler.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.event.handler</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/org.ops4j.datasource-entaxy.esb.cache.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>datasource-cache</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/org.ops4j.datasource-entaxy.esb.storage.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>datasource-storage</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.deployer.nexus.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.deployer.nexus</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.deployer.cellar.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.deployer.cellar</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/script/install.karaf</file>
|
|
||||||
<type>script</type>
|
|
||||||
<classifier>install</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.error.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.error</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.error.code.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.error.code</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.error.text.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.error.text</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.deployer.file.system.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.deployer.file.system</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.schema.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.schema</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/ru.entaxy.esb.system.management.cfg</file>
|
|
||||||
<type>cfg</type>
|
|
||||||
<classifier>ru.entaxy.esb.system.management</classifier>
|
|
||||||
</artifact>
|
|
||||||
<artifact>
|
|
||||||
<file>target/cfg/jre.properties</file>
|
|
||||||
<type>properties</type>
|
|
||||||
<classifier>jre</classifier>
|
|
||||||
</artifact>
|
|
||||||
</artifacts>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
|
@ -1,502 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!--
|
|
||||||
~~~~~~licensing~~~~~~
|
|
||||||
karaf-features
|
|
||||||
==========
|
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
|
||||||
==========
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
~~~~~~/licensing~~~~~~
|
|
||||||
-->
|
|
||||||
|
|
||||||
|
|
||||||
<features name="karaf-entaxy-${project.version}"
|
|
||||||
xmlns="http://karaf.apache.org/xmlns/features/v1.3.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.3.0 http://karaf.apache.org/xmlns/features/v1.3.0">
|
|
||||||
|
|
||||||
<repository>mvn:org.apache.camel.karaf/apache-camel/${camel.version}/xml/features</repository>
|
|
||||||
<repository>mvn:org.apache.activemq/artemis-features/${activemq.version}/xml/features</repository>
|
|
||||||
<repository>mvn:org.hibernate/hibernate-osgi/${hibernate.version}/xml/karaf</repository>
|
|
||||||
<repository>mvn:org.apache.karaf.cellar/apache-karaf-cellar/${cellar.version}/xml/features</repository>
|
|
||||||
<repository>mvn:org.apache.ignite/ignite-osgi-karaf/${ignite.version}/xml/features</repository>
|
|
||||||
|
|
||||||
<feature name="karaf-camel-common" version="${project.version}">
|
|
||||||
<feature prerequisite="true">aries-blueprint</feature>
|
|
||||||
<feature>cxf</feature>
|
|
||||||
<feature>camel</feature>
|
|
||||||
<feature>camel-blueprint</feature>
|
|
||||||
<feature>camel-jaxb</feature>
|
|
||||||
<feature>camel-cxf</feature>
|
|
||||||
<feature>camel-amqp</feature>
|
|
||||||
<feature>camel-core</feature>
|
|
||||||
<feature>camel-http</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system/component-bean-fix/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.apache.aries.blueprint.NamespaceHandler;osgi.service.blueprint.namespace=http://camel.apache.org/schema/blueprint;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-entaxy-jms" version="${project.version}">
|
|
||||||
<feature>artemis-jms-client</feature>
|
|
||||||
<feature>camel-jms</feature>
|
|
||||||
<bundle>mvn:org.messaginghub/pooled-jms/1.0.6</bundle>
|
|
||||||
<bundle>mvn:org.apache.commons/commons-pool2/2.6.2</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-entaxy-db" version="${project.version}">
|
|
||||||
<feature>hibernate</feature>
|
|
||||||
<feature>jdbc</feature>
|
|
||||||
<feature>pax-jdbc-pool-dbcp2</feature>
|
|
||||||
<feature>jndi</feature>
|
|
||||||
<feature>spring-jdbc</feature>
|
|
||||||
<feature version="[2,3)">jpa</feature>
|
|
||||||
<bundle>wrap:mvn:org.postgresql/postgresql/${postgresql.version}</bundle>
|
|
||||||
<bundle>wrap:mvn:com.microsoft.sqlserver/mssql-jdbc/${mssql.version}</bundle>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/org.ops4j.datasource-entaxy.esb.cache.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/datasource-cache
|
|
||||||
</configfile>
|
|
||||||
<configfile finalname="${karaf.etc}/org.ops4j.datasource-entaxy.esb.storage.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/datasource-storage
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="error-handler" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core/error-handler/${project.version}</bundle>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.error.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.error
|
|
||||||
</configfile>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.error.code.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.error.code
|
|
||||||
</configfile>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.error.text.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.error.text
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="entaxy-common" version="${project.version}">
|
|
||||||
<configfile finalname="${karaf.etc}/jre.properties" override="true">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/properties/jre
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
<feature dependency="true">ignite-core</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:org.apache.ignite/ignite-jcl/${ignite.version}</bundle>
|
|
||||||
<feature>camel-ignite</feature>
|
|
||||||
<feature>camel-sql</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">entaxy-esb-api</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-maven" version="${project.version}">
|
|
||||||
<bundle>mvn:org.eclipse.aether/aether-transport-http/1.1.0</bundle>
|
|
||||||
<bundle>mvn:org.eclipse.aether/aether-transport-file/1.1.0</bundle>
|
|
||||||
<bundle>mvn:org.eclipse.aether/aether-connector-basic/1.1.0</bundle>
|
|
||||||
<bundle>mvn:org.eclipse.aether/aether-impl/1.1.0</bundle>
|
|
||||||
<bundle>wrap:mvn:org.apache.maven/maven-aether-provider/3.3.9</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-common" version="${project.version}">
|
|
||||||
<feature dependency="true">aries-blueprint</feature>
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="entaxy-esb-api" version="${project.version}">
|
|
||||||
<feature version="${cellar.version}">cellar</feature>
|
|
||||||
<feature version="${project.version}">bundle-service</feature>
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">entaxy-common</feature>
|
|
||||||
<feature>camel-gson</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core/template/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.commons/system-commons/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.dispatcher/dispatcher/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.profile.commons/profile-commons/${project.version}</bundle>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.connector/connector-impl/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.connector/connector-api/${project.version}</bundle>
|
|
||||||
<feature version="${project.version}">system-api</feature>
|
|
||||||
<feature version="${project.version}">nexus-deployer</feature>
|
|
||||||
<feature version="${project.version}">file-system-deployer</feature>
|
|
||||||
<feature version="${project.version}">cellar-deployer</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">blueprint-generator</feature>
|
|
||||||
<!-- <feature version="${project.version}">file-connector</feature>-->
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.bundle.manager/bundle-manager/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.connector.manager/connector-manager/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.bridge.profile.manager/bridge-profile-manager/${project.version}
|
|
||||||
</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.profile.manager/profile-manager/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.route.manager/route-manager/${project.version}</bundle>
|
|
||||||
<feature version="${project.version}">system-management</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">schema</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="file-system-deployer" version="${project.version}">
|
|
||||||
<feature>camel-blueprint</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.deployer/deployer-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.deployer/file-system-deployer/${project.version}</bundle>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.deployer.file.system.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.deployer.file.system
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="nexus-deployer" version="${project.version}">
|
|
||||||
<bundle>mvn:org.eclipse.aether/aether-api/${aether.version}</bundle>
|
|
||||||
<feature>camel-http</feature>
|
|
||||||
<feature>camel-cxf</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.deployer/deployer-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.deployer/nexus-deployer/${project.version}</bundle>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.deployer.nexus.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.deployer.nexus
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="cellar-deployer" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.deployer/cellar-deployer/${project.version}</bundle>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.deployer.cellar.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.deployer.cellar
|
|
||||||
</configfile>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="blueprint-generator" version="${project.version}">
|
|
||||||
<bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.freemarker/2.3.29_1</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.blueprint.generator/blueprint-generator/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="bundle-service" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.bundle.jpa/bundle-service/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-management" version="${project.version}">
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.management.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.management
|
|
||||||
</configfile>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management/system-management-api/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="profile-commons" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.dispatcher/dispatcher/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.profile.commons/profile-commons/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="liquibase-updater" version="${project.version}">
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:org.liquibase/liquibase-core/${liquibase.version}</bundle>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.platform.runtime.core.initializer.storage.initializer/liquibase-updater/${project.version}</bundle>
|
|
||||||
<feature version="${project.version}">storage-cache</feature>
|
|
||||||
<feature version="${project.version}">storage-esb_entaxy</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="storage-cache" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.platform.runtime.core.initializer.storage.initializer/storage-cache/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;effective:=active;objectClass=javax.sql.DataSource;osgi.jndi.service.name=entaxy.esb.cache;
|
|
||||||
</capability>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=javax.sql.DataSource;osgi.jndi.service.name=entaxy.esb.cache-connector;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="storage-esb_entaxy" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.platform.runtime.core.initializer.storage.initializer/storage-esb_entaxy/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;effective:=active;objectClass=javax.sql.DataSource;osgi.jndi.service.name=entaxy.esb.storage;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-profile" version="${project.version}">
|
|
||||||
<feature version="${project.version}">profile-commons</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems.profile/system-profile-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems.profile/system-profile-collector/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems.profile/system-profile-impl-default/${project.version}
|
|
||||||
</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-api" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
<feature version="${project.version}">bundle-service</feature>
|
|
||||||
<feature version="${project.version}">permission-api</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.commons/system-commons/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.connector/connector-api/${project.version}</bundle>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems/system-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems/system-impl/${project.version}</bundle>
|
|
||||||
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-registry" version="${project.version}">
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">system-profile</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.systems/system-component/${project.version}</bundle>
|
|
||||||
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-group-profile" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.system-groups.profile/system-group-profile-api/${project.version}
|
|
||||||
</bundle>
|
|
||||||
<bundle>
|
|
||||||
mvn:ru.entaxy.esb.system.registry.system-groups.profile/system-group-profile-collector/${project.version}
|
|
||||||
</bundle>
|
|
||||||
<bundle>
|
|
||||||
mvn:ru.entaxy.esb.system.registry.system-groups.profile/system-group-profile-impl-default/${project.version}
|
|
||||||
</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="system-group-registry" version="${project.version}">
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">system-group-profile</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.system-groups/system-group-component/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="basic-auth" version="${project.version}">
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature version="${project.version}">liquibase-updater</feature>
|
|
||||||
<bundle>mvn:commons-codec/commons-codec/${commons-codec.version}</bundle>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.basic_auth.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.basic_auth
|
|
||||||
</configfile>
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.basic_auth.htpasswd.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.basic_auth.htpasswd
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.auth.basic.api/basic-auth-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.auth.basic.impl/basic-auth-impl/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.auth.basic.htpasswd/htpasswd/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.auth.basic/basic-auth-soap/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events" version="${project.version}">
|
|
||||||
<feature version="${project.version}">events-impl</feature>
|
|
||||||
<feature version="${project.version}">events-rest</feature>
|
|
||||||
<feature version="${project.version}">events-handler</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events-common" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.events/events-common/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events-rest" version="${project.version}">
|
|
||||||
<feature version="${cellar.version}">cellar</feature>
|
|
||||||
<feature version="${cellar.version}">cellar-eventadmin</feature>
|
|
||||||
<feature>camel-eventadmin</feature>
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
<feature>camel-jsonpath</feature>
|
|
||||||
<feature>camel-gson</feature>
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">error-handler</feature>
|
|
||||||
<feature version="${project.version}">system-registry</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">system-api</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">events-api</feature>
|
|
||||||
<feature version="${project.version}">basic-auth</feature>
|
|
||||||
<feature version="${project.version}">events-common</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">permission-impl</feature>
|
|
||||||
<feature version="${project.version}">permission-handler</feature>
|
|
||||||
<feature version="${project.version}">permission-component</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.commons/system-commons/${project.version}</bundle>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.event.rest.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.event.rest
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.events/events-rest/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events-api" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">events-common</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.events/events-api/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events-impl" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">events-api</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">events-common</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.events/events-impl/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="events-handler" version="${project.version}">
|
|
||||||
<feature>camel-ognl</feature>
|
|
||||||
<feature>camel-gson</feature>
|
|
||||||
<feature>camel-quartz</feature>
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">events-api</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">events-common</feature>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.event.handler.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.event.handler
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.events/events-handler/${project.version}</bundle>
|
|
||||||
|
|
||||||
<capability>
|
|
||||||
osgi.service;effective:=active;objectClass=javax.sql.DataSource;osgi.jndi.service.name=entaxy.esb.cache;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission" version="${project.version}">
|
|
||||||
<feature version="${project.version}">permission-impl</feature>
|
|
||||||
<feature version="${project.version}">permission-handler</feature>
|
|
||||||
<feature version="${project.version}">permission-component</feature>
|
|
||||||
<feature version="${project.version}">permission-soap</feature>
|
|
||||||
<feature version="${project.version}">permission-manager</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-common" version="${project.version}">
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-common/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-api" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-api/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-impl" version="${project.version}">
|
|
||||||
<feature version="${project.version}">liquibase-updater</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">permission-api</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">permission-common</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-impl/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-handler" version="${project.version}">
|
|
||||||
<feature>camel-ognl</feature>
|
|
||||||
<feature version="${project.version}">system-entaxy-jms</feature>
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature version="${project.version}">permission-impl</feature>
|
|
||||||
|
|
||||||
<feature version="${project.version}">permission-common</feature>
|
|
||||||
|
|
||||||
<!-- <configfile finalname="${karaf.etc}/ru.entaxy.esb.system.event.handler.cfg" override="false">mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.event.handler</configfile> -->
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-handler/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-manager" version="${project.version}">
|
|
||||||
<feature version="${project.version}">permission-component</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.management.permission.manager/permission-manager/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-component" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-common</feature>
|
|
||||||
<feature>camel-gson</feature>
|
|
||||||
<feature version="${project.version}">permission-common</feature>
|
|
||||||
<feature version="${project.version}">permission-impl</feature>
|
|
||||||
<feature version="${project.version}">system-api</feature>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.commons/system-commons/${project.version}</bundle>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-component/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="permission-soap" version="${project.version}">
|
|
||||||
<feature version="${project.version}">basic-auth</feature>
|
|
||||||
<feature version="${project.version}">karaf-camel-common</feature>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.core.permission/permission-soap/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="schema" version="${project.version}">
|
|
||||||
<feature version="${project.version}">system-entaxy-db</feature>
|
|
||||||
|
|
||||||
<configfile finalname="${karaf.etc}/ru.entaxy.esb.system.schema.cfg" override="false">
|
|
||||||
mvn:ru.entaxy.esb/karaf-features/${project.version}/cfg/ru.entaxy.esb.system.schema
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.schema/schema-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.schema/schema-impl/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.schema/schema-soap/${project.version}</bundle>
|
|
||||||
<bundle>mvn:ru.entaxy.esb.system.registry.schema/schema-component/${project.version}</bundle>
|
|
||||||
<capability>
|
|
||||||
osgi.service;objectClass=org.hibernate.SessionFactory;effective:=active;
|
|
||||||
</capability>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="entaxy-service" version="${project.version}">
|
|
||||||
<feature version="${project.version}">basic-auth</feature>
|
|
||||||
<feature version="${project.version}">permission</feature>
|
|
||||||
<feature version="${project.version}">entaxy-esb-api</feature>
|
|
||||||
<feature version="${project.version}">system-registry</feature>
|
|
||||||
<feature version="${project.version}">system-group-registry</feature>
|
|
||||||
<feature version="${project.version}">events</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
<feature name="entaxy-all" version="${project.version}">
|
|
||||||
<configfile finalname="${karaf.etc}/branding.properties" override="true">
|
|
||||||
mvn:ru.entaxy.esb.platform.runtime.base/branding/${project.version}/properties/branding
|
|
||||||
</configfile>
|
|
||||||
|
|
||||||
<feature version="${project.version}">entaxy-service</feature>
|
|
||||||
</feature>
|
|
||||||
|
|
||||||
</features>
|
|
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
## Репозиторий с релизами
|
|
||||||
|
|
||||||
http://192.168.122.76:8081/service/rest/repository/browse/karaf_patch/
|
|
||||||
|
|
||||||
## Install patch
|
|
||||||
|
|
||||||
tar -zxf karaf_update_1.0.10-SNAPSHOT.tgz install.sh; ./install.sh 1.0.10-SNAPSHOT
|
|
@ -1,67 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
###
|
|
||||||
# ~~~~~~licensing~~~~~~
|
|
||||||
# karaf-features
|
|
||||||
# ==========
|
|
||||||
# Copyright (C) 2020 - 2021 EmDev LLC
|
|
||||||
# ==========
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
# ~~~~~~/licensing~~~~~~
|
|
||||||
###
|
|
||||||
|
|
||||||
DIRNAME="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
||||||
|
|
||||||
INSTALL_DIR=$DIRNAME/karaf-full-$(date +%d%m%Y-%H%M)
|
|
||||||
|
|
||||||
mkdir -p $INSTALL_DIR/bin
|
|
||||||
mkdir -p $INSTALL_DIR/etc
|
|
||||||
mkdir -p $INSTALL_DIR/lib
|
|
||||||
mkdir -p $INSTALL_DIR/system
|
|
||||||
mkdir -p $INSTALL_DIR/data
|
|
||||||
mkdir -p $INSTALL_DIR/systemd/system
|
|
||||||
|
|
||||||
sudo systemctl stop karaf
|
|
||||||
echo "Stopped karaf"
|
|
||||||
|
|
||||||
cp -R /opt/karaf/bin/* $INSTALL_DIR/bin
|
|
||||||
cp -R /opt/karaf/etc/* $INSTALL_DIR/etc
|
|
||||||
cp -R /opt/karaf/lib/* $INSTALL_DIR/lib
|
|
||||||
cp -R /opt/karaf/system/* $INSTALL_DIR/system
|
|
||||||
cp -R /opt/karaf/data/* $INSTALL_DIR/data
|
|
||||||
cp /etc/systemd/system/karaf $INSTALL_DIR/systemd/system
|
|
||||||
cp /etc/systemd/system/karaf.service $INSTALL_DIR/systemd/system
|
|
||||||
|
|
||||||
sudo systemctl start karaf
|
|
||||||
echo "Started karaf"
|
|
||||||
|
|
||||||
rm -rf $INSTALL_DIR/data/tmp/*
|
|
||||||
rm -rf $INSTALL_DIR/data/log/*
|
|
||||||
rm -rf $INSTALL_DIR/data/txlog/*
|
|
||||||
|
|
||||||
#pushd ./$INSTALL_DIR/etc
|
|
||||||
#$DIRNAME/change_ips.sh
|
|
||||||
#popd
|
|
||||||
|
|
||||||
if test -f "$DIRNAME/version"; then
|
|
||||||
ESB_ENTAXY_VERSION=`cat $DIRNAME/version`
|
|
||||||
else
|
|
||||||
ESB_ENTAXY_VERSION=1.8.0
|
|
||||||
fi
|
|
||||||
echo "Installing $ESB_ENTAXY_VERSION"
|
|
||||||
|
|
||||||
pushd $INSTALL_DIR
|
|
||||||
tar czvf $DIRNAME/karaf_full_$ESB_ENTAXY_VERSION.tgz *
|
|
||||||
popd
|
|
||||||
|
|
||||||
rm -rf $INSTALL_DIR
|
|
@ -1,64 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
###
|
|
||||||
# ~~~~~~licensing~~~~~~
|
|
||||||
# karaf-features
|
|
||||||
# ==========
|
|
||||||
# Copyright (C) 2020 - 2021 EmDev LLC
|
|
||||||
# ==========
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
# ~~~~~~/licensing~~~~~~
|
|
||||||
###
|
|
||||||
|
|
||||||
# создает архив с обновлением
|
|
||||||
|
|
||||||
DIRNAME="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
||||||
|
|
||||||
if test -f "$DIRNAME/version"; then
|
|
||||||
ESB_ENTAXY_VERSION=`cat $DIRNAME/version`
|
|
||||||
else
|
|
||||||
ESB_ENTAXY_VERSION=1.8.0
|
|
||||||
fi
|
|
||||||
echo "Create patch version $ESB_ENTAXY_VERSION"
|
|
||||||
|
|
||||||
RELEASE_DIR=$DIRNAME/karaf-$(date +%d%m%Y-%H%M)
|
|
||||||
mkdir -p $RELEASE_DIR
|
|
||||||
|
|
||||||
mkdir -p $RELEASE_DIR/etc
|
|
||||||
mkdir -p $RELEASE_DIR/data
|
|
||||||
|
|
||||||
sudo systemctl stop karaf
|
|
||||||
echo "Stopped karaf"
|
|
||||||
|
|
||||||
cp -R /opt/karaf/etc/* $RELEASE_DIR/etc
|
|
||||||
cp -R /opt/karaf/data/* $RELEASE_DIR/data
|
|
||||||
cp $DIRNAME/change_ips.sh $RELEASE_DIR/etc
|
|
||||||
cp $DIRNAME/install_patch.sh $RELEASE_DIR/install.sh
|
|
||||||
|
|
||||||
sudo systemctl start karaf
|
|
||||||
echo "Started karaf"
|
|
||||||
|
|
||||||
rm -rf $RELEASE_DIR/data/tmp/*
|
|
||||||
rm -rf $RELEASE_DIR/data/log/*
|
|
||||||
rm -rf $RELEASE_DIR/data/txlog/*
|
|
||||||
|
|
||||||
pushd $RELEASE_DIR
|
|
||||||
tar czvf $DIRNAME/karaf_update_$ESB_ENTAXY_VERSION.tgz *
|
|
||||||
popd
|
|
||||||
|
|
||||||
|
|
||||||
rm -rf $RELEASE_DIR
|
|
||||||
|
|
||||||
curl -v --user 'deployer:deployer' --upload-file $DIRNAME/README.md http://192.168.122.76:8081/repository/karaf_patch/README.md
|
|
||||||
curl -v --user 'deployer:deployer' --upload-file $DIRNAME/karaf_update_$ESB_ENTAXY_VERSION.tgz http://192.168.122.76:8081/repository/karaf_patch/karaf_update_$ESB_ENTAXY_VERSION.tgz
|
|
||||||
echo "Upload path to nexus http://192.168.122.76:8081/service/rest/repository/browse/karaf_patch/"
|
|
@ -1,16 +0,0 @@
|
|||||||
ESB_ENTAXY_VERSION=${project.version}
|
|
||||||
echo "Entaxy version=$ESB_ENTAXY_VERSION"
|
|
||||||
|
|
||||||
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb/karaf-features/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
echo "feature:install entaxy-all"
|
|
||||||
feature:install entaxy-all
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/base/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
echo "feature:install base"
|
|
||||||
feature:install entaxy-platform-base
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime/core/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
echo "feature:install core"
|
|
||||||
feature:install entaxy-platform-core
|
|
||||||
feature:repo-add mvn:ru.entaxy.esb.platform.runtime.modules/uniform-service/$ESB_ENTAXY_VERSION/xml/features
|
|
||||||
echo "feature:install entaxy-uniform-service"
|
|
||||||
feature:install entaxy-uniform-service
|
|
@ -1,75 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
###
|
|
||||||
# ~~~~~~licensing~~~~~~
|
|
||||||
# karaf-features
|
|
||||||
# ==========
|
|
||||||
# Copyright (C) 2020 - 2021 EmDev LLC
|
|
||||||
# ==========
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
# ~~~~~~/licensing~~~~~~
|
|
||||||
###
|
|
||||||
|
|
||||||
# первый параметр номер версии
|
|
||||||
# если задан второй параметр чистит конфиги
|
|
||||||
|
|
||||||
DIRNAME="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
||||||
ESB_ENTAXY_VERSION=$1
|
|
||||||
PATCH_FILE=$DIRNAME/karaf_update_$ESB_ENTAXY_VERSION.tgz
|
|
||||||
|
|
||||||
if test -f "$PATCH_FILE"; then
|
|
||||||
echo "Installing $ESB_ENTAXY_VERSION, use patch file: $PATCH_FILE"
|
|
||||||
else
|
|
||||||
echo "Error: patch file $PATCH_FILE not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo systemctl stop karaf
|
|
||||||
echo "Stopped karaf"
|
|
||||||
|
|
||||||
BKPDIR=$DIRNAME/backup-karaf-$(date +%d%m%Y-%H%M)
|
|
||||||
mkdir -p $BKPDIR
|
|
||||||
echo "Created dir $BKPDIR"
|
|
||||||
|
|
||||||
# create backup
|
|
||||||
sudo cp -r /opt/karaf/etc $BKPDIR
|
|
||||||
sudo cp -r /opt/karaf/data $BKPDIR
|
|
||||||
|
|
||||||
# clean backed dirs
|
|
||||||
sudo su - -c "rm -rf /opt/karaf/data/*" karaf
|
|
||||||
|
|
||||||
if [ -n "$2" ]
|
|
||||||
then
|
|
||||||
# clean configs
|
|
||||||
sudo su - -c "rm -rf /opt/karaf/etc/ru.entaxy.esb.*" karaf
|
|
||||||
sudo su - -c "rm -rf /opt/karaf/etc/org.ops4j.datasource-entaxy.esb.*" karaf
|
|
||||||
echo "Karaf data and configs cleaned up"
|
|
||||||
else
|
|
||||||
echo "Karaf data cleaned up"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo tar -zxk -f $PATCH_FILE -C /opt/karaf/
|
|
||||||
|
|
||||||
if [ -n "$2" ]
|
|
||||||
then
|
|
||||||
sudo /opt/karaf/etc/change_ips.sh
|
|
||||||
echo "Run change_ips.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# restore file owner
|
|
||||||
sudo chown -R karaf. /opt/karaf/{etc,data}
|
|
||||||
|
|
||||||
sudo systemctl start karaf
|
|
||||||
echo "Started karaf"
|
|
||||||
|
|
||||||
sleep 30
|
|
||||||
sudo su - -c "/opt/karaf/bin/client 'list --no-format | grep -v Active'" karaf
|
|
@ -1,83 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
###
|
|
||||||
# ~~~~~~licensing~~~~~~
|
|
||||||
# karaf-features
|
|
||||||
# ==========
|
|
||||||
# Copyright (C) 2020 - 2021 EmDev LLC
|
|
||||||
# ==========
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
# ~~~~~~/licensing~~~~~~
|
|
||||||
###
|
|
||||||
|
|
||||||
# берет номер версии из файла version, если его нет то используется 1.8.0
|
|
||||||
# если задан первый параметр чистит конфиги
|
|
||||||
|
|
||||||
DIRNAME="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
||||||
|
|
||||||
if test -f "$DIRNAME/version"; then
|
|
||||||
ESB_ENTAXY_VERSION=`cat $DIRNAME/version`
|
|
||||||
else
|
|
||||||
ESB_ENTAXY_VERSION=1.8.0
|
|
||||||
fi
|
|
||||||
echo "Installing $ESB_ENTAXY_VERSION"
|
|
||||||
|
|
||||||
sudo systemctl stop karaf
|
|
||||||
|
|
||||||
echo "Stopped karaf"
|
|
||||||
|
|
||||||
BKPDIR=$DIRNAME/backup-karaf-$(date +%d%m%Y-%H%M)
|
|
||||||
mkdir -p $BKPDIR
|
|
||||||
|
|
||||||
echo "Created dir $BKPDIR"
|
|
||||||
|
|
||||||
# create backup
|
|
||||||
cp -r /opt/karaf/etc $BKPDIR
|
|
||||||
cp -r /opt/karaf/data $BKPDIR
|
|
||||||
|
|
||||||
# clean backed dirs
|
|
||||||
sudo rm -rf /opt/karaf/data/*
|
|
||||||
|
|
||||||
if [ -n "$1" ]
|
|
||||||
then
|
|
||||||
# clean configs
|
|
||||||
sudo rm -rf /opt/karaf/etc/ru.entaxy.esb.*
|
|
||||||
sudo rm -rf /opt/karaf/etc/org.ops4j.datasource-entaxy.esb.*
|
|
||||||
echo "Karaf data and configs cleaned up"
|
|
||||||
else
|
|
||||||
echo "Karaf data cleaned up"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# restore file owner
|
|
||||||
sudo chown -R karaf. /opt/karaf/{etc,data}
|
|
||||||
|
|
||||||
sudo systemctl start karaf
|
|
||||||
|
|
||||||
echo "Started karaf"
|
|
||||||
|
|
||||||
sleep 15
|
|
||||||
|
|
||||||
sudo cp -r $DIRNAME/install.karaf /opt/karaf/
|
|
||||||
|
|
||||||
sudo su - -c "/opt/karaf/bin/client 'esb_entaxy_VERSION=$ESB_ENTAXY_VERSION; shell:source /opt/karaf/install.karaf;'" karaf
|
|
||||||
|
|
||||||
echo "== Update database"
|
|
||||||
sudo su - -c "/opt/karaf/bin/client 'feature:install liquibase-updater'" karaf
|
|
||||||
sleep 60
|
|
||||||
echo "== Install all features"
|
|
||||||
sudo su - -c "/opt/karaf/bin/client 'feature:install entaxy-all'" karaf
|
|
||||||
sleep 60
|
|
||||||
echo "== Install system-group profile"
|
|
||||||
sudo su - -c "/opt/karaf/bin/client 'bundle:install -s blueprint:mvn:ru.entaxy.esb.integration.esb.test.profiles/test-profiles/$ESB_ENTAXY_VERSION/xml/g_test'" karaf
|
|
||||||
|
|
||||||
echo "Install process finished"
|
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>root</artifactId>
|
<artifactId>root</artifactId>
|
||||||
<groupId>ru.entaxy.esb</groupId>
|
<groupId>ru.entaxy.esb</groupId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
52
platform/runtime/base/base-support/pom.xml
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime</groupId>
|
||||||
|
<artifactId>base</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
</parent>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base</groupId>
|
||||||
|
<artifactId>base-support</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
<name>ENTAXY :: PLATFORM :: BASE :: SUPPORT</name>
|
||||||
|
<description>ENTAXY :: PLATFORM :: BASE :: SUPPORT</description>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<bundle.osgi.export.pkg>
|
||||||
|
ru.entaxy.platform.base.support,
|
||||||
|
ru.entaxy.platform.base.support.xml,
|
||||||
|
ru.entaxy.platform.base.support.osgi,
|
||||||
|
ru.entaxy.platform.base.support.osgi.tracker,
|
||||||
|
ru.entaxy.platform.base.support.osgi.filter
|
||||||
|
</bundle.osgi.export.pkg>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>${commons-lang3.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>${commons-io.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>osgi.core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.bind</groupId>
|
||||||
|
<artifactId>jaxb-api</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-codec</groupId>
|
||||||
|
<artifactId>commons-codec</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
@ -0,0 +1,285 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Dictionary;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Common util for all bus components
|
||||||
|
*
|
||||||
|
* @author fav
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class CommonUtils {
|
||||||
|
|
||||||
|
public static final String GUID_0 = "00000000-0000-0000-0000-000000000000";
|
||||||
|
public static final String GUID_f = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
|
||||||
|
public static final String NULL_GUID_ = GUID_0;
|
||||||
|
|
||||||
|
public static final String PACKET_TYPE_PARAM_NAME = "packetType";
|
||||||
|
|
||||||
|
public static class Path {
|
||||||
|
|
||||||
|
public static final String DEFAULT_SEPARATOR = "/";
|
||||||
|
|
||||||
|
protected String separator = DEFAULT_SEPARATOR;
|
||||||
|
protected List<String> data = new ArrayList<>();
|
||||||
|
|
||||||
|
public static Path create() {
|
||||||
|
return new Path();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isAbsolute(String path) {
|
||||||
|
return isAbsolute(path, DEFAULT_SEPARATOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isAbsolute(String path, String separator) {
|
||||||
|
if (!isValid(path))
|
||||||
|
return false;
|
||||||
|
return path.trim().startsWith(separator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path separator(String newSeparator) {
|
||||||
|
if (newSeparator!=null)
|
||||||
|
this.separator = newSeparator;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path construct(String...fragments) {
|
||||||
|
data.clear();
|
||||||
|
return append(fragments);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Path append(String...fragments) {
|
||||||
|
if (fragments==null)
|
||||||
|
return this;
|
||||||
|
for (int i = 0; i < fragments.length; i++) {
|
||||||
|
String string = fragments[i];
|
||||||
|
if (isValid(string)) {
|
||||||
|
String[] splitted = StringUtils.split(string, separator);
|
||||||
|
for (int j = 0; j < splitted.length; j++) {
|
||||||
|
String string2 = splitted[j];
|
||||||
|
if (isValid(string2) && isValid(string2.trim()))
|
||||||
|
data.add(string2.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
public String relational() {
|
||||||
|
return StringUtils.join(data, separator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String absolute() {
|
||||||
|
return separator + relational();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<String> fragmentsIterator() {
|
||||||
|
return data.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListIterator<String> fragmentsListIterator() {
|
||||||
|
return data.listIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> pathHierarchy(){
|
||||||
|
return pathHierarchy(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> pathHierarchy(boolean absolute){
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
if (data.isEmpty())
|
||||||
|
return result;
|
||||||
|
result.add((absolute?separator:"") + data.get(0));
|
||||||
|
for (int i=1; i<data.size(); i++)
|
||||||
|
result.add(result.get(i-1) + separator + data.get(i));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<String> iterator() {
|
||||||
|
return pathHierarchy().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ListIterator<String> listIterator() {
|
||||||
|
return pathHierarchy().listIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates UUID
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getUUID(){
|
||||||
|
return UUID.randomUUID().toString().toLowerCase().replace("-", "");
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Generates UUID consisting of specified char
|
||||||
|
* @param c
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getUUID(char c) {
|
||||||
|
return StringUtils.leftPad("", 32, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates GUID
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getGUID(){
|
||||||
|
return UUID.randomUUID().toString().toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates GUID consisting of specified char
|
||||||
|
* @param c
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getGUID(char c) {
|
||||||
|
return uid2guid(StringUtils.leftPad("", 32, c));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts UUID to GUID
|
||||||
|
* @param uid
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String uid2guid(String uid){
|
||||||
|
return uid.replaceFirst("(.{8})(.{4})(.{4})(.{4})(.{8})", "$1-$2-$3-$4-$5").toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts GUID to UUID
|
||||||
|
* @param uid
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String guid2uid(String guid){
|
||||||
|
return guid.toLowerCase().replace("-", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the string is not null and has something inside after trim
|
||||||
|
*
|
||||||
|
* @param s
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static boolean isValid(String s){
|
||||||
|
if (s==null)
|
||||||
|
return false;
|
||||||
|
return s.trim().length()>0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param s string to examine
|
||||||
|
* @param def default value
|
||||||
|
* @return s if isValid(s), otherwise def
|
||||||
|
*/
|
||||||
|
public static String getValid(String s, String def){
|
||||||
|
return isValid(s)?s:def;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String padLeft(String data, int length){
|
||||||
|
return padLeft(data, length, ' ');
|
||||||
|
}
|
||||||
|
public static String padRight(String data, int length){
|
||||||
|
return padRight(data, length, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String padBoth(String data, int length){
|
||||||
|
return padBoth(data, length, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String padLeft(String data, int length, Character c){
|
||||||
|
String val = data;
|
||||||
|
if (data==null)
|
||||||
|
val = "";
|
||||||
|
while (val.length()<length)
|
||||||
|
val = c + val;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
public static String padRight(String data, int length, Character c){
|
||||||
|
String val = data;
|
||||||
|
if (data==null)
|
||||||
|
val = "";
|
||||||
|
while (val.length()<length)
|
||||||
|
val = val + c;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String padBoth(String data, int length, Character c){
|
||||||
|
String val = data;
|
||||||
|
boolean left = true;
|
||||||
|
if (data==null)
|
||||||
|
val = "";
|
||||||
|
while (val.length()<length){
|
||||||
|
if (left)
|
||||||
|
val = c + val;
|
||||||
|
else
|
||||||
|
val = val + c;
|
||||||
|
left = !left;
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void stream2file(InputStream input, String file) throws Exception {
|
||||||
|
File f = new File(file);
|
||||||
|
FileOutputStream output = new FileOutputStream(f);
|
||||||
|
IOUtils.copy(input, output);
|
||||||
|
output.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <K, V> Map<K, V> addDictionaryToMap(Dictionary<K, V> source, Map<K, V> sink) {
|
||||||
|
for (Enumeration<K> keys = source.keys(); keys.hasMoreElements();) {
|
||||||
|
K key = keys.nextElement();
|
||||||
|
sink.put(key, source.get(key));
|
||||||
|
}
|
||||||
|
return sink;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <K, V> Map<K, V> getDictionaryAsMap(Dictionary<K, V> source) {
|
||||||
|
Map<K, V> result = new HashMap<>();
|
||||||
|
CommonUtils.addDictionaryToMap(source, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,145 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
|
public class FileUtils {
|
||||||
|
|
||||||
|
public static class FileHelper {
|
||||||
|
|
||||||
|
protected File file = null;
|
||||||
|
|
||||||
|
protected String fileMd5Hash = "";
|
||||||
|
|
||||||
|
protected String md5FilePath = "";
|
||||||
|
protected String currentMd5 = null;
|
||||||
|
|
||||||
|
protected String timmestampFilePath = "";
|
||||||
|
protected String currentTimestamp = null;
|
||||||
|
|
||||||
|
public FileHelper(String filePath) {
|
||||||
|
this(new File(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileHelper(File file) {
|
||||||
|
this.file = file;
|
||||||
|
this.md5FilePath = file.getAbsolutePath().concat(".md5");
|
||||||
|
this.timmestampFilePath = file.getAbsolutePath().concat(".timestamp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isReadable() {
|
||||||
|
return file.exists() && file.canRead();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String calcMd5() {
|
||||||
|
if (!CommonUtils.isValid(this.fileMd5Hash))
|
||||||
|
try {
|
||||||
|
this.fileMd5Hash = DigestUtils.md2Hex(this.file.toURI().toURL().openStream());
|
||||||
|
} catch (MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return this.fileMd5Hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String readMd5() {
|
||||||
|
if (this.currentMd5 == null)
|
||||||
|
try {
|
||||||
|
this.currentMd5 = Files.readString((new File(this.md5FilePath)).toPath());
|
||||||
|
} catch (IOException e) {
|
||||||
|
this.currentMd5 = "";
|
||||||
|
}
|
||||||
|
return this.currentMd5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isChanged() {
|
||||||
|
return !CommonUtils.isValid(this.readMd5()) || !this.readMd5().equals(this.calcMd5());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTimestamp() {
|
||||||
|
if (this.currentTimestamp == null)
|
||||||
|
try {
|
||||||
|
this.currentTimestamp = Files.readString((new File(this.timmestampFilePath)).toPath());
|
||||||
|
} catch (IOException e) {
|
||||||
|
this.currentTimestamp = "";
|
||||||
|
}
|
||||||
|
return this.currentTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMd5() {
|
||||||
|
this.fileMd5Hash = "";
|
||||||
|
return calcMd5();
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getFile() {
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFileMd5Hash() {
|
||||||
|
return calcMd5();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String updateMd5() {
|
||||||
|
String result = getMd5();
|
||||||
|
if (CommonUtils.isValid(result))
|
||||||
|
try {
|
||||||
|
FileUtils.string2file(result, md5FilePath);
|
||||||
|
result = readMd5();
|
||||||
|
} catch (IOException e) {
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String updateTimestamp() {
|
||||||
|
String timestamp = Calendar.getInstance().getTimeInMillis() + "";
|
||||||
|
String result = "";
|
||||||
|
try {
|
||||||
|
FileUtils.string2file(timestamp, timmestampFilePath);
|
||||||
|
this.currentTimestamp = null;
|
||||||
|
result = getTimestamp();
|
||||||
|
} catch (IOException e) {
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void string2file(String content, String filePath) throws IOException {
|
||||||
|
string2file(content, new File(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void string2file(String content, File file) throws IOException {
|
||||||
|
if (!file.exists())
|
||||||
|
file.createNewFile();
|
||||||
|
Files.writeString(file.toPath(), content);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,117 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
|
||||||
|
public class JSONUtils {
|
||||||
|
|
||||||
|
public static final String PROP_VALUE = "_value";
|
||||||
|
|
||||||
|
public static Map<String, Object> element2map(JsonElement element){
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
if (element.isJsonObject()) {
|
||||||
|
JsonObject jsonObject = element.getAsJsonObject();
|
||||||
|
for (Entry<String, JsonElement> entry: jsonObject.entrySet()) {
|
||||||
|
result.put(entry.getKey(), element2object(entry.getValue()));
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
if (element.isJsonArray()) {
|
||||||
|
JsonArray array = element.getAsJsonArray();
|
||||||
|
result.put(PROP_VALUE, element2list(element));
|
||||||
|
} else
|
||||||
|
if (element.isJsonNull()) {
|
||||||
|
result.put(PROP_VALUE, null);
|
||||||
|
} else
|
||||||
|
if (element.isJsonPrimitive()) {
|
||||||
|
result.put(PROP_VALUE, element2value(element));
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object element2object(JsonElement element) {
|
||||||
|
if (element.isJsonNull() || element.isJsonPrimitive())
|
||||||
|
return element2value(element);
|
||||||
|
if (element.isJsonArray())
|
||||||
|
return element2list(element);
|
||||||
|
if (element.isJsonObject())
|
||||||
|
return element2map(element);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object element2value(JsonElement element) {
|
||||||
|
Object result = null;
|
||||||
|
if (element.isJsonNull() || !element.isJsonPrimitive())
|
||||||
|
return result;
|
||||||
|
try {
|
||||||
|
JsonPrimitive primitive = element.getAsJsonPrimitive();
|
||||||
|
if (primitive.isNumber())
|
||||||
|
result = primitive.getAsNumber();
|
||||||
|
else if (primitive.isBoolean())
|
||||||
|
result = primitive.getAsBoolean();
|
||||||
|
else result = primitive.getAsString();
|
||||||
|
} catch (Exception e1) {
|
||||||
|
try {
|
||||||
|
result = element.getAsBoolean();
|
||||||
|
} catch (Exception e2) {
|
||||||
|
result = element.getAsString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Object> element2list(JsonElement element) {
|
||||||
|
List<Object> result = new ArrayList<>();
|
||||||
|
JsonArray array = element.getAsJsonArray();
|
||||||
|
for (int i=0; i<array.size(); i++)
|
||||||
|
result.add(element2object(array.get(i)));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JsonObject getJsonRootObject(URL url) throws IOException {
|
||||||
|
String metadata = new BufferedReader (
|
||||||
|
new InputStreamReader(
|
||||||
|
url.openStream(), StandardCharsets.UTF_8))
|
||||||
|
.lines()
|
||||||
|
.collect(Collectors.joining("\n"));
|
||||||
|
|
||||||
|
JsonElement je = (new JsonParser()).parse(metadata);
|
||||||
|
JsonObject root = je.getAsJsonObject();
|
||||||
|
return root;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
import java.util.jar.Manifest;
|
||||||
|
import java.util.zip.CRC32;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import org.osgi.framework.Constants;
|
||||||
|
|
||||||
|
public class BundleUtils {
|
||||||
|
|
||||||
|
public static File fixBundleWithUpdateLocation(InputStream is, String uri) throws IOException {
|
||||||
|
File file = Files.createTempFile("update-", ".jar").toFile();
|
||||||
|
try (ZipInputStream zis = new ZipInputStream(is);
|
||||||
|
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(file))) {
|
||||||
|
|
||||||
|
byte[] buf = new byte[8192];
|
||||||
|
zos.setLevel(0);
|
||||||
|
while (true) {
|
||||||
|
ZipEntry entry = zis.getNextEntry();
|
||||||
|
if (entry == null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
int n;
|
||||||
|
while (-1 != (n = zis.read(buf))) {
|
||||||
|
baos.write(buf, 0, n);
|
||||||
|
}
|
||||||
|
if (entry.getName().equals(JarFile.MANIFEST_NAME)) {
|
||||||
|
Manifest man = new Manifest(new ByteArrayInputStream(baos.toByteArray()));
|
||||||
|
if (man.getMainAttributes().getValue(Constants.BUNDLE_UPDATELOCATION) == null) {
|
||||||
|
man.getMainAttributes().putValue(Constants.BUNDLE_UPDATELOCATION, uri);
|
||||||
|
}
|
||||||
|
baos.reset();
|
||||||
|
man.write(baos);
|
||||||
|
}
|
||||||
|
byte[] data = baos.toByteArray();
|
||||||
|
CRC32 crc = new CRC32();
|
||||||
|
crc.update(data);
|
||||||
|
entry = new ZipEntry(entry.getName());
|
||||||
|
entry.setSize(data.length);
|
||||||
|
entry.setCrc(crc.getValue());
|
||||||
|
zos.putNextEntry(entry);
|
||||||
|
zos.write(data);
|
||||||
|
zis.closeEntry();
|
||||||
|
zos.closeEntry();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,183 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi;
|
||||||
|
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.Constants;
|
||||||
|
import org.osgi.framework.FrameworkUtil;
|
||||||
|
import org.osgi.framework.ServiceReference;
|
||||||
|
import org.osgi.util.tracker.ServiceTracker;
|
||||||
|
|
||||||
|
import ru.entaxy.platform.base.support.CommonUtils;
|
||||||
|
|
||||||
|
public class OSGIUtils {
|
||||||
|
|
||||||
|
protected static abstract class ServicesEntryPoint<T extends ServicesEntryPoint<T>> {
|
||||||
|
|
||||||
|
protected Class<?> serviceClass = null;
|
||||||
|
protected String serviceClassName = null;
|
||||||
|
|
||||||
|
protected String filter = null;
|
||||||
|
|
||||||
|
protected int wait = -1;
|
||||||
|
|
||||||
|
protected BundleContext bundleContext = FrameworkUtil.getBundle(OSGIUtils.class).getBundleContext();
|
||||||
|
|
||||||
|
public T ofClass(Class<?> clazz) {
|
||||||
|
this.serviceClass = clazz;
|
||||||
|
return this.getBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T ofClass(String className) /* throws Exception */ {
|
||||||
|
this.serviceClassName = className;
|
||||||
|
// BundleWiring wiring = this.bundleContext.getBundle().adapt(BundleWiring.class);
|
||||||
|
// ClassLoader cl = wiring.getClassLoader();
|
||||||
|
// this.serviceClass = cl.loadClass(this.serviceClassName);
|
||||||
|
return this.getBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public T bundleContext(BundleContext context) {
|
||||||
|
if (context == null)
|
||||||
|
this.bundleContext = FrameworkUtil.getBundle(OSGIUtils.class).getBundleContext();
|
||||||
|
else
|
||||||
|
this.bundleContext = context;
|
||||||
|
return getBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract T getBuilder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ServicesFindHelper extends ServicesEntryPoint<ServicesFindHelper> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ServicesFindHelper getBuilder() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getClassFilter() {
|
||||||
|
String className = (this.serviceClass != null)
|
||||||
|
?this.serviceClass.getName()
|
||||||
|
:this.serviceClassName;
|
||||||
|
return "(" +
|
||||||
|
(CommonUtils.isValid(className)
|
||||||
|
?(Constants.OBJECTCLASS + "=" + className)
|
||||||
|
:"")
|
||||||
|
+ ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServicesFindHelper filter(String filter) {
|
||||||
|
this.filter = filter;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServicesFindHelper waitService(int millis) {
|
||||||
|
this.wait = millis;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> T get() throws Exception {
|
||||||
|
String classFilter = getClassFilter();
|
||||||
|
String finalFilter = "";
|
||||||
|
if (CommonUtils.isValid(classFilter))
|
||||||
|
if (CommonUtils.isValid(this.filter))
|
||||||
|
finalFilter = String.format("(&%s%s)", classFilter, this.filter);
|
||||||
|
else
|
||||||
|
finalFilter = "(" + classFilter + ")";
|
||||||
|
else
|
||||||
|
if (CommonUtils.isValid(this.filter))
|
||||||
|
finalFilter = "(" + this.filter + ")";
|
||||||
|
else
|
||||||
|
finalFilter = "";
|
||||||
|
if (wait > 0) {
|
||||||
|
// wait for service
|
||||||
|
ServiceTracker tracker;
|
||||||
|
if (CommonUtils.isValid(this.filter))
|
||||||
|
tracker = new ServiceTracker<>(this.bundleContext, this.bundleContext.createFilter(finalFilter), null);
|
||||||
|
else
|
||||||
|
tracker = new ServiceTracker<>(this.bundleContext, this.bundleContext.createFilter(classFilter), null);
|
||||||
|
tracker.open();
|
||||||
|
tracker.waitForService(this.wait);
|
||||||
|
ServiceReference<?> connectionManagerServiceReference =
|
||||||
|
tracker.getServiceReference();
|
||||||
|
tracker.close();
|
||||||
|
return (T)bundleContext.getService(connectionManagerServiceReference);
|
||||||
|
} else {
|
||||||
|
ServiceReference<?>[] serviceReferences;
|
||||||
|
ServiceReference<?> serviceReference;
|
||||||
|
if (this.serviceClass != null)
|
||||||
|
this.serviceClassName = this.serviceClass.getName();
|
||||||
|
if (!CommonUtils.isValid(this.serviceClassName))
|
||||||
|
return null;
|
||||||
|
if (CommonUtils.isValid(this.filter)) {
|
||||||
|
serviceReferences = this.bundleContext.getServiceReferences(serviceClassName, this.filter);
|
||||||
|
serviceReference = serviceReferences.length>0
|
||||||
|
?serviceReferences[0]
|
||||||
|
:null;
|
||||||
|
} else {
|
||||||
|
serviceReference = this.bundleContext.getServiceReference(serviceClassName);
|
||||||
|
}
|
||||||
|
if (serviceReference == null)
|
||||||
|
return null;
|
||||||
|
return (T) this.bundleContext.getService(serviceReference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ServicesHelper extends ServicesEntryPoint<ServicesFindHelper> {
|
||||||
|
private ServicesFindHelper findHelper = new ServicesFindHelper();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServicesFindHelper ofClass(Class<?> clazz) {
|
||||||
|
return findHelper.ofClass(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ServicesFindHelper ofClass(String className) {
|
||||||
|
return findHelper.ofClass(className);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ServicesFindHelper getBuilder() {
|
||||||
|
return findHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public <T> T getService(Class<T> serviceClass) {
|
||||||
|
BundleContext bundleContext = FrameworkUtil.getBundle(OSGIUtils.class).getBundleContext();
|
||||||
|
return getService(bundleContext, serviceClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static public <T> T getService(BundleContext bundleContext, Class<T> serviceClass) {
|
||||||
|
T result = null;
|
||||||
|
ServiceReference<T> ref = bundleContext.getServiceReference(serviceClass);
|
||||||
|
if (ref != null) {
|
||||||
|
result = bundleContext.getService(ref);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public ServicesHelper services() {
|
||||||
|
return new ServicesHelper();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* profile-management
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker;
|
||||||
|
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
public interface BundleContextAware {
|
||||||
|
|
||||||
|
public void setBundleContext(BundleContext bundleContext);
|
||||||
|
public BundleContext getBundleContext();
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*-
|
/*-
|
||||||
* ~~~~~~licensing~~~~~~
|
* ~~~~~~licensing~~~~~~
|
||||||
* deployer-api
|
* profile-management
|
||||||
* ==========
|
* ==========
|
||||||
* Copyright (C) 2020 - 2021 EmDev LLC
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
* ==========
|
* ==========
|
||||||
@ -17,12 +17,16 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
* ~~~~~~/licensing~~~~~~
|
* ~~~~~~/licensing~~~~~~
|
||||||
*/
|
*/
|
||||||
package ru.entaxy.esb.system.deployer.api;
|
package ru.entaxy.platform.base.support.osgi.tracker;
|
||||||
|
|
||||||
public interface BundleRepository {
|
import java.util.List;
|
||||||
|
|
||||||
String deployBlueprint(String groupId, String version, String name, String extension, byte[] data) throws Exception;
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleEvent;
|
||||||
|
|
||||||
void delete(String groupId, String version, String name, String extension) throws Exception;
|
public interface BundleFilter<R> {
|
||||||
|
|
||||||
|
public String getFilterId();
|
||||||
|
public List<R> checkBundle(Bundle bundle, BundleEvent event);
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* profile-management
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker;
|
||||||
|
|
||||||
|
public interface BundleTrackerCustomizerListener<T> {
|
||||||
|
|
||||||
|
public void added(T managedObject);
|
||||||
|
public void modified(T managedObject);
|
||||||
|
public void removed(T managedObject);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,80 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* profile-management
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.FrameworkUtil;
|
||||||
|
import org.osgi.util.tracker.BundleTracker;
|
||||||
|
|
||||||
|
public class BundleTrackerUtils {
|
||||||
|
|
||||||
|
public static class BundleTrackerBuilder<T> {
|
||||||
|
|
||||||
|
protected UniformBundleTrackerCustomizer<T> customizer;
|
||||||
|
|
||||||
|
protected List<BundleFilter<?>> filters = new LinkedList<>();
|
||||||
|
|
||||||
|
protected BundleContext bundleContext = FrameworkUtil.getBundle(BundleTrackerUtils.class).getBundleContext();
|
||||||
|
|
||||||
|
protected int bundleState = Bundle.ACTIVE;
|
||||||
|
|
||||||
|
public BundleTrackerBuilder<T> customizer(UniformBundleTrackerCustomizer<T> customizer){
|
||||||
|
this.customizer = customizer;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleTrackerBuilder<T> bundleContext(BundleContext bundleContext){
|
||||||
|
this.bundleContext = bundleContext;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleTrackerBuilder<T> addFilter(BundleFilter<?> bundleFilter){
|
||||||
|
this.filters.add(bundleFilter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleTrackerBuilder<T> bundleState(int state){
|
||||||
|
this.bundleState = state;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleTracker<T> get(){
|
||||||
|
if (customizer == null)
|
||||||
|
return null;
|
||||||
|
if (customizer instanceof BundleContextAware)
|
||||||
|
((BundleContextAware)customizer).setBundleContext(bundleContext);
|
||||||
|
for (BundleFilter<?> filter: this.filters) {
|
||||||
|
if (filter instanceof BundleContextAware)
|
||||||
|
((BundleContextAware)filter).setBundleContext(bundleContext);
|
||||||
|
customizer.addFilter(filter);
|
||||||
|
}
|
||||||
|
return new BundleTracker<T>(bundleContext, bundleState, customizer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> BundleTrackerBuilder<T> createBuilder(){
|
||||||
|
return new BundleTrackerBuilder<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* profile-management
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleEvent;
|
||||||
|
import org.osgi.util.tracker.BundleTrackerCustomizer;
|
||||||
|
|
||||||
|
public abstract class UniformBundleTrackerCustomizer<T> implements BundleTrackerCustomizer<T> {
|
||||||
|
|
||||||
|
protected BundleTrackerCustomizerListener<T> listener;
|
||||||
|
|
||||||
|
protected List<BundleFilter<?>> filters = new LinkedList<>();
|
||||||
|
|
||||||
|
public UniformBundleTrackerCustomizer() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public UniformBundleTrackerCustomizer(BundleTrackerCustomizerListener<T> listener) {
|
||||||
|
super();
|
||||||
|
setListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleTrackerCustomizerListener<T> getListener() {
|
||||||
|
return listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setListener(BundleTrackerCustomizerListener<T> listener) {
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addFilter(BundleFilter<?> filter) {
|
||||||
|
this.filters.add(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UniformBundleTrackerCustomizer<T> listener(BundleTrackerCustomizerListener<T> listener){
|
||||||
|
setListener(listener);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T addingBundle(Bundle bundle, BundleEvent event) {
|
||||||
|
Map<String, List<?>> filterResults = new HashMap<>();
|
||||||
|
for (BundleFilter<?> filter: filters) {
|
||||||
|
List<?> result = filter.checkBundle(bundle, event);
|
||||||
|
if (result == null)
|
||||||
|
return null;
|
||||||
|
filterResults.put(filter.getFilterId(), result);
|
||||||
|
}
|
||||||
|
T managedObject = createManagedObject(bundle, event, filterResults);
|
||||||
|
enrichManagedObject(bundle, event, filterResults, managedObject);
|
||||||
|
if (listener != null)
|
||||||
|
listener.added(managedObject);
|
||||||
|
return managedObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract T createManagedObject(Bundle bundle, BundleEvent event, Map<String, List<?>> filterResults);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* to override
|
||||||
|
*/
|
||||||
|
protected void enrichManagedObject(Bundle bundle, BundleEvent event, Map<String, List<?>> filterResults, T managedObject) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void modifiedBundle(Bundle bundle, BundleEvent event, T object) {
|
||||||
|
listener.modified(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removedBundle(Bundle bundle, BundleEvent event, T object) {
|
||||||
|
listener.removed(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,44 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker.filter;
|
||||||
|
|
||||||
|
import ru.entaxy.platform.base.support.osgi.tracker.BundleFilter;
|
||||||
|
|
||||||
|
public abstract class AbstractBundleFilter<T, C extends AbstractBundleFilter<T, C>> implements BundleFilter<T> {
|
||||||
|
|
||||||
|
protected String filterId = getDefaultFilterId();
|
||||||
|
|
||||||
|
protected abstract String getDefaultFilterId();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFilterId() {
|
||||||
|
return filterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFilterId(String filterId) {
|
||||||
|
this.filterId = filterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public C filterId(String filterId) {
|
||||||
|
setFilterId(filterId);
|
||||||
|
return (C)this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* profile-management
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker.filter;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleEvent;
|
||||||
|
import org.osgi.framework.wiring.BundleCapability;
|
||||||
|
import org.osgi.framework.wiring.BundleRevision;
|
||||||
|
|
||||||
|
public class BundleCapabilityFilter extends AbstractBundleFilter<BundleCapability, BundleCapabilityFilter> {
|
||||||
|
|
||||||
|
public static final String DEFAULT_FILTER_ID = "bundle.capabilities";
|
||||||
|
|
||||||
|
protected String namespace;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getDefaultFilterId() {
|
||||||
|
return DEFAULT_FILTER_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BundleCapability> checkBundle(Bundle bundle, BundleEvent event) {
|
||||||
|
BundleRevision revision = bundle.adapt(BundleRevision.class);
|
||||||
|
if (revision == null)
|
||||||
|
return null;
|
||||||
|
List<BundleCapability> capabilities = revision.getDeclaredCapabilities(namespace);
|
||||||
|
if ((capabilities==null) || (capabilities.size()==0))
|
||||||
|
return null;
|
||||||
|
return capabilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNamespace(String namespace) {
|
||||||
|
this.namespace = namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleCapabilityFilter namespace(String namespace) {
|
||||||
|
setNamespace(namespace);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,81 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.osgi.tracker.filter;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleEvent;
|
||||||
|
|
||||||
|
import ru.entaxy.platform.base.support.CommonUtils;
|
||||||
|
|
||||||
|
public class BundleHeaderFilter extends AbstractBundleFilter<String, BundleHeaderFilter> {
|
||||||
|
|
||||||
|
public static final String DEFAULT_FILTER_ID = "bundle.header";
|
||||||
|
|
||||||
|
protected String header;
|
||||||
|
|
||||||
|
protected String value = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getDefaultFilterId() {
|
||||||
|
return DEFAULT_FILTER_ID;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> checkBundle(Bundle bundle, BundleEvent event) {
|
||||||
|
Map<String, String> headers = CommonUtils.getDictionaryAsMap(bundle.getHeaders());
|
||||||
|
if (!headers.containsKey(header))
|
||||||
|
return null;
|
||||||
|
String headerValue = headers.get(header);
|
||||||
|
if (value != null)
|
||||||
|
if (!value.equals(headerValue))
|
||||||
|
return null;
|
||||||
|
return Arrays.asList(new String[] {headerValue});
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeader() {
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeader(String header) {
|
||||||
|
this.header = header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BundleHeaderFilter header(String headerValue) {
|
||||||
|
this.setHeader(headerValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
};
|
||||||
|
|
||||||
|
public BundleHeaderFilter value(String valueValue) {
|
||||||
|
this.setValue(valueValue);
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
}
|
@ -0,0 +1,252 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* base-support
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.platform.base.support.xml;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBContext;
|
||||||
|
import javax.xml.bind.JAXBElement;
|
||||||
|
import javax.xml.bind.Marshaller;
|
||||||
|
import javax.xml.bind.Unmarshaller;
|
||||||
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.transform.OutputKeys;
|
||||||
|
import javax.xml.transform.Result;
|
||||||
|
import javax.xml.transform.Transformer;
|
||||||
|
import javax.xml.transform.TransformerFactory;
|
||||||
|
import javax.xml.transform.dom.DOMSource;
|
||||||
|
import javax.xml.transform.stream.StreamResult;
|
||||||
|
|
||||||
|
/*import net.sf.saxon.TransformerFactoryImpl;
|
||||||
|
import net.sf.saxon.lib.NamespaceConstant;
|
||||||
|
*/
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
|
import ru.entaxy.platform.base.support.CommonUtils;
|
||||||
|
|
||||||
|
public class CommonXMLUtils {
|
||||||
|
|
||||||
|
// GETTING DOCUMENT
|
||||||
|
|
||||||
|
public static Document getDocument(URL url) throws Exception{
|
||||||
|
return getDocument(url.openStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Document getDocument(InputStream stream) throws Exception {
|
||||||
|
return getDocument(false, stream);
|
||||||
|
}
|
||||||
|
public static Document getDocument(boolean namespaceAware, InputStream stream) throws Exception {
|
||||||
|
InputSource is = new InputSource(stream);
|
||||||
|
return getDocument(namespaceAware, is);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Document newDocument(boolean namespaceAware) throws Exception{
|
||||||
|
return getDocument(namespaceAware, (File)null);
|
||||||
|
}
|
||||||
|
public static Document getDocument(boolean namespaceAware, String path) throws Exception{
|
||||||
|
return getDocument(namespaceAware, CommonUtils.isValid(path)?(new File(path)):null);
|
||||||
|
}
|
||||||
|
public static Document getDocument(boolean namespaceAware, File file) throws Exception{
|
||||||
|
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
|
||||||
|
dbf.setNamespaceAware(namespaceAware);
|
||||||
|
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||||
|
if (file!=null)
|
||||||
|
return db.parse(file);
|
||||||
|
else
|
||||||
|
return db.newDocument();
|
||||||
|
|
||||||
|
}
|
||||||
|
public static Document newDocument() throws Exception {
|
||||||
|
return newDocument(false);
|
||||||
|
}
|
||||||
|
public static Document getDocument(String path) throws Exception{
|
||||||
|
return getDocument(false, path);
|
||||||
|
}
|
||||||
|
public static Document parseString(boolean namespaceAware, String xmlData) throws Exception{
|
||||||
|
InputSource is = new InputSource(new StringReader(xmlData));
|
||||||
|
return getDocument(namespaceAware, is);
|
||||||
|
}
|
||||||
|
public static Document getDocument(InputSource source) throws Exception {
|
||||||
|
return getDocument(false, source);
|
||||||
|
}
|
||||||
|
public static Document getDocument(boolean namespaceAware, InputSource source) throws Exception {
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
factory.setNamespaceAware(namespaceAware);
|
||||||
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
|
Document d = builder.parse( source );
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
public static String doc2string(Document doc) throws Exception{
|
||||||
|
//set up a transformer
|
||||||
|
TransformerFactory transfac = TransformerFactory.newInstance();
|
||||||
|
Transformer trans = transfac.newTransformer();
|
||||||
|
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
||||||
|
trans.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||||
|
|
||||||
|
//create string from xml tree
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
StreamResult result = new StreamResult(sw);
|
||||||
|
DOMSource source = new DOMSource(doc);
|
||||||
|
trans.transform(source, result);
|
||||||
|
String xmlString = sw.toString();
|
||||||
|
|
||||||
|
return xmlString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String node2string(Node node) throws Exception {
|
||||||
|
Transformer t = TransformerFactory.newInstance().newTransformer();
|
||||||
|
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
t.transform(new DOMSource(node), new StreamResult(sw));
|
||||||
|
return sw.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
// SAVING DOCUMENT
|
||||||
|
public static void saveDocument(Document doc, String path) throws Exception{
|
||||||
|
File file = new File(path);
|
||||||
|
saveDocument(doc, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void saveDocument(Document doc, File file) throws Exception{
|
||||||
|
DOMSource source = new DOMSource(doc);
|
||||||
|
Result result = new StreamResult(file);
|
||||||
|
Transformer xformer = TransformerFactory.newInstance().newTransformer();
|
||||||
|
xformer.transform(source, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARSHAL
|
||||||
|
public static void jaxbMarshal(JAXBContext context, JAXBElement<?> object, Node node) throws Exception{
|
||||||
|
Marshaller m = context.createMarshaller();
|
||||||
|
jaxbMarshall(m, object, node);
|
||||||
|
}
|
||||||
|
public static void jaxbMarshall(Marshaller m, JAXBElement<?> object, Node node) throws Exception{
|
||||||
|
if (node==null || node.getNodeType()!=Node.ELEMENT_NODE)
|
||||||
|
throw new IllegalArgumentException("Node is not Element");
|
||||||
|
m.marshal(object, node);
|
||||||
|
}
|
||||||
|
public static String jaxbMarshall(JAXBContext context, JAXBElement<?> object) throws Exception{
|
||||||
|
String result = null;
|
||||||
|
|
||||||
|
Marshaller m = context.createMarshaller();
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
m.marshal(object, sw);
|
||||||
|
result = sw.toString();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
// UNMARSHAL
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param context
|
||||||
|
* @param node
|
||||||
|
* @param classMap
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(JAXBContext context, Node node, HashMap<String, Class<? extends Object>> classMap) throws Exception{
|
||||||
|
Unmarshaller um = context.createUnmarshaller();
|
||||||
|
return jaxbUnmarshall(um, node, classMap);
|
||||||
|
}
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(Unmarshaller um, Node node, HashMap<String, Class<? extends Object>> classMap) throws Exception{
|
||||||
|
if (node.getNodeType()!=Node.ELEMENT_NODE)
|
||||||
|
throw new IllegalArgumentException("Node is not Element");
|
||||||
|
String nodeName = node.getNodeName();
|
||||||
|
String[] s = nodeName.split(":");
|
||||||
|
nodeName = s[s.length-1];
|
||||||
|
Class<?> objectClass = classMap.get(nodeName.toLowerCase());
|
||||||
|
if (objectClass==null)
|
||||||
|
throw new IllegalArgumentException("Node name " +nodeName+ " not found in map " + classMap.toString());
|
||||||
|
Object obj = um.unmarshal(node, objectClass);
|
||||||
|
return (JAXBElement<?>)obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(Class<?> type, Document doc) throws Exception{
|
||||||
|
JAXBContext context = JAXBContext.newInstance(
|
||||||
|
type.getPackage().getName(), type.getClassLoader());
|
||||||
|
NodeList list = doc.getChildNodes();
|
||||||
|
Node node = null;
|
||||||
|
for (int i=0; i<list.getLength(); i++){
|
||||||
|
if (list.item(i).getNodeType() == Node.ELEMENT_NODE){
|
||||||
|
node = list.item(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node == null)
|
||||||
|
throw new Exception("Root element not found in document");
|
||||||
|
return jaxbUnmarshall(context.createUnmarshaller(), node, type);
|
||||||
|
}
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(Class<?> type, Node node) throws Exception{
|
||||||
|
JAXBContext context = JAXBContext.newInstance(
|
||||||
|
type.getPackage().getName(), type.getClassLoader());
|
||||||
|
return jaxbUnmarshall(context.createUnmarshaller(), node, type);
|
||||||
|
}
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(JAXBContext context, Node node, Class<?> type) throws Exception{
|
||||||
|
return jaxbUnmarshall(context.createUnmarshaller(), node, type);
|
||||||
|
}
|
||||||
|
public static JAXBElement<?> jaxbUnmarshall(Unmarshaller um, Node node, Class<?> type) throws Exception{
|
||||||
|
Object obj = um.unmarshal(node, type);
|
||||||
|
return (JAXBElement<?>)obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
// XSLT
|
||||||
|
/*
|
||||||
|
public static void transform(URL input, URL xslt, Result result) throws Exception {
|
||||||
|
TransformerFactory factory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl",TransformerFactoryImpl.class.getClassLoader());
|
||||||
|
|
||||||
|
Source xsltS = new StreamSource(xslt.openStream());
|
||||||
|
Transformer transformer = factory.newTransformer(xsltS);
|
||||||
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||||
|
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
|
||||||
|
transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");
|
||||||
|
|
||||||
|
InputStream is = input.openStream();
|
||||||
|
|
||||||
|
Source inputS = new StreamSource(is);
|
||||||
|
transformer.transform(inputS, result);
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// XPath
|
||||||
|
|
||||||
|
/* public static XPath createXPath() throws Exception {
|
||||||
|
XPathFactory factory = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON,
|
||||||
|
"net.sf.saxon.xpath.XPathFactoryImpl", net.sf.saxon.xpath.XPathFactoryImpl.class.getClassLoader());
|
||||||
|
XPath xpath = factory.newXPath();
|
||||||
|
return xpath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getStringXPathResult(org.w3c.dom.Node node, String expression) throws Exception {
|
||||||
|
XPath xpath = createXPath();
|
||||||
|
XPathExpression expr = xpath.compile(expression);
|
||||||
|
Object result = expr.evaluate(node, XPathConstants.STRING);
|
||||||
|
if (result == null)
|
||||||
|
return null;
|
||||||
|
return result.toString();
|
||||||
|
}*/
|
||||||
|
}
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime</groupId>
|
||||||
<artifactId>base</artifactId>
|
<artifactId>base</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
<artifactId>adapter</artifactId>
|
<artifactId>adapter</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@ -20,6 +20,7 @@
|
|||||||
<bundle.osgi.export.pkg>
|
<bundle.osgi.export.pkg>
|
||||||
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api,
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api,
|
||||||
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.impl,
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.impl,
|
||||||
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management,
|
||||||
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata,
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata,
|
||||||
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker,
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker,
|
||||||
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.util
|
ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.util
|
||||||
@ -35,6 +36,7 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<instructions>
|
<instructions>
|
||||||
<Bundle-Activator>ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker.AdapterTrackerActivator</Bundle-Activator>
|
<Bundle-Activator>ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker.AdapterTrackerActivator</Bundle-Activator>
|
||||||
|
<_dsannotations>*</_dsannotations>
|
||||||
</instructions>
|
</instructions>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
@ -45,24 +47,45 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.osgi</groupId>
|
<groupId>org.osgi</groupId>
|
||||||
<artifactId>osgi.core</artifactId>
|
<artifactId>osgi.core</artifactId>
|
||||||
<version>${osgi.version}</version>
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.code.gson</groupId>
|
<groupId>com.google.code.gson</groupId>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
<version>${gson.version}</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.entaxy.esb.system.management.blueprint.generator</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.generator</groupId>
|
||||||
<artifactId>blueprint-generator</artifactId>
|
<artifactId>generator-api</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base</groupId>
|
||||||
|
<artifactId>management-core</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.generator</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.generator</groupId>
|
||||||
<artifactId>generator-factory</artifactId>
|
<artifactId>generator-factory</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>org.apache.felix.scr</artifactId>
|
||||||
|
<version>2.1.20</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.osgi</groupId>
|
||||||
|
<artifactId>org.osgi.service.component.annotations</artifactId>
|
||||||
|
<version>1.4.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -19,11 +19,11 @@
|
|||||||
*/
|
*/
|
||||||
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api;
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api;
|
||||||
|
|
||||||
import ru.entaxy.esb.system.management.blueprint.generator.Blueprint;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.generator.Generated;
|
||||||
|
|
||||||
public interface Adapter {
|
public interface Adapter {
|
||||||
public static final String ADAPTER_CLASS_HEADER_NAME = "Entaxy-Adapter-Class";
|
public static final String ADAPTER_CLASS_HEADER_NAME = "Entaxy-Adapter-Class";
|
||||||
public static final String ADAPTER_HEADER_NAME = "Entaxy-Adapter";
|
public static final String ADAPTER_HEADER_NAME = "Entaxy-Adapter";
|
||||||
@ -45,7 +45,15 @@ public interface Adapter {
|
|||||||
public default Map<String, String> getProperties() {
|
public default Map<String, String> getProperties() {
|
||||||
return new HashMap<>();
|
return new HashMap<>();
|
||||||
}
|
}
|
||||||
public default Blueprint generate(String type, Map<String, Object> map) throws Exception {
|
|
||||||
|
/*
|
||||||
|
@Deprecated
|
||||||
|
public default Blueprint generateBlueprint(String type, Map<String, Object> map) throws Exception {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
public default Generated generate(String type, Map<String, Object> map) throws Exception {
|
||||||
|
return Generated.create();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,19 +19,6 @@
|
|||||||
*/
|
*/
|
||||||
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.impl;
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.impl;
|
||||||
|
|
||||||
import com.google.gson.*;
|
|
||||||
import org.osgi.framework.BundleContext;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api.Adapter;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterFieldElement;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterGeneratorElement;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterMetadataElement;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.generator.Generator;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.generator.factory.GeneratorFactory;
|
|
||||||
import ru.entaxy.esb.platform.runtime.base.connecting.generator.ftl.FTLGenerator;
|
|
||||||
import ru.entaxy.esb.system.management.blueprint.generator.Blueprint;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@ -43,6 +30,24 @@ import java.util.Map;
|
|||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api.Adapter;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterFieldElement;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterGeneratorElement;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata.AdapterMetadataElement;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.generator.Generated;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.generator.Generator;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.generator.factory.GeneratorFactory;
|
||||||
|
|
||||||
public class DefaultAdapter implements Adapter {
|
public class DefaultAdapter implements Adapter {
|
||||||
|
|
||||||
protected static final Logger log = LoggerFactory.getLogger(DefaultAdapter.class);
|
protected static final Logger log = LoggerFactory.getLogger(DefaultAdapter.class);
|
||||||
@ -54,8 +59,25 @@ public class DefaultAdapter implements Adapter {
|
|||||||
protected String defaultName = "Undefined";
|
protected String defaultName = "Undefined";
|
||||||
protected String defaultDescription = "Undefined";
|
protected String defaultDescription = "Undefined";
|
||||||
protected AdapterMetadataElement adapterMetadata;
|
protected AdapterMetadataElement adapterMetadata;
|
||||||
protected Map<String, Generator> generatorList = new HashMap<>();
|
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
protected Map<String, Generator> generatorList = new HashMap<>();
|
||||||
|
protected Map<String, GeneratorDescriptor> generatorDescriptorList = new HashMap<>();
|
||||||
|
|
||||||
|
protected static class GeneratorDescriptor {
|
||||||
|
BundleContext bundleContext;
|
||||||
|
AdapterGeneratorElement generatorElement;
|
||||||
|
Generator generator;
|
||||||
|
boolean linked = false;
|
||||||
|
|
||||||
|
public void linkGenerator() {
|
||||||
|
generator = GeneratorFactory.createGenerator(generatorElement.getGenerator()
|
||||||
|
, generatorElement.getType(), bundleContext);
|
||||||
|
linked = (generator != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public DefaultAdapter(BundleContext bundleContext) throws IOException {
|
public DefaultAdapter(BundleContext bundleContext) throws IOException {
|
||||||
this.bundleContext = bundleContext;
|
this.bundleContext = bundleContext;
|
||||||
log.debug("Constructor of adapter {}", DefaultAdapter.class.getName());
|
log.debug("Constructor of adapter {}", DefaultAdapter.class.getName());
|
||||||
@ -84,9 +106,20 @@ public class DefaultAdapter implements Adapter {
|
|||||||
|
|
||||||
this.adapterMetadata = gson.fromJson(adapterElement, AdapterMetadataElement.class);
|
this.adapterMetadata = gson.fromJson(adapterElement, AdapterMetadataElement.class);
|
||||||
|
|
||||||
initGenerators(adapterMetadata.getGenerators());
|
List<AdapterGeneratorElement> generators = adapterMetadata.getGenerators();
|
||||||
|
|
||||||
return this.adapterMetadata != null && !generatorList.isEmpty();
|
for (AdapterGeneratorElement generator: generators) {
|
||||||
|
GeneratorDescriptor descriptor = new GeneratorDescriptor();
|
||||||
|
descriptor.bundleContext = this.bundleContext;
|
||||||
|
descriptor.generatorElement = generator;
|
||||||
|
if (!generator.isLazy())
|
||||||
|
descriptor.linkGenerator();
|
||||||
|
this.generatorDescriptorList.put(generator.getType(), descriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// initGenerators(adapterMetadata.getGenerators());
|
||||||
|
|
||||||
|
return this.adapterMetadata != null && !generatorDescriptorList.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initGenerators(List<AdapterGeneratorElement> generators) {
|
private void initGenerators(List<AdapterGeneratorElement> generators) {
|
||||||
@ -151,14 +184,17 @@ public class DefaultAdapter implements Adapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Blueprint generate(String type, Map<String, Object> map) throws Exception {
|
public Generated generate(String type, Map<String, Object> map) throws Exception {
|
||||||
FTLGenerator generator = (FTLGenerator) generatorList.get(type);
|
GeneratorDescriptor descriptor = generatorDescriptorList.get(type);
|
||||||
if (null == generator) {
|
if (descriptor == null)
|
||||||
throw new NoSuchElementException(type + " generator missed in generator list.");
|
throw new NoSuchElementException("Generator of type ["
|
||||||
}
|
+ type + "] not defined for adapter [" + this.getId() + "]");
|
||||||
// TODO: 09.07.2021 Artifact wrapper needed instead of Blueprint (not only blueprint can be return from generator)
|
if (!descriptor.linked)
|
||||||
Blueprint result = generator.generate(map);
|
descriptor.linkGenerator();
|
||||||
|
if (!descriptor.linked)
|
||||||
return result;
|
throw new NoSuchElementException("Generator of type ["
|
||||||
|
+ type + "] not linked for adapter [" + this.getId() + "]");
|
||||||
|
Generator generator = descriptor.generator;
|
||||||
|
return generator.generate(map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* adapters-core
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management;
|
||||||
|
|
||||||
|
public interface AdapterMBean {
|
||||||
|
|
||||||
|
public boolean isInited();
|
||||||
|
|
||||||
|
public String getId();
|
||||||
|
|
||||||
|
public String getName();
|
||||||
|
|
||||||
|
public String getDescription();
|
||||||
|
|
||||||
|
// public Map<String, String> getOptions();
|
||||||
|
|
||||||
|
// public Map<String, String> getProperties();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* adapters-core
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management;
|
||||||
|
|
||||||
|
import javax.management.NotCompliantMBeanException;
|
||||||
|
import javax.management.StandardMBean;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api.Adapter;
|
||||||
|
|
||||||
|
public class AdapterMBeanImpl extends StandardMBean implements AdapterMBean {
|
||||||
|
|
||||||
|
protected Adapter adapter;
|
||||||
|
|
||||||
|
public AdapterMBeanImpl(Adapter adapter) throws NotCompliantMBeanException {
|
||||||
|
super(AdapterMBean.class);
|
||||||
|
this.adapter = adapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getId() {
|
||||||
|
return adapter.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isInited() {
|
||||||
|
return adapter.isInited();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return adapter.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription() {
|
||||||
|
return adapter.getDescription();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* adapters-core
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.base.management.core.ManagementCore;
|
||||||
|
import ru.entaxy.esb.platform.base.management.core.Qualifier;
|
||||||
|
|
||||||
|
public interface AdaptersMBean {
|
||||||
|
|
||||||
|
public static final String ADAPTERS_KEY = "categrory";
|
||||||
|
|
||||||
|
public static final String ADAPTERS_VALUE = "adapters";
|
||||||
|
|
||||||
|
public static final Qualifier Q_ADAPTERS = ManagementCore.Q_PLATFORM.qualifier(ADAPTERS_KEY, ADAPTERS_VALUE);
|
||||||
|
|
||||||
|
public static final String Q_ADAPTERS_S = ManagementCore.Q_LOCAL_NODE_S + "," + ADAPTERS_KEY + "=" + ADAPTERS_VALUE;
|
||||||
|
|
||||||
|
public void execute(String value);
|
||||||
|
}
|
@ -0,0 +1,113 @@
|
|||||||
|
/*-
|
||||||
|
* ~~~~~~licensing~~~~~~
|
||||||
|
* adapters-core
|
||||||
|
* ==========
|
||||||
|
* Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
* ==========
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
* ~~~~~~/licensing~~~~~~
|
||||||
|
*/
|
||||||
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.management.DynamicMBean;
|
||||||
|
import javax.management.MBeanRegistration;
|
||||||
|
import javax.management.NotCompliantMBeanException;
|
||||||
|
import javax.management.StandardMBean;
|
||||||
|
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.ServiceRegistration;
|
||||||
|
import org.osgi.service.component.ComponentContext;
|
||||||
|
import org.osgi.service.component.annotations.Activate;
|
||||||
|
import org.osgi.service.component.annotations.CollectionType;
|
||||||
|
import org.osgi.service.component.annotations.Component;
|
||||||
|
import org.osgi.service.component.annotations.Reference;
|
||||||
|
import org.osgi.service.component.annotations.ReferenceCardinality;
|
||||||
|
import org.osgi.service.component.annotations.ReferencePolicy;
|
||||||
|
import org.osgi.service.component.annotations.ServiceScope;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.base.management.core.ManagementCore;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.api.Adapter;
|
||||||
|
|
||||||
|
@Component(
|
||||||
|
service = {AdaptersMBean.class, DynamicMBean.class, MBeanRegistration.class},
|
||||||
|
// property = {"jmx.objectname=ru.entaxy.esb:group=platform,category=adapters"},
|
||||||
|
property = {ManagementCore.ENTAXY_JMX_DOMAIN + "=" + AdaptersMBean.Q_ADAPTERS_S},
|
||||||
|
scope = ServiceScope.SINGLETON,
|
||||||
|
immediate = true
|
||||||
|
)
|
||||||
|
public class AdaptersMBeanImpl extends StandardMBean implements AdaptersMBean {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(AdaptersMBeanImpl.class);
|
||||||
|
|
||||||
|
protected Map<Adapter, ServiceRegistration<AdapterMBean>> mbeans = new HashMap<>();
|
||||||
|
|
||||||
|
// @Reference (service = BundleContext.class)
|
||||||
|
protected BundleContext bundleContext;
|
||||||
|
|
||||||
|
public AdaptersMBeanImpl() throws NotCompliantMBeanException {
|
||||||
|
super(AdaptersMBean.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Activate
|
||||||
|
public void activate(ComponentContext componentContext) {
|
||||||
|
log.info(" >> ACTIVATE <<");
|
||||||
|
this.bundleContext = componentContext.getBundleContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Reference (service = Adapter.class, cardinality = ReferenceCardinality.MULTIPLE,
|
||||||
|
unbind = "unbindAdapter", collectionType = CollectionType.SERVICE,
|
||||||
|
policy = ReferencePolicy.DYNAMIC)
|
||||||
|
public void bindAdapter(Adapter adapter) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
AdapterMBeanImpl mbean = new AdapterMBeanImpl(adapter);
|
||||||
|
Hashtable props = new Hashtable<>();
|
||||||
|
// props.put("jmx.objectname", "ru.entaxy.esb:group=platform,category=adapters,id=" + adapter.getId());
|
||||||
|
props.put(ManagementCore.JMX_OBJECTNAME, Q_ADAPTERS.qualifier("id", adapter.getId()).getValue());
|
||||||
|
ServiceRegistration<AdapterMBean> reg = bundleContext.registerService(
|
||||||
|
new String[] {
|
||||||
|
AdapterMBean.class.getName(),
|
||||||
|
DynamicMBean.class.getName(),
|
||||||
|
MBeanRegistration.class.getName()
|
||||||
|
}
|
||||||
|
, mbean
|
||||||
|
, props);
|
||||||
|
this.mbeans.put(adapter, reg);
|
||||||
|
|
||||||
|
} catch (NotCompliantMBeanException e) {
|
||||||
|
log.error("Error creating MBean for adapter: ", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unbindAdapter(Adapter adapter) {
|
||||||
|
ServiceRegistration<AdapterMBean> reg = this.mbeans.get(adapter);
|
||||||
|
if (reg != null)
|
||||||
|
reg.unregister();
|
||||||
|
this.mbeans.remove(adapter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(String value) {
|
||||||
|
log.info(">> EXECUTED");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,10 +19,26 @@
|
|||||||
*/
|
*/
|
||||||
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata;
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.metadata;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import ru.entaxy.platform.base.support.JSONUtils;
|
||||||
|
|
||||||
public class AdapterGeneratorElement {
|
public class AdapterGeneratorElement {
|
||||||
protected String type;
|
protected String type;
|
||||||
protected String generator = "FTLGenerator";
|
|
||||||
|
// Default generator is defined in GeneratorFactory
|
||||||
|
// no need to redefine it here
|
||||||
|
protected String generator = "";
|
||||||
|
|
||||||
|
protected JsonObject config;
|
||||||
|
protected Map<String, Object> configMap = new HashMap<>();
|
||||||
|
|
||||||
|
// we can postpone generator linking until it's really needed
|
||||||
|
protected boolean lazy = false;
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
@ -39,7 +55,31 @@ public class AdapterGeneratorElement {
|
|||||||
this.generator = generator;
|
this.generator = generator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public Map<String, Object> getConfigMap() {
|
||||||
|
if (configMap.isEmpty() && (this.config != null))
|
||||||
|
configMap = JSONUtils.element2map(this.config);
|
||||||
|
return configMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfigMap(Map<String, Object> configMap) {
|
||||||
|
this.configMap = configMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// actually the method is not called by Gson
|
||||||
|
public void setConfig(JsonObject configElement) {
|
||||||
|
this.config = configElement;
|
||||||
|
this.configMap = JSONUtils.element2map(configElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLazy() {
|
||||||
|
return lazy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLazy(boolean lazy) {
|
||||||
|
this.lazy = lazy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
return "AdapterGeneratorElement: " +
|
return "AdapterGeneratorElement: " +
|
||||||
"{'type': '" + type + "', " +
|
"{'type': '" + type + "', " +
|
||||||
"'generator': '" + generator + "'}";
|
"'generator': '" + generator + "'}";
|
||||||
|
@ -19,11 +19,21 @@
|
|||||||
*/
|
*/
|
||||||
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker;
|
package ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.tracker;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.management.DynamicMBean;
|
||||||
|
import javax.management.MBeanRegistration;
|
||||||
|
|
||||||
import org.osgi.framework.BundleActivator;
|
import org.osgi.framework.BundleActivator;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management.AdaptersMBean;
|
||||||
|
import ru.entaxy.esb.platform.runtime.base.connecting.adapter.core.management.AdaptersMBeanImpl;
|
||||||
|
|
||||||
public class AdapterTrackerActivator implements BundleActivator {
|
public class AdapterTrackerActivator implements BundleActivator {
|
||||||
|
|
||||||
protected static final Logger log = LoggerFactory.getLogger(AdapterTrackerActivator.class);
|
protected static final Logger log = LoggerFactory.getLogger(AdapterTrackerActivator.class);
|
||||||
@ -34,6 +44,18 @@ public class AdapterTrackerActivator implements BundleActivator {
|
|||||||
public void start(BundleContext context) throws Exception {
|
public void start(BundleContext context) throws Exception {
|
||||||
tracker = new AdapterTracker(context);
|
tracker = new AdapterTracker(context);
|
||||||
tracker.open();
|
tracker.open();
|
||||||
|
/* AdaptersMBeanImpl mbean = new AdaptersMBeanImpl();
|
||||||
|
Hashtable props = new Hashtable();
|
||||||
|
props.put("jmx.objectname", "ru.entaxy.esb:type=bundle,name=adapters");
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
list.add(AdaptersMBean.class.getName());
|
||||||
|
list.add(DynamicMBean.class.getName());
|
||||||
|
list.add(MBeanRegistration.class.getName());
|
||||||
|
String[] clazzes = list.toArray(new String[] {});
|
||||||
|
context.registerService(
|
||||||
|
clazzes
|
||||||
|
, mbean
|
||||||
|
, props);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
|
<artifactId>adapter</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.adapter</groupId>
|
||||||
|
<artifactId>amqp-adapter</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<name>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: AMQP ADAPTER</name>
|
||||||
|
<description>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: AMQP ADAPTER</description>
|
||||||
|
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<bundle.osgi.dynamicimport.pkg>*</bundle.osgi.dynamicimport.pkg>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Entaxy-Adapter>true</Entaxy-Adapter>
|
||||||
|
<Entaxy-Adapter-Class/>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"adapter": {
|
||||||
|
"id": "amqp.adapter.1",
|
||||||
|
"name": "amqpAdapter",
|
||||||
|
"description": "Messaging with AMQP protocol using Apache QPid Client.",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "destinationType",
|
||||||
|
"type": "String",
|
||||||
|
"default": "queue",
|
||||||
|
"property": false,
|
||||||
|
"option": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "destinationName",
|
||||||
|
"type": "String",
|
||||||
|
"property": false,
|
||||||
|
"option": false
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "clientId",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "acknowledgementModeName",
|
||||||
|
"default": "AUTO_ACKNOWLEDGE",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "exchangePattern",
|
||||||
|
"type": "ExchangePattern",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "password",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "url",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "username",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"generators":[
|
||||||
|
{
|
||||||
|
"type": "pathParameter",
|
||||||
|
"generator": "",
|
||||||
|
"config": {
|
||||||
|
"expession": "${destinationType}:${destinationName}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "init",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ref",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "from",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "to",
|
||||||
|
"generator": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
|
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
@ -0,0 +1,68 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#assign factoryProperties = ["url", "username", "password"]]
|
||||||
|
[#function exceptFactoryProperties(propertyName)]
|
||||||
|
[#return !factoryProperties?seq_contains(propertyName)]
|
||||||
|
[/#function]
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
|
update-strategy="reload">
|
||||||
|
[#if connection.properties??]
|
||||||
|
<cm:default-properties>
|
||||||
|
[#list connection.properties as key, value]
|
||||||
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
|
[/#list]
|
||||||
|
</cm:default-properties>
|
||||||
|
[/#if]
|
||||||
|
</cm:property-placeholder>
|
||||||
|
|
||||||
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
|
<service-properties>
|
||||||
|
<entry key="connection.name" value="[=connection.name]"/>
|
||||||
|
</service-properties>
|
||||||
|
</service>
|
||||||
|
|
||||||
|
<bean id="[=connection.name]" class="org.apache.camel.component.amqp.AMQPComponent">
|
||||||
|
[#-- //TODO change template for property reference usage instead of text value --]
|
||||||
|
<property name="connectionFactory" ref="connectionFactory"/>
|
||||||
|
[#if connection.properties??]
|
||||||
|
[#list connection.properties?keys?filter(exceptFactoryProperties) as key]
|
||||||
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
|
[/#list]
|
||||||
|
[/#if]
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="connectionFactory" class="org.apache.qpid.jms.JmsConnectionFactory">
|
||||||
|
<argument index="0" value="[='$']{[=connection.configurationPid].username}"/>
|
||||||
|
<argument index="1" value="[='$']{[=connection.configurationPid].password}"/>
|
||||||
|
<argument index="2" value="[='$']{[=connection.configurationPid].url}"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
</blueprint>
|
@ -0,0 +1,30 @@
|
|||||||
|
[#ftl]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#assign queryParameters]
|
||||||
|
[#if connection.options??]
|
||||||
|
[@compress single_line=true]
|
||||||
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
|
filter="(connection.name=[=connection.name])"/>
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
|
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
<artifactId>adapter</artifactId>
|
<artifactId>adapter</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
@ -670,7 +670,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "init",
|
"type": "init",
|
||||||
"generator": ""
|
"generator": "",
|
||||||
|
"config": {
|
||||||
|
"param1": "value1",
|
||||||
|
"param2": 10,
|
||||||
|
"param3": true
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "ref",
|
"type": "ref",
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
artemis-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
artemis-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
@ -1,26 +1,29 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
artemis-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
artemis-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#assign factoryProperties = ["url", "username", "password", "maxConnections", "maxSessionsPerConnection"]>
|
~~~~~~/licensing~~~~~~
|
||||||
<#function exceptFactoryProperties(propertyName)>
|
|
||||||
<#return !factoryProperties?seq_contains(propertyName)>
|
--]
|
||||||
</#function>
|
[#assign factoryProperties = ["url", "username", "password", "maxConnections", "maxSessionsPerConnection"]]
|
||||||
|
[#function exceptFactoryProperties(propertyName)]
|
||||||
|
[#return !factoryProperties?seq_contains(propertyName)]
|
||||||
|
[/#function]
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
@ -31,13 +34,13 @@
|
|||||||
|
|
||||||
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
update-strategy="reload">
|
update-strategy="reload">
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<cm:default-properties>
|
<cm:default-properties>
|
||||||
<#list connection.properties as key, value>
|
[#list connection.properties as key, value]
|
||||||
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</cm:default-properties>
|
</cm:default-properties>
|
||||||
</#if>
|
[/#if]
|
||||||
</cm:property-placeholder>
|
</cm:property-placeholder>
|
||||||
|
|
||||||
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
@ -47,13 +50,13 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<bean id="[=connection.name]" class="org.apache.camel.component.jms.JmsComponent">
|
<bean id="[=connection.name]" class="org.apache.camel.component.jms.JmsComponent">
|
||||||
<#-- //TODO change template for property reference usage instead of text value -->
|
[#-- //TODO change template for property reference usage instead of text value --]
|
||||||
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<#list connection.properties?keys?filter(exceptFactoryProperties) as key>
|
[#list connection.properties?keys?filter(exceptFactoryProperties) as key]
|
||||||
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</#if>
|
[/#if]
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="pooledConnectionFactory" class="org.messaginghub.pooled.jms.JmsPoolConnectionFactory"
|
<bean id="pooledConnectionFactory" class="org.messaginghub.pooled.jms.JmsPoolConnectionFactory"
|
||||||
|
@ -1,26 +1,29 @@
|
|||||||
<#--
|
[#ftl]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
artemis-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
artemis-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#assign queryParameters>
|
~~~~~~/licensing~~~~~~
|
||||||
<#if connection.options??>
|
|
||||||
<@compress single_line=true>
|
--]
|
||||||
?<#list connection.options as key, value>[=key]=[=value]<#sep>&</#list>
|
[#assign queryParameters]
|
||||||
</@compress>
|
[#if connection.options??]
|
||||||
</#if>
|
[@compress single_line=true]
|
||||||
</#assign>
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
artemis-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
artemis-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
filter="(connection.name=[=connection.name])"/>
|
filter="(connection.name=[=connection.name])"/>
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
artemis-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
artemis-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
|
<artifactId>adapter</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.adapter</groupId>
|
||||||
|
<artifactId>artemis-amqp-adapter</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<name>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: ARTEMIS AMQP ADAPTER</name>
|
||||||
|
<description>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: ARTEMIS AMQP ADAPTER</description>
|
||||||
|
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<bundle.osgi.dynamicimport.pkg>*</bundle.osgi.dynamicimport.pkg>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Entaxy-Adapter>true</Entaxy-Adapter>
|
||||||
|
<Entaxy-Adapter-Class/>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"adapter": {
|
||||||
|
"id": "artemis.amqp.adapter.1",
|
||||||
|
"name": "artemisAmqpAdapter",
|
||||||
|
"description": "Messaging with AMQP protocol using Apache QPid Client.",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "destinationType",
|
||||||
|
"type": "String",
|
||||||
|
"default": "queue",
|
||||||
|
"property": false,
|
||||||
|
"option": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "destinationName",
|
||||||
|
"type": "String",
|
||||||
|
"property": false,
|
||||||
|
"option": false
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "clientId",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "acknowledgementModeName",
|
||||||
|
"default": "AUTO_ACKNOWLEDGE",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "exchangePattern",
|
||||||
|
"type": "ExchangePattern",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "password",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "url",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "username",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"generators":[
|
||||||
|
{
|
||||||
|
"type": "pathParameter",
|
||||||
|
"generator": "",
|
||||||
|
"config": {
|
||||||
|
"expession": "${destinationType}:${destinationName}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "init",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ref",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "from",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "to",
|
||||||
|
"generator": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
artemis-amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
|
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
@ -0,0 +1,68 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
artemis-amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#assign factoryProperties = ["url", "username", "password"]]
|
||||||
|
[#function exceptFactoryProperties(propertyName)]
|
||||||
|
[#return !factoryProperties?seq_contains(propertyName)]
|
||||||
|
[/#function]
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
|
update-strategy="reload">
|
||||||
|
[#if connection.properties??]
|
||||||
|
<cm:default-properties>
|
||||||
|
[#list connection.properties as key, value]
|
||||||
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
|
[/#list]
|
||||||
|
</cm:default-properties>
|
||||||
|
[/#if]
|
||||||
|
</cm:property-placeholder>
|
||||||
|
|
||||||
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
|
<service-properties>
|
||||||
|
<entry key="connection.name" value="[=connection.name]"/>
|
||||||
|
</service-properties>
|
||||||
|
</service>
|
||||||
|
|
||||||
|
<bean id="[=connection.name]" class="org.apache.camel.component.amqp.AMQPComponent">
|
||||||
|
[#-- //TODO change template for property reference usage instead of text value --]
|
||||||
|
<property name="connectionFactory" ref="connectionFactory"/>
|
||||||
|
[#if connection.properties??]
|
||||||
|
[#list connection.properties?keys?filter(exceptFactoryProperties) as key]
|
||||||
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
|
[/#list]
|
||||||
|
[/#if]
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="connectionFactory" class="org.apache.qpid.jms.JmsConnectionFactory">
|
||||||
|
<argument index="0" value="[='$']{[=connection.configurationPid].username}"/>
|
||||||
|
<argument index="1" value="[='$']{[=connection.configurationPid].password}"/>
|
||||||
|
<argument index="2" value="[='$']{[=connection.configurationPid].url}"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
</blueprint>
|
@ -0,0 +1,30 @@
|
|||||||
|
[#ftl]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
artemis-amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#assign queryParameters]
|
||||||
|
[#if connection.options??]
|
||||||
|
[@compress single_line=true]
|
||||||
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
artemis-amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
|
filter="(connection.name=[=connection.name])"/>
|
@ -0,0 +1,24 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
artemis-amqp-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
|
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
<artifactId>adapter</artifactId>
|
<artifactId>adapter</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
file-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
file-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
@ -1,22 +1,25 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
file-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
file-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
@ -27,13 +30,13 @@
|
|||||||
|
|
||||||
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
update-strategy="reload">
|
update-strategy="reload">
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<cm:default-properties>
|
<cm:default-properties>
|
||||||
<#list connection.properties as key, value>
|
[#list connection.properties as key, value]
|
||||||
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</cm:default-properties>
|
</cm:default-properties>
|
||||||
</#if>
|
[/#if]
|
||||||
</cm:property-placeholder>
|
</cm:property-placeholder>
|
||||||
|
|
||||||
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
@ -43,11 +46,11 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<bean id="[=connection.name]" class="org.apache.camel.component.file.FileComponent">
|
<bean id="[=connection.name]" class="org.apache.camel.component.file.FileComponent">
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<#list connection.properties as key, value>
|
[#list connection.properties as key, value]
|
||||||
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</#if>
|
[/#if]
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
</blueprint>
|
</blueprint>
|
||||||
|
@ -1,26 +1,29 @@
|
|||||||
<#--
|
[#ftl]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
file-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
file-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#assign queryParameters>
|
~~~~~~/licensing~~~~~~
|
||||||
<#if connection.options??>
|
|
||||||
<@compress single_line=true>
|
--]
|
||||||
?<#list connection.options as key, value>[=key]=[=value]<#sep>&</#list>
|
[#assign queryParameters]
|
||||||
</@compress>
|
[#if connection.options??]
|
||||||
</#if>
|
[@compress single_line=true]
|
||||||
</#assign>
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
file-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
file-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
filter="(connection.name=[=connection.name])"/>
|
filter="(connection.name=[=connection.name])"/>
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
file-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
file-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
48
platform/runtime/base/connecting/adapter/h2-adapter/pom.xml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
|
<artifactId>adapter</artifactId>
|
||||||
|
<version>1.8.1</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting.adapter</groupId>
|
||||||
|
<artifactId>h2-adapter</artifactId>
|
||||||
|
<packaging>bundle</packaging>
|
||||||
|
|
||||||
|
<name>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: H2 ADAPTER</name>
|
||||||
|
<description>ENTAXY :: PLATFORM :: RUNTIME :: BASE :: CONNECTING :: ADAPTER :: H2 ADAPTER</description>
|
||||||
|
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<bundle.osgi.dynamicimport.pkg>*</bundle.osgi.dynamicimport.pkg>
|
||||||
|
<h2.version>1.4.199</h2.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Entaxy-Adapter>true</Entaxy-Adapter>
|
||||||
|
<Entaxy-Adapter-Class/>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.camel</groupId>
|
||||||
|
<artifactId>camel-jdbc</artifactId>
|
||||||
|
<version>${camel.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
@ -0,0 +1,28 @@
|
|||||||
|
###
|
||||||
|
# ~~~~~~licensing~~~~~~
|
||||||
|
# h2-adapter
|
||||||
|
# ==========
|
||||||
|
# Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
# ==========
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# ~~~~~~/licensing~~~~~~
|
||||||
|
###
|
||||||
|
dataSourceName=entaxy.esb.storage
|
||||||
|
osgi.jdbc.driver.name=H2 JDBC Driver
|
||||||
|
|
||||||
|
databaseName=${karaf.data}/storage
|
||||||
|
user=sa
|
||||||
|
password=
|
||||||
|
pool=dbcp2
|
||||||
|
xa=true
|
||||||
|
jdbc.pool.maxTotal=50
|
@ -0,0 +1,134 @@
|
|||||||
|
{
|
||||||
|
"adapter": {
|
||||||
|
"id": "h2.adapter.${h2.version}",
|
||||||
|
"name": "h2Adapter",
|
||||||
|
"description": "H2 adapter to interact with databases.",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "dataSourceName",
|
||||||
|
"type": "String",
|
||||||
|
"default": "dataSource",
|
||||||
|
"property": false,
|
||||||
|
"option": false
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "dataSource",
|
||||||
|
"type": "DataSource",
|
||||||
|
"property": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "lazyStartProducer",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "false",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "autowiredEnabled",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "true",
|
||||||
|
"property": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "connectionStrategy",
|
||||||
|
"type": "ConnectionStrategy",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "allowNamedParameters",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "true",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "outputClass",
|
||||||
|
"property": true,
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "outputType",
|
||||||
|
"type": "JdbcOutputType",
|
||||||
|
"default": "SelectList",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "parameters",
|
||||||
|
"default": "Map",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "readSize",
|
||||||
|
"type": "int",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "resetAutoCommit",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "true",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "transacted",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "false",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "useGetBytesForBlob",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "false",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "useHeadersAsParameters",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "false",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "useJDBC4ColumnNameAndLabelSemantics",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": "true",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "beanRowMapper",
|
||||||
|
"type": "BeanRowMapper",
|
||||||
|
"option": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "prepareStatementStrategy",
|
||||||
|
"type": "JdbcPrepareStatementStrategy",
|
||||||
|
"option": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"generators":[
|
||||||
|
{
|
||||||
|
"type": "pathParameter",
|
||||||
|
"generator": "",
|
||||||
|
"config": {
|
||||||
|
"expession": "${dataSourceName}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "init",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ref",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "from",
|
||||||
|
"generator": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "to",
|
||||||
|
"generator": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint"} /]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
h2-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
|
||||||
|
xsi:schemaLocation="
|
||||||
|
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"
|
||||||
|
>
|
||||||
|
|
||||||
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
|
update-strategy="reload">
|
||||||
|
[#if connection.properties??]
|
||||||
|
<cm:default-properties>
|
||||||
|
[#list connection.properties as key, value]
|
||||||
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
|
[/#list]
|
||||||
|
</cm:default-properties>
|
||||||
|
[/#if]
|
||||||
|
</cm:property-placeholder>
|
||||||
|
|
||||||
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
|
<service-properties>
|
||||||
|
<entry key="connection.name" value="[=connection.name]"/>
|
||||||
|
</service-properties>
|
||||||
|
</service>
|
||||||
|
|
||||||
|
<bean id="[=connection.name]" class="org.apache.camel.component.jdbc.JdbcComponent">
|
||||||
|
[#-- //TODO change template for property reference usage instead of text value --]
|
||||||
|
<property name="dataSource" ref="dataSource"/>
|
||||||
|
[#if connection.properties??]
|
||||||
|
[#list connection.properties as key, value]
|
||||||
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
|
[/#list]
|
||||||
|
[/#if]
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<reference id="dataSource" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=[=connection.pathParameter])"
|
||||||
|
availability="mandatory"/>
|
||||||
|
|
||||||
|
</blueprint>
|
@ -0,0 +1,29 @@
|
|||||||
|
[#ftl]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
h2-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#assign queryParameters]
|
||||||
|
[#if connection.options??]
|
||||||
|
[@compress single_line=true]
|
||||||
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
@ -0,0 +1,25 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
h2-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
|
||||||
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
|
filter="(connection.name=[=connection.name])"/>
|
@ -0,0 +1,25 @@
|
|||||||
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
|
[#--
|
||||||
|
|
||||||
|
~~~~~~licensing~~~~~~
|
||||||
|
h2-adapter
|
||||||
|
==========
|
||||||
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
|
==========
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
|
<to uri="[=connection.name]:entaxy[=queryParameters]"/>
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base.connecting</groupId>
|
||||||
<artifactId>adapter</artifactId>
|
<artifactId>adapter</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
jms-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
jms-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<from uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
@ -1,22 +1,25 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
jms-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
jms-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
@ -27,13 +30,13 @@
|
|||||||
|
|
||||||
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
<cm:property-placeholder persistent-id="[=connection.configurationPid]"
|
||||||
update-strategy="reload">
|
update-strategy="reload">
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<cm:default-properties>
|
<cm:default-properties>
|
||||||
<#list connection.properties as key, value>
|
[#list connection.properties as key, value]
|
||||||
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
<cm:property name="[=connection.configurationPid].[=key]" value="[=value]"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</cm:default-properties>
|
</cm:default-properties>
|
||||||
</#if>
|
[/#if]
|
||||||
</cm:property-placeholder>
|
</cm:property-placeholder>
|
||||||
|
|
||||||
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
<service interface="org.apache.camel.Component" ref="[=connection.name]">
|
||||||
@ -43,13 +46,13 @@
|
|||||||
</service>
|
</service>
|
||||||
|
|
||||||
<bean id="[=connection.name]" class="org.apache.camel.component.jms.JmsComponent">
|
<bean id="[=connection.name]" class="org.apache.camel.component.jms.JmsComponent">
|
||||||
<#-- //TODO change template for property reference usage instead of text value -->
|
[#-- //TODO change template for property reference usage instead of text value --]
|
||||||
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
<property name="connectionFactory" ref="pooledConnectionFactory"/>
|
||||||
<#if connection.properties??>
|
[#if connection.properties??]
|
||||||
<#list connection.properties as key, value>
|
[#list connection.properties as key, value]
|
||||||
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
<property name="[=key]" value="[='$']{[=connection.configurationPid].[=key]}"/>
|
||||||
</#list>
|
[/#list]
|
||||||
</#if>
|
[/#if]
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<reference id="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"/>
|
<reference id="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"/>
|
||||||
|
@ -1,26 +1,29 @@
|
|||||||
<#--
|
[#ftl]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
jms-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
jms-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#assign queryParameters>
|
~~~~~~/licensing~~~~~~
|
||||||
<#if connection.options??>
|
|
||||||
<@compress single_line=true>
|
--]
|
||||||
?<#list connection.options as key, value>[=key]=[=value]<#sep>&</#list>
|
[#assign queryParameters]
|
||||||
</@compress>
|
[#if connection.options??]
|
||||||
</#if>
|
[@compress single_line=true]
|
||||||
</#assign>
|
?[#list connection.options as key, value][=key]=[=value][#sep]&[/#list]
|
||||||
|
[/@compress]
|
||||||
|
[/#if]
|
||||||
|
[/#assign]
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
jms-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
jms-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
<reference id="[=connection.name]" interface="org.apache.camel.Component"
|
||||||
filter="(connection.name=[=connection.name])"/>
|
filter="(connection.name=[=connection.name])"/>
|
||||||
|
@ -1,21 +1,24 @@
|
|||||||
<#--
|
[#ftl attributes={"generated.type":"blueprint-node"}]
|
||||||
~~~~~~licensing~~~~~~
|
[#--
|
||||||
jms-adapter
|
|
||||||
==========
|
~~~~~~licensing~~~~~~
|
||||||
Copyright (C) 2020 - 2021 EmDev LLC
|
jms-adapter
|
||||||
==========
|
==========
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Copyright (C) 2020 - 2021 EmDev LLC
|
||||||
you may not use this file except in compliance with the License.
|
==========
|
||||||
You may obtain a copy of the License at
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
Unless required by applicable law or agreed to in writing, software
|
||||||
See the License for the specific language governing permissions and
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
limitations under the License.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
~~~~~~/licensing~~~~~~
|
See the License for the specific language governing permissions and
|
||||||
-->
|
limitations under the License.
|
||||||
<#include 'queryParameters.ftl'>
|
~~~~~~/licensing~~~~~~
|
||||||
|
|
||||||
|
--]
|
||||||
|
[#include 'queryParameters.ftl']
|
||||||
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
<to uri="[=connection.name]:[=connection.pathParameter][=queryParameters]"/>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>ru.entaxy.esb.platform.runtime.base</groupId>
|
<groupId>ru.entaxy.esb.platform.runtime.base</groupId>
|
||||||
<artifactId>connecting</artifactId>
|
<artifactId>connecting</artifactId>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@ -22,5 +22,9 @@
|
|||||||
<module>jms-adapter</module>
|
<module>jms-adapter</module>
|
||||||
<module>artemis-adapter</module>
|
<module>artemis-adapter</module>
|
||||||
<module>postgresql-adapter</module>
|
<module>postgresql-adapter</module>
|
||||||
|
<module>h2-adapter</module>
|
||||||
|
<module>amqp-adapter</module>
|
||||||
|
<module>artemis-amqp-adapter</module>
|
||||||
|
<module>rabbitmq-amqp-adapter</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|