2016-11-17 2 views
2
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"); 
    } 
} 

Мой pom.xml выглядит нижеКак сделать Infinispan работу с верблюдом

<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> 

Я пытался в течение трех дней, чтобы получить этот простой пример кода для работы с Infinispan помощью RedHat руководство по началу работы и скачал быстрый запуск zip для запуска, но все равно не сработает! Я продолжаю получать ошибку «не может подключиться к foo: 11222» или «пул не открыт» весной JMS, затем предупреждение о смешивании версии Uber и Jars. Я начал использовать ehcache, что было больно для реализации из-за ограниченных простых примеров, которые показывают, как хранить, извлекать и очищать кеш от остальных вызовов и т. Д. Теперь мне нужно, чтобы это работало, поэтому я могу легко перенести его в Openshift, но все же не будет работать! Каждый раз, когда я перезапускаю проект, я получаю разные ошибки. Пожалуйста, помогите шаг за шагом настроить Infinispan для работы с использованием моего выше кода, будет СЕРЬЕЗНО оценено. Спасибо, парни!

P.S: Я прочитал начальную страницу данных Redhat и выполнил их инструкции, прежде чем делать это в качестве своего последнего средства !!!

ответ

3

Использование формата «infinispan: // localhost» будет пытаться подключиться к серверу Infinispan. Чтобы использовать встроенный кэш, вы должны использовать что-то вроде «infinispan: // cacheName = localCache»

+0

Я попробовал это, и это до сих пор не работает. :(Я получаю этот _org.infinispan.client.hotrod.RemoteCacheManager start_, и он просто висит там обработкой кода. У меня запущен сервер Infinispan, но он не может использовать _.addServer() _, поскольку это всегда отмечено red и не может найти зависимость от maven, чтобы решить это. – Sammy65

+0

Мне все еще не ясно, если вы хотите использовать встроенный или клиент/серверный режим. –

+0

Я использовал режим клиент/сервер, но я пошел другой путь от кода выше, потому что я хотел работать с кешем как отдельный процесс, хотя он был интегрирован с маршрутизацией с использованием объявления bean. Почему у меня была эта проблема, потому что я использовал новую версию клиента для версии сервера. – Sammy65

1

Я вижу несколько ошибок в примере вы предоставили:

первый маршрут:

  • вы должны установить значение, которое вы хотите поместить в кэш с InfinispanConstants.VALUE

2-й маршрут:

  • Вы должны использовать одни и те же кеширования по первому маршруту (т. то же имя кэша)
  • Вы должны использовать простой набор InfinispanConstants.KEY
+0

Хорошо, это определенно прояснило некоторую путаницу, с которой я столкнулся, какие константы использовать, но теперь, я пошел по пути использования его в качестве класса Java, что упрощает управление и работу с ним. – Sammy65

Смежные вопросы