Java 如何使Infinispan与camel一起工作

Java 如何使Infinispan与camel一起工作,java,caching,intellij-idea,apache-camel,infinispan,Java,Caching,Intellij Idea,Apache Camel,Infinispan,我的pom.xml如下所示 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

我的pom.xml如下所示

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");
    }
}
我已经用了三天的时间试图让这个简单的示例代码使用REdhat getting started guide与Infinispan一起工作,并下载了quickstart zip来运行它,但仍然不起作用!我一直收到这样的错误:无法连接到foo:11222或SpringJMS未打开的池,然后是关于混合Uber和Jars版本的警告。我开始使用ehcache,这很难实现,因为只有有限的简单示例演示如何存储、检索和清除rest调用中的缓存等。现在,我需要它来工作,这样我就可以轻松地将它迁移到Openshift,但仍然无法工作!每次我重新启动项目时,都会出现不同的错误。请任何帮助,以一步一步地设置Infinispan工作使用我的上述代码将被认真感谢。谢谢大家


附言:我已经阅读了Redhat数据网格入门页面,并按照他们的说明做了最后的选择

使用infinispan://localhost uri格式将尝试连接到Infinispan服务器。要使用嵌入式缓存,您应该使用infinispan://?cacheName=localCache

我在您提供的示例中看到一些错误:

第一条路线:

您应该使用InfinispanConstants.value设置要放入缓存的值 第二条路线:

您应该使用第一条路由使用的相同缓存,即相同的缓存名称 应该使用simple来设置InfinispanConstants.KEY
我试过了,但仍然不起作用我启动了org.infinispan.client.hotrod.RemoteCacheManager,它只是挂起代码处理。我已经让Infinispan服务器运行,但似乎无法使用.addServer,因为它总是标记为红色&也无法找到maven依赖项来解决这个问题。我仍然不清楚您是否要使用嵌入式或客户端/服务器模式。我使用的是客户端/服务器模式,但是,我采用了与上面代码不同的路径,因为我希望将缓存作为一个单独的进程来使用,尽管它使用bean声明与路由集成。我之所以会有这个问题是因为,我使用了一个更新的客户端版本,而不是服务器版本。不过我有一个不同的问题,我需要配置两个可以相互引用的缓存实例,其中一个保存密钥引用,另一个保存存储的对象以及两个缓存实例中的一个公用密钥,以创建该链接,但没有找到使用RemoteCacheManager或ConfigurationBuilder定义两个缓存的示例。好的,这无疑消除了我对使用哪些常量的一些困惑。不过现在,我已经将它作为一个Java类来使用,这使它更易于管理和使用。
<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>