entaxy-public/documentation/connectors/create_new_connectors.adoc

204 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= План создания коннектора
Для создания полноценного коннектора необходимо создать bundle с такой структурой:
. _src/main/resource/template/<название endpoint>-in-connector.ftl_
. _src/main/resource/template/<название endpoint>-out-connector.ftl_
. _src/main/resource/OSGI-INF/blueprint/camel-context.xml_
. _pom.xml_
== Создание шаблона входного коннектора(in-connector)
_Входной коннектор_ - это коннектор, который получает сообщения из вне Entaxy.
аблон входного коннектора_ - ftl файл, на основе которого шина будет создавать индивидуальные входные коннекторы для каждой системы, с помощью подстановки параметров, полученных от пользователя.
Пример созданного шаблона, где название endpoint - _example_:
_src/main/resource/template/example-in-connector.ftl_
[source,xml]
----
<?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"
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">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
<service ref="inConnector" auto-export="interfaces">
<service-properties>
<entry key="endpointName" value="example"/>
<entry key="systemName" value="[=systemName]"/>
</service-properties>
</service>
<camelContext id="example-in-connector-[=systemName]-context" xmlns="http://camel.apache.org/schema/blueprint">
<route id="example-[=systemName]-connector">
<from uri="direct-vm:example-in-connector-[=systemName]"/>
<setHeader name="ESB.Endpoint.Name">
<constant>example</constant>
</setHeader>
<to uri="direct-vm:profile-[=systemName]-exit-dispatcher"/>
</route>
</camelContext>
</blueprint>
----
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
[source, xml]
----
<bean id="inConnector" class="ru.entaxy.esb.system.profile.commons.connectors.in.QueueInConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
<service ref="inConnector" auto-export="interfaces">
<service-properties>
<entry key="endpointName" value="example"/>
<entry key="systemName" value="[=systemName]"/>
</service-properties>
</service>
----
Маршрут коннектора, который полученные сообщения отправляет на выходную точку профиля, к которой прикрепляется сгенерированный пользователем route.
[source, xml]
----
<route id="example-[=systemName]-in-connector">
<from uri="direct-vm:example-in-connector-[=systemName]"/>
<setHeader name="ESB.Endpoint.Name">
<constant>example</constant>
</setHeader>
<to uri="direct-vm:profile-[=systemName]-exit-dispatcher"/>
</route>
----
Начало маршрута входного коннектора может начинаться не с _"direct-vm:example-in-connector-[=systemName]"_, а получать сообщения, например, через определенную папку на диске.
Для того чтобы отправить сообщение в коннектор необходимо, получить все коннекторы определенного типа (example):
[source,xml]
----
<bean id="inConnectorRegistry" class="ru.entaxy.esb.system.profile.commons.ConnectorRegistry" activation="eager"/>
<reference-list id="inConnector" interface="ru.entaxy.esb.system.profile.commons.connectors.in.InConnector"
filter="(endpointName=example)" availability="optional">
<reference-listener ref="inConnectorRegistry"
bind-method="register" unbind-method="unregister"/>
</reference-list>
----
И отправлять сообщения с помощью:
[source,xml]
----
<bean ref="inConnectorRegistry" method="send"/>
----
== Создание шаблона выходного коннектора(out-connector)
_Выходной коннектор_ - это коннектор, который отправляет сообщения из Entaxy в систему (вне Entaxy).
аблон выходного коннектора_ - ftl файл, на основе которого шина будет создавать индивидуальные выходные коннекторы для каждой системы, с помощью подстановки параметров, полученных от пользователя.
Пример созданного шаблона, где название endpoint - _example_:
_src/main/resource/template/example-out-connector.ftl_
[source,xml]
----
<?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"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<reference id="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"/>
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="pooledConnectionFactory"/>
</bean>
<bean id="exampleConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
<service ref="exampleConnector" auto-export="interfaces">
<service-properties>
<entry key="endpointName" value="example"/>
<entry key="systemName" value="[=systemName]"/>
</service-properties>
</service>
<camelContext id="example-out-connector-[=systemName]-context" xmlns="http://camel.apache.org/schema/blueprint"
errorHandlerRef="commonErrorHandler">
<errorHandler id="commonErrorHandler" redeliveryPolicyRef="noRedelivery"
type="DeadLetterChannel" deadLetterUri="direct-vm:commonErrorEndpoint"/>
<redeliveryPolicyProfile id="noRedelivery" disableRedelivery="true"/>
<route id="example-out-connector">
<from uri="direct-vm:example-out-connector-[=systemName]"/>
<log message="Message ${headers} send to system" loggingLevel="TRACE"/>
<toD uri="jms:queue:example-[=systemName]?exchangePattern=InOnly&amp;priority=${headers.SOAPJMS_HEADER_priority}"/>
</route>
</camelContext>
</blueprint>
----
Создание и публикация бина: для связи коннектора с профилем, возможности получить весь список коннекторов определенного типа.
[source, xml]
----
<bean id="exampleOutConnector" class="ru.entaxy.esb.system.profile.commons.connectors.out.QueueOutConnectorImpl">
<property name="endpointName" value="example"/>
<property name="systemName" value="[=systemName]"/>
</bean>
<service ref="exampleOutConnector" auto-export="interfaces">
<service-properties>
<entry key="endpointName" value="example"/>
<entry key="systemName" value="[=systemName]"/>
</service-properties>
</service>
----
Маршрут выходного коннектора *должен* стартовать с:
[source,xml]
----
<from uri="direct-vm:example-out-connector-[=systemName]"/>
----
== Публикация созданных шаблонов
Необходимо опубликовать osgi сервис с информацией об созданных шаблонах для того, чтобы механизм создания коннекторов увидел их.
_src/main/resource/OSGI-INF/blueprint/camel-context.xml_
[source,xml]
----
<?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"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<!--template in connector-->
<bean id="inTemplate" class="ru.entaxy.esb.system.core.template.TemplateImpl">
<property name="bundleContext" ref="blueprintBundleContext"/>
<property name="templateName" value="example-in-connector"/>
<property name="params">
<map>
<entry key="param" value="false"/>
</map>
</property>
</bean>
<service interface="ru.entaxy.esb.system.core.template.Template" ref="inTemplate"/>
<!--template out connector-->
<bean id="outTemplate" class="ru.entaxy.esb.system.core.template.TemplateImpl">
<property name="bundleContext" ref="blueprintBundleContext"/>
<property name="templateName" value="example-out-connector"/>
<property name="params">
<map>
<entry key="param" value="false"/>
</map>
</property>
</bean>
<service interface="ru.entaxy.esb.system.core.template.Template" ref="outTemplate"/>
</blueprint>
----
xref:../core/system-managment/Users-manual-System-management.adoc[Информация о создании коннекторов со стороны пользователя]