В этой части статьи я представлю различные режимы выполнения и развертывания, которые предоставляет 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, электронная почта и веб-сервис.