Jun 7, 2016

Using Apache Camel in Grails 3

Grails 2 has a plugin for Apache Camel called Routing but that plugin hasn’t been upgraded to Grails 3 yet. Luckily, Grails 3 is just Spring Boot so we can use the Camel Spring Boot component…. with some caveats.

After you add the Camel component and a domain object or two, and do a grails run-app you will see something like this:

Field error in object 'Foo' on field 'version': rejected value [2.15.5]; codes [Foo.version.typeMismatch.error,Foo.version.typeMismatch,foo.version.typeMismatch.error,foo.version.typeMismatch,typeMismatch.Foo.version,typeMismatch.version,typeMismatch.java.lang.Long,typeMismatch]; arguments [version]; default message [Unable to parse number [2.15.5]

… and I was using Camel 2.15.5 in my project. Oh no… well it seems that Camel uses version in it’s Exchange metadata and it sees version in the domain objects and just inserts it’s version number there. No cool. To stop this, you need to add the following to your Grails 3 config:

grails:
   gorm:
      autowire: false

This will disable injecting beans into your domain classes… this is not something I do very often so I’m fine with it, but your use cases may vary.

After this, it’s pretty easy. I create a service with grails create-service Route then put the following in:

import org.apache.camel.builder.RouteBuilder;

public class RouteService extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("timer://foo?delay=1").to("log:bar?level=ERROR");
    }
}

And when you now run grails run-app you see that the route is running because you see these log messages.

ERROR bar - Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]
ERROR bar - Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]
ERROR bar - Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]
ERROR bar - Exchange[ExchangePattern: InOnly, BodyType: null, Body: [Body is null]]

About the Author

Object Partners profile.

One thought on “Using Apache Camel in Grails 3

  1. KP says:

    It has been ported to Grails 3. See here – https://github.com/padcom/grails-routing
    It’s just not been officially published to the repo – https://github.com/padcom/grails-routing/issues/53

  2. Andrey Volkov says:

    I spent a few hours to find and understand the issue with Camel and Grails! It looks like epic fail in integration of these 2 big whales.
    Thank you for this simple workaround.

Leave a Reply to Andrey Volkov Cancel reply

Your email address will not be published.

Related Blog Posts
Natively Compiled Java on Google App Engine
Google App Engine is a platform-as-a-service product that is marketed as a way to get your applications into the cloud without necessarily knowing all of the infrastructure bits and pieces to do so. Google App […]
Building Better Data Visualization Experiences: Part 2 of 2
If you don't have a Ph.D. in data science, the raw data might be difficult to comprehend. This is where data visualization comes in.
Unleashing Feature Flags onto Kafka Consumers
Feature flags are a tool to strategically enable or disable functionality at runtime. They are often used to drive different user experiences but can also be useful in real-time data systems. In this post, we’ll […]
A security model for developers
Software security is more important than ever, but developing secure applications is more confusing than ever. TLS, mTLS, RBAC, SAML, OAUTH, OWASP, GDPR, SASL, RSA, JWT, cookie, attack vector, DDoS, firewall, VPN, security groups, exploit, […]