2016-10-19 9 views
0

Я занят работой с Camel и Karaf. Я построил проект с двумя пучками:Karaf camel: список маршрутов показывает только маршруты маршрута, а не маршруты Java

  • Bundle А содержит Blueprint Camel маршрут
  • Bundle B содержит чистый Java прокладывайте

Я следовал инструкции от Джейми компании Goodyear Karaf Cookbook

Оба маршрута очень просты, и я их развертываю с помощью файла функций. Они используют совершенно, а также работать так, как планировалось:

Bundle А переименовывает файлы из /tmp/in в /tmp/out Bundle B перемещает файлы из /tmp/in2 в tmp/out2

Все хорошо.

Однако, если я запускаю команду Karaf camel:route-list только тогда маршрут Blueprint показан

Кроме того, если я бегу camel:context-list только тогда контекст определяется в расслоении А показан.

Чтобы повторить, оба маршрута работают корректно, это только то, что Java не отображается в списке.

Я что-то упустил?

Вот мой Java Маршрут:

public class FileRouter extends RouteBuilder { 
    public void configure() 
    { 
     from ("file:/tmp/in2?noop=true") 
     .log("Java DSL doing the heavy lifting") 
     .to("file:/tmp/out2"); 
    } 
} 

И Bundle Активатор:

public class Activator implements BundleActivator { 
    DefaultCamelContext camelContext; 

    public void start(BundleContext context) { 
     System.out.println("Starting the bundle"); 
     camelContext = new DefaultCamelContext(); 
     try { 
      camelContext.setName("JavaDSLContext"); 
      camelContext.addRoutes(new FileRouter()); 
      camelContext.start(); 
     } catch (Exception ex) { 
      System.out.println("Exception occured! " + ex.getMessage()); 
     } 
    } 

    public void stop(BundleContext context) { 
     System.out.println("Stopping the bundle"); 
     if (camelContext != null) { 
      try { 
       camelContext.stop(); 
      } catch (Exception ex) { 
       System.out.println("Exception occured during stop context."); 
      } 
     } 
    } 
} 
+0

Является ли маршрут java развернутым как комплект? Или ты каким-то образом обернулся? –

+1

Кстати, я считаю, что самый простой способ работать с Karaf и Camel - использовать план только для соединения routeBuilder, а затем вся реализация находится в фактическом java-маршруте dsl. Это позволяет легко подключить Camel с Karaf. –

+0

Это зависит от того, как реализован ваш Java-пакет. Когда вы делаете это вручную в OSGi, вам нужно самому настроить кучу вещей, которые вы в противном случае получите бесплатно с помощью верблюжьей печати, camel-cdi или camel-scr, которые все могут запускать в OSGi. –

ответ

0

И благодаря Клаусу - я работал над материалом на Camel-SCR и в конечном итоге получил такой подход к работе. Я считаю, что Camel-SCR, вероятно, является более чистым решением, поскольку он очень легко передает свойства маршрутизатору JavaDSL.

Вот мое окончательное решение, для полноты, то я закрою этот вопрос: Файл маршрутизатор теперь выглядит следующим образом:

public class ScrFileRouter extends RouteBuilder { 

    // Configured fields 
    private String camelRouteId; 

    @Override 
    public void configure() throws Exception { 
     // Add a bean to Camel context registry 
     AbstractCamelRunner.getRegistry(getContext(), SimpleRegistry.class).put("testString", "this is a test"); 

     from("file:/tmp/in6?noop=true").routeId(camelRouteId) 
     .to("file:/tmp/out6"); 
    } 
} 

И ОПЗ на основе Camel бегуна выглядит следующим образом:

@Component(label = ScrRunner.COMPONENT_LABEL, description = ScrRunner.COMPONENT_DESCRIPTION, immediate = true, metatype = true) 
@Properties({ 
    @Property(name = "camelContextId", value = "scr-runner"), 
    @Property(name = "camelRouteId", value = "scr-file-router"), 
    @Property(name = "active", value = "true"), 
}) 
@References({ 
    @Reference(name = "camelComponent",referenceInterface = ComponentResolver.class, 
     cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, policy = ReferencePolicy.DYNAMIC, 
     policyOption = ReferencePolicyOption.GREEDY, bind = "gotCamelComponent", unbind = "lostCamelComponent") 
}) 
public class ScrRunner extends AbstractCamelRunner { 

    public static final String COMPONENT_LABEL = "ScrRunner"; 
    public static final String COMPONENT_DESCRIPTION = "This is the description for ScrRunner"; 

    @Override 
    protected List<RoutesBuilder> getRouteBuilders() { 
     List<RoutesBuilder> routesBuilders = new ArrayList<>(); 
     routesBuilders.add(new ScrFileRouter()); 
     return routesBuilders; 
    } 

    @Override 
    protected void setupCamelContext(BundleContext bundleContext, String camelContextId)throws Exception{ 
     super.setupCamelContext(bundleContext, camelContextId); 

     // Use MDC logging 
     getContext().setUseMDCLogging(true); 

     // Use breadcrumb logging 
     getContext().setUseBreadcrumb(true); 
    } 
} 

Я внимательно следил за информацией о веб-сайте Camel SCR и почти все работало. Затем я использовал предложенный архетип (camel-archetype-scr), который работал красиво.

Таким образом, в конце концов, я также должен был внести некоторые изменения в мой файл POM (Эффективно только используя POM предоставленную архетипа.)

Спасибо всем за помощь. Думаю, теперь я смогу получить некоторую тягу.

Cheers!

1

Tx Souciance Eqdam Рашти. Сегодня утром я работал над вашим блогом, чтобы узнать, что вы имели в виду с использованием плана JavaDSL.

Работает как очарование.

Просто для полноты, вот изменения:

класс My Java Маршрут остается точно такой же, как указано в вопросе, но я бросаю Активатор полностью, заменив его в файл чертежа.

светокопию будет выглядеть следующим образом:

<bean id="FileRouter" class="com.eightbitplatoon.learning.karaf.karafbasics.combined.FileRouter"> 
</bean> 
<camelContext id="karafbasics-combined" xmlns="http://camel.apache.org/schema/blueprint"> 
    <routeBuilder ref="FileRouter" /> 
</camelContext> 

Tx за помощь!

+0

Прохладный, рад, что блог помог в некотором роде! –