Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
xml
xml
install file:///home/user/.m2/repository/com/example/myrouter/1.0/myrouter-1.0.jar
start <your-bundle-id>

Auto-configured consumer and producer templates

...

KuraRouter utilities 

 Kura router base class provides many useful utilities. This section explores each of those.

SLF4J logger

Code Block
languagejava
@Component
public class InvoiceProcessorMyKuraRouter extends KuraRouter {

  @Autowired
  private ProducerTemplate producerTemplate;

@Override
  @Autowired
  private ConsumerTemplate consumerTemplate;
  public void processNextInvoiceconfigure() {
throws    Invoice invoice = consumerTemplate.receiveBody("jms:invoices", Invoice.class);
    ...
    producerTemplate.sendBody("netty-http:http://invoicing.com/received/" + invoice.id());
  }

}

By default consumer and producer templates comes with the endpoint cache sizes equal to 1000. You can change that values via the following Spring properties:

...

camel.springboot.consumerTemplateCacheSize = 100
camel.springboot.producerTemplateCacheSize = 200

Auto-configured TypeConverter

Camel auto-configuration registers TypeConverter instance named typeConverter in the Spring context.

Code Block
languagejava
@Component
public class InvoiceProcessor {

  @Autowired
  private TypeConverter typeConverter;

  public long parseInvoiceValue(Invoice invoice) {
    String invoiceValue = invoice.grossValue(Exception {
		log.info("Configuring Camel routes!");
    return typeConverter.convertTo(Long.class, invoiceValue);
  }

}

Spring type conversion API bridge

...

.

...

.

...

.

...

Code Block
languagejava
@Component
public class InvoiceProcessor {

  @Autowired
  private TypeConverter typeConverter;

  public UUID parseInvoiceId(Invoice invoice) {
    // Using Spring's StringToUUIDConverter
    UUID id = invoice.typeConverter.convertTo(UUID.class, invoice.getId());
  }

}

 

Under the hood Camel Spring Boot delegates conversion to the Spring's ConversionService instances available in the application context. If no ConversionService instance is available, Camel Spring Boot auto-configuration will create one for you.

Disabling type conversions features

If you don't want Camel Spring Boot to register type-conversions related features (like TypeConverter instance or Spring bridge) set the camel.springboot.typeConversion property to false.

...

camel.springboot.typeConversion = false

BundleContext

Code Block
languagejava
public class MyKuraRouter extends KuraRouter

Fat jars and fat wars

The easiest way to create Camel-aware Spring Boot fat jar/war is to extend the org.apache.camel.spring.boot.FatJarRouter class...

 

Code Block
languagejava
package com.example;
 
... // imports
 
@SpringBootApplication
public class MyFatJarRouter extends FatJarRouter {

    @Override
    public void configure() throws Exception {
		ServiceReference<MyService> serviceRef       from("netty-http:http://0.0.0.0:18080").
            setBody().simple("ref:helloWorld");
    }

    @Bean
    String helloWorld() {
        return "helloWorld";
    }

}

 

...and add the following property to your application.properties file:

 

...

spring.main.sources = com.example.MyFatJarRouter

It is also recommended to define your main class explicitly in the Spring Boot Maven plugin configuration: 

...

 <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot.version}</version>
    <configuration>
      <mainClass>com.example.MyFatJarRouter</mainClass>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>repackage</goal>
        </goals>
      </execution>
    </executions>
</plugin>

In order to turn your fat jar into fat war, add the following class extending  org.apache.camel.spring.boot.FatWarInitializer to your project:

...

languagejava

...

= bundleContext.getServiceReference(LogService.class.getName());
		MyService myService = content.getService(serviceRef);
        ...
    }

}

 

...

Include Page
Endpoint See Also
Endpoint See Also