Статьи

Легкая интеграция с Java EE и Camel

Enterprise Java имеет разные вкусы и перспективы. Начиная с технологии простой платформы, которая хорошо известна как Java EE, в разных средах и аспектах интеграции и, наконец, в сценариях использования, которые включают ориентированные на данные пользовательские интерфейсы или конкретные визуализации. Самая важная проблема, которая не решается самой Java EE — это «интеграция». Существует множество продуктов от известных поставщиков, которые решают все виды проблем интеграции и обещают предоставить комплексные решения. Как разработчик, все, что вам нужно время от времени, — это решение, которое просто работает. Это основной ресурс «Приступая к работе» для разработчиков Java EE, когда речь идет о системной интеграции.

Немного теории интеграции

Проблемы интеграции не являются чем-то новым. Поскольку существовали разные типы систем и необходимость объединять их данные в другую, это стало центральной темой. Грегор Хопе и Бобби Вульф начали собирать набор базовых шаблонов, с помощью которых они решали проблемы интеграции своих клиентов. Эти корпоративные шаблоны интеграции (EIP) можно считать библией интеграции. Он пытается найти общий словарь и совокупность знаний об архитектурах асинхронного обмена сообщениями путем определения шаблона интеграции. Forrester называет их «основным языком EAI».

Что такое Apache Camel?

Apache Camel предлагает вам интерфейсы для EIP, базовые объекты, обычно необходимые реализации, средства отладки, систему конфигурации и многие другие помощники, которые сэкономят вам массу времени, когда вы захотите внедрить свое решение для следования EIP. Это готовая производственная структура. Но это не останавливается на тех первоначально определенных 65 образцах . Он включает в себя более 150 готовых к использованию компонентов, которые решают различные проблемы, связанные с конечными точками или интеграцией системы или технологии. На высоком уровне Camel состоит из CamelContext, который содержит коллекцию экземпляров Component. Компонент по сути является фабрикой экземпляров конечной точки. Вы можете явно настроить экземпляры компонентов в коде Java или в контейнере IoC, например Spring, Guice или CDI, или они могут быть автоматически обнаружены с помощью URI.

Зачем заботиться разработчикам Java EE?

Корпоративные проекты требуют от нас этого. Работа со всеми видами системных интеграций всегда была сложной темой. Вы можете выбрать сложную дорогу, используя системы обмена сообщениями и подключив их к своему приложению, и реализовать все самостоятельно или перейти на более сложный путь, используя различные продукты. С тех пор я был поклонником более прагматичных решений. И это именно то, чем на самом деле является Camel: сравнительно легкий, легко загружаемый и имеющий огромное количество встроенных компонентов интеграции, которые позволяют разработчику сосредоточиться на решении бизнес-требований, стоящих за ним. Без необходимости изучать новые API или инструменты. Camel поставляется с Java-интерфейсом Fluent API , Spring или Blueprint XML Configuration и даже с Scala DSL . Поэтому независимо от того, с какой базы вы начинаете прыгать, вы всегда найдете то, что уже знаете.

С чего начать?

Я получил тебя? Хотите попробовать? Это тоже легко. У вас есть разные способы в зависимости от используемой платформы и платформы. Оглядываясь назад на заголовок сообщения, мы сосредоточимся на Java EE.

Итак, первое, что вы можете сделать, это просто самозагрузить Camel. Все, что вам нужно, это базовая зависимость от верблюда и зависимость от cdi-верблюда. Настройка простого проекта Java EE 7 maven и добавление этих двух более чем достаточно.

01
02
03
04
05
06
07
08
09
10
<dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-core</artifactId>
   <version>${camel.version}</version>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-cdi</artifactId>
  <version>${camel.version}</version>
</dependency>

Следующее, что вам нужно сделать, это найти место, чтобы ввести ваш первый CamelContext.

1
2
@Inject
 CdiCamelContext context;

После того, как все введено, вы можете начать добавлять маршруты к нему. Более полный пример можно найти в моем проекте CamelEE7 на GitHub . Просто раскошелиться и вперед. Этот будет работать на случайном сервере приложений Java EE. Если вы уже используете WildFly , вы также можете в полной мере воспользоваться подсистемой WildFly-Camel .

WildFly Camel Подсистема

Стратегия wildfly-camel заключается в том, что пользователь может «просто использовать» основные / компонентные API верблюда в развертываниях, которые WildFly уже поддерживает. Другими словами, Camel должен «просто работать» в стандартных развертываниях Java EE. Двоичные файлы предоставляются платформой. При развертывании не нужно беспокоиться о деталях модуля / проводки.

Определение и развертывание верблюжьих контекстов может быть сделано разными способами. Вы можете либо напрямую определить контекст в конфигурации вашего автономного-camel.xml сервера, либо развернуть его как часть вашего веб-приложения либо в виде отдельного XML-файла с предопределенным суффиксом файла -camel-context.xml, либо в качестве части другого поддерживаемого WildFly. развертывание в виде файла META-INF / jboss-camel-context.xml.

В тестовом наборе WildFly Camel используется управляемый контейнер WildFly Arquillian. Это может подключиться к уже запущенному экземпляру WildFly или, при необходимости, запустить автономный экземпляр сервера. Внедрен ряд тестовых обогащений, которые позволяют вам вводить эти специфические типы WildFly Camel в ваши тестовые наборы Arquillian; Вы можете добавить CamelContextFactory или CamelContextRegistry как @ArquillianResource.

Если вы хотите начать с этим, вы можете более подробно ознакомиться с моим более подробным постом в блоге .

Поиск примеров

верблюжьей маршрут
Если вы взволнованы и получили все, что нужно, пора покопаться в некоторых примерах. Первое, на что стоит обратить внимание — это пример каталога в дистрибутиве. Есть пример для всего, что вам может понадобиться.

Одним из наиболее важных вариантов использования является тесная интеграция с ActiveMQ. И при условии, что у вас есть что-то вроде набора JMS-сообщений, которые необходимо преобразовать в файлы, хранящиеся в файловой системе: это идеальная работа для верблюдов. Вам необходимо настроить компонент ActiveMQ в дополнение к тому, что вы видели выше, и он позволяет отправлять сообщения в очередь или тему JMS или получать сообщения из очереди или темы JMS с помощью Apache ActiveMQ .

В следующем коде показано, что нужно для преобразования сообщений JMS из очереди test.queue в файловый компонент, который их использует и сохраняет на диске.

1
2
3
4
5
context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("test-jms:queue:test.queue").to("file://test");
            }
        });

Представьте себе, чтобы сделать это самостоятельно. Хотите более сложные примеры? С интеграцией в Twitter? Или другие технологии? Есть много примеров, чтобы выбрать из. Вероятно, один из самых захватывающих аспектов Camel. Это легкий, стабильный и там с годами. Не забудьте также следовать спискам рассылки и дискуссионным форумам .

Ссылка: Легкая интеграция с Java EE и Camel от нашего партнера по JCG Маркуса Эйзела в блоге Java Advent Calendar .