ServiceMix (FuseESB) - невозможно развернуть сервисный блок с AggregationStrategy

Я пытаюсь развернуть очень простое приложение ESB в Apache ServiceMix (Fuse ESB), и все работает отлично, вплоть до того момента, когда я пытаюсь использовать интерфейс AggregationStrategy. Я создаю подтверждение концепции, используя EIP и шаблон агрегатора, в частности, и не могу развернуть мой артефакт из-за ошибки NoClassDefFound. Выглядит как типичная проблема с загрузкой классов, но у меня нет идей, как ее решить. Я попробовал и то и другое: добавление и удаление зависимости от верблюжьего ядра в моем сервисном подразделении (тип servicemix-camel).

Основу заявки можно найти здесь. Я изменил свое определение маршрутов следующим образом:

public void configure() {
        from("activemq:test2").split(xpath("/notes/note")).parallelProcessing().process(new NoteProcessor()).to("activemq:test3");

        from("activemq:test3").aggregate(header("id"), new MyAggregationStrategy()).completionTimeout(3000).to("activemq:test");
    }

и мой пользовательский AggregationStrategy выглядит так:

package com.softwarepassion.tutorial.camel;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.processor.aggregate.AggregationStrategy;

public class MyAggregationStrategy implements AggregationStrategy {

    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        Message newIn = newExchange.getIn();
        String oldBody = oldExchange.getIn().getBody(String.class);
        String newBody = newIn.getBody(String.class);
        newIn.setBody(oldBody + newBody);
        return newExchange;
    }
}

Я получил следующую ошибку на обычном ServiceMix, а также на FuseESB:

07: 50: 49,625 | ОШИБКА | use-01-11 / deploy | DefaultComponent
|?? | 151 - servicemix-common - 2011.02.1.fuse-02-11 | Ошибка создания бина с именем 'template': не удалось инициализировать бин; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'верблюд': сбой вызова метода init; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания компонента с именем 'com.softwarepassion.tutorial.camel.MyRouteBuilder': разрешение объявленных конструкторов в классе объектов [com.softwarepassion.tutorial.camel.Myder] [[org.apache.xbean.classloader.JarFileClassLoader: name=org.apache.xbean.spring.context.FileSystemXmlApplicationContext@1c4d3b6 urls=[файл:/home/kris/apache-servicemix-4.4.1-fuse-01-11/data/jbi/tutorial-camel-sa/sus/tutorial-camel-su/] parent =[[org.apache.xbean.classloader.JarFileClassLoader: name=SU загрузчик родительского класса urls=[] parent =[231.0, BundleDelegatingClassLoader для [camel-spring (org.apache.camel.camel-spring)], BundleDelegatingClassLoader для [camel-cxf (org.apache.camel.camel-cxf)], BundleDelegatingClassLoader для [camel-cxf-transport (org.apache).camel.camel-cxf-transport)]]]]]] не удалось; вложенное исключение - java.lang.NoClassDefFoundError: org/apache/camel/ процессор / агрегат /AggregationStrategy 07:50:49,627 | ОШИБКА | use-01-11 / deploy | ServiceAssemblyInstaller |?
? | 147 - org.apache.servicemix.jbi.deployer - 1.5.1.fuse-01-11 | Ошибка развертывания SU tutorial-camel-su

2 ответа

Решение

Не используйте JBI, его наследие / мертвый. http://gnodet.blogspot.com/2010/12/thoughts-about-servicemix.html

Используйте архетипы Camel для создания нового проекта OSGi для развертывания в ServiceMix. Список архетипов находится здесь http://camel.apache.org/camel-maven-archetypes.html

Например, верблюд-архетип-весна-дм или верблюд-архетип-план

Для тех, кто ищет решение вышеупомянутой проблемы, я наконец нашел здесь, что я должен переключиться на тип развертывания OSGI. Вы можете найти работающий пример проекта camel-osgi в каталоге examples в корне вашей установки FuseESB.

Другие вопросы по тегам