Статьи

Режимы развертывания Apache Camel

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