Search code examples
javacachingintellij-ideaapache-camelinfinispan

How to make Infinispan work with camel


import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.infinispan.InfinispanConstants;
import org.apache.camel.component.jackson.JacksonDataFormat;
import org.apache.camel.model.dataformat.JsonLibrary;
import uk.co.sammy.model.Collection;

public class InfinispanRoute extends RouteBuilder {

    private JacksonDataFormat json = new JacksonDataFormat(Collection.class);

    @Override
    public void configure() throws Exception {
        from("file:src/data?noop=true&include=.*.json")
                .choice()
                .when()
                .jsonpath("$..CustInfo[?(@.firstName == 'Sammy')]").unmarshal(json)
                .log("Got customer data for ${body.custInfo.firstName}")
                .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.PUT_IF_ABSENT))
                .setHeader(InfinispanConstants.KEY, simple("${body.custInfo.firstName}"))
                .to("infinispan://localhost")
                .marshal().json(JsonLibrary.Jackson)
                .to("activemq:queue:incomingApplication", "activemq:queue:customerDetails");

        from("activemq:queue:incomingApplication")
                .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.GET))
                .setHeader(InfinispanConstants.KEY, constant("${body.custInfo.firstName}"))
                .to("infinispan://foo?cacheName=localCache")
                .setBody(simple("${header.CamelInfinispanOperationResult}"))
                .to("activemq:output");
    }
}

My pom.xml looks like the below

<properties>
        <activemq.version>5.14.1</activemq.version>
        <camel.version>2.18.0</camel.version>
        <infinispan.version>8.3.0.Final-redhat-1</infinispan.version>
        <camel-jbossdatagrid.version>6.6.1.Final-redhat-1</camel-jbossdatagrid.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jackson</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jsonpath</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.infinispan</groupId>
            <artifactId>infinispan-embedded</artifactId>
            <version>${infinispan.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jbossdatagrid</artifactId>
            <version>${camel-jbossdatagrid.version}</version>
        </dependency>

        <!--ActiveMQ -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>${activemq.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
        </dependency>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-all</artifactId>
            <version>5.1</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>fuse-release</id>
            <name>jboss Release Repository</name>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <url>http://repo.fusesource.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
</project>

I have tried for three days to get this simple sample code to work with Infinispan using the REdhat getting started guide and downloaded the quickstart zip to run that but still won't work! I keep getting the error "cannot connect to foo:11222" or "pool not open" by Spring JMS then a warning about mixing Uber and Jars version. I started off using ehcache which was a pain to implement because of limited simple examples that show how to store, retrieve and clear a cache from rest calls etc. Now, I need this to work so I can easily migrate it to Openshift but, still won't work! Every time I restart the project, I get different errors. Please any help to step by step setup Infinispan to work using my above code will be SERIOUSLY appreciated. Thanks guys!

P.S: I've read through the Redhat data grid getting started page and followed their instructions before doing this as my last resort!!!


Solution

  • Using the "infinispan://localhost" uri format will try to connect to an Infinispan server. To use an embedded cache, you should use something like "infinispan://?cacheName=localCache"