В этой части статьи я представлю различные режимы выполнения и развертывания, которые предоставляет Apache Camel. Есть так много возможностей, и я не буду обсуждать их все, но я попытаюсь сосредоточиться на самых популярных и полезных, таких как:
1. Цель Maven (полезная для целей тестирования),
2. Основной метод (полезный для приложений JSE) ,
3. веб — контейнер (полезно для веб — приложений),
4. OSGi (полезно для модульного развития).
Прежде чем начать, мне нужны примеры приложений для их развертывания различными способами. К счастью, Camel распространяется с несколькими архетипами для пользователей maven. Я буду использовать три из них:
• верблюд-архетип-весна ,
• верблюд-архетип-паутина ,
• верблюд-архетип-план .
Чтобы сгенерировать проект, используйте следующую команду:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.camel.archetypes \ -DarchetypeArtifactId=*archetype-name* \ -DarchetypeVersion=2.9.0 \ -DarchetypeRepository=https://repository.apache.org/content/groups/snapshots-g
где * archetype-name * — это имя одного из вышеупомянутых архетипов.
Цель Maven
Это чрезвычайно просто: просто создайте camel-archetype-spring и выполните команду mvn camel: run . Это оно! У нас есть полностью работающее приложение Apache Camel. Посмотрите на camel-context.xml. Вы заметите, что код файла точно такой же, как в предыдущей статье .
Метод Main
Если вам нужно создать простую платформу интеграции, которая будет работать как классическое приложение JSE Main, вам нужно использовать класс Main из пакета org.apache.camel.main . Ниже приведен код для очень простого приложения, которое будет печататься на вашей консоли.«Вызывается» + новая дата () каждые 2 секунды (2000 миллисекунд).
import java.util.Date;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;
public class MainExample {
private Main main;
public static void main(String[] args) throws Exception {
MainExample example = new MainExample();
example.boot();
}
public void boot() throws Exception {
main = new Main();
①
main.enableHangupSupport();
②
main.addRouteBuilder(new MyRouteBuilder());
③
main.run();
}
private static class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
from("timer:foo?delay=2000")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
System.out.println("Invoked at " + new Date());
}
});
}
}
}
Строка ① включает поддержку зависания, что означает, что вы можете завершить работу JVM с помощью ctrl + C.
Строка ② добавляет построитель маршрутов с простой логикой.
Строка ③ запускает приложение.
Веб-контейнер
Сначала создайте camel-archetype-web, а затем выполните команду jetty: run . Сообщение «Привет, веб-приложение, как дела?» будет появляться каждые 10 секунд. Давайте подробнее рассмотрим конфигурацию Camel и веб-дескриптор.
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Camel Routes</display-name>
<!-- location of spring xml files -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!-- the listener that kick-starts Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
Веб-дескриптор регистрирует прослушиватель загрузчика контекста Spring с указанным местоположением конфигурации контекста, которое содержит контекст Camel. Обработчик контекста верблюда затем запускает все определенные маршруты.
OSGi
OSGi — это спецификация, которая описывает модуль и сервисную платформу для Java. Для получения дополнительной информации о OSGi, посетите http://www.osgi.org/Specifications/HomePage .
Для начала вам нужно сгенерировать проект из camel-archetype-blueprint. Отдельный модуль (в нашем примере jar) в OSGi называется bundle. Для начала давайте взглянем на файл конфигурации maven (pom.xml) в строке 167:
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.4</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>camel-blueprint</Bundle-SymbolicName>
<Private-Package>com.blogspot.mw.camel.blueprint.*</Private-Package>
<Import-Package>*,org.apache.camel.osgi</Import-Package>
</instructions>
</configuration>
</plugin>
Код показывает конфигурацию выполнения плагина Apache Felix, которая сгенерирует файл MANIFEST.MF в каталоге META-INF . Private-Package указывает, какой из доступных пакетов скопировать в пакет, но не экспортировать. Import-Package указывает, какой из доступных внешних пакетов использовать. В нашем случае нам нужно импортировать org.apache.camel.osgi .
Ниже вы можете увидеть сгенерированный MANIFEST.MF :
Manifest-Version: 1.0 Export-Package: com.blogspot.mw.camel.blueprint Bundle-Version: 1.0.0.SNAPSHOT Build-Jdk: 1.6.0_25 Built-By: Michal Tool: Bnd-1.15.0 Bnd-LastModified: 1338148449092 Bundle-Name: A Camel Blueprint Route Bundle-ManifestVersion: 2 Created-By: Apache Maven Bundle Plugin Import-Package: org.apache.camel.osgi,org.osgi.service.blueprint;versi on="[1.0.0,2.0.0)" Bundle-SymbolicName: camel-blueprint
Второй файл, который стоит обсудить, это blueprint.xml из src / main / resources / OSGI-INF / blueprint / blueprint.xml . Спецификация проекта описывает информацию о внедрении зависимостей и инверсии управления для среды OSGi.
Как вы можете видеть в приведенном ниже коде, это очень похоже на конфигурацию Spring (на самом деле проект получает конфигурацию Spring):
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<bean id="helloBean" class="com.blogspot.mw.camel.blueprint.HelloBean">
<property name="say" value="Hi from Camel"/>
</bean>
<camelContext trace="false" id="blueprintContext" xmlns="http://camel.apache.org/schema/blueprint">
<route id="timerToLog">
<from uri="timer:foo?period=5000"/>
<setBody>
<method method="hello" ref="helloBean"></method>
</setBody>
<log message="The message contains ${body}"/>
<to uri="mock:result"/>
</route>
</camelContext>
</blueprint>
Чтобы запустить этот пример, мы должны загрузить некоторую среду выполнения OSGi. Я буду использовать для этой цели Apache ServiceMix (http://servicemix.apache.org/).
Чтобы запустить ServiceMix, выполните servicemix.bat (или servicemix.sh, если ваша операционная система основана на Unix).
Затем вы должны установить пакет в ServixeMix из репозитория Maven. Для этого выполните команду osgi: install -s mvn: project-group-id / project-articafact-id . В моем случае это osgi: install –s mvn: com.blogspot.mw/camel-blueprint.
Теперь вы можете отобразить журналы, набрав команду log: display.
На экране выше вы можете увидеть журналы, чтобы приложение работало.
Подводя итог, в этой части статьи мы узнали, как развертывать приложения Apache Camel четырьмя различными способами. Примеры были очень простыми, поэтому в следующей части я покажу более сложное интеграционное решение с использованием нескольких компонентов, таких как файл, activemq, электронная почта и веб-сервис.

