2016-10-05 4 views
2

Ich bin neu in Ignite und tatsächlich mit Spring-Boot-Anwendung zu interagieren mit zu zünden. Ich habe Cache in gezündet und Cache durch Zünden von Schlüsseln geholt. Aber wenn ich versuche, den Cache über die Abfrage-API zu holen, erhalte ich die folgende Ausnahme.Getting CacheException bei der Abfrage in zünden

[16:56:55,225][SEVERE][http-nio-8080-exec-2][[dispatcherServlet]] Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is javax.cache.CacheException: Indexing is disabled for cache: testCache. Use setIndexedTypes or setTypeMetadata methods on CacheConfiguration to enable.] with root cause javax.cache.CacheException: Indexing is disabled for cache: testCache. Use setIndexedTypes or setTypeMetadata methods on CacheConfiguration to enable. 

Es folgt der Code für meine Implementierung:

Wenn ich rufe diese Methode i Die oben genannten Ausnahme immer am

@RequestMapping(value = "/query/cache", produces = "text/html") 
private String queryCache(Model model) { 
    try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { 
     // Load cache with data from the database. 
     CacheConfiguration<Long, IgnitePerson> cfg = new CacheConfiguration<>("testCache"); 
     IgniteCache<Long, IgnitePerson> cache = ignite.getOrCreateCache(cfg); 
     SqlQuery<Long, IgnitePerson> query = new SqlQuery<>(IgnitePerson.class, "select * from IgnitePerson"); 
     List<Entry<Long, IgnitePerson>> list = cache.query(query).getAll(); 
     personsList = new ArrayList<>(); 
     for (Entry<Long, IgnitePerson> entry : list) { 
      personsList.add(entry.getValue()); 
     } 
     model.addAttribute("persons", personsList); 
    } 
    return "cacheresults"; 
} 

Dies funktioniert gut, und ich bin immer Cache von Ignite

@RequestMapping(value = "/read/cache", produces = "text/html") 
private String readCache(Model model) { 
    try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) { 
     // Load cache with data from the database. 
     CacheConfiguration<Long, IgnitePerson> cfg = new CacheConfiguration<>("testCache"); 
     IgniteCache<Long, IgnitePerson> cache = ignite.getOrCreateCache(cfg); 
     Set<Long> keys = new TreeSet<>(); 
     keys.add((long) 1); 
     keys.add((long) 2); 
     Map<Long, IgnitePerson> map = cache.getAll(keys); 
     personsList = new ArrayList<>(map.values()); 
     model.addAttribute("persons", personsList); 
    } 
    return "cacheresults"; 
} 

Antwort

2

Sie haben SQL-Schema und Indizierung nicht konfiguriert - dies ist erforderlich, wenn Sie möchten un Abfragen. Siehe diese Seite für Details: https://apacheignite.readme.io/docs/sql-queries

+0

danke für Ihre Antwort. Ich habe 'cfg.setIndexedTypes (Long.class, IgnitePerson.class);' zur Cache-Konfiguration hinzugefügt, bevor Daten im Cache gespeichert werden. Und meine IgnitePerson-Klassenvariablen sind mit @QuerySqlField versehen, ich habe das ignite-indexing-Modul in libs hinzugefügt. Ich habe nur einen gezündeten Knoten mit _ "ignite.bat /examples/config/example-ignite.xml"_ gestartet. Aber ich bekomme immer noch diese Ausnahme. 'javax.cache.CacheException: Abfrage konnte nicht ausgeführt werden. Fügen Sie dem Klassenpfad aller Ignite-Knoten das Modul 'ignite-indexing' hinzu – user2784095

+0

Woher kommst du? Auf dem Server oder auf dem Client? Beachten Sie, dass Sie das überall verfügbare Indexierungsmodul benötigen. –

+0

Eigentlich bekomme ich das auf Client, wenn ich nicht falsch liege. Ich benutze Spring-Boot-Anwendung und durch API versuchen, abzufragen. Wie können wir dieses Modul dem Kunden über API hinzufügen? Lassen Sie mich das verstehen, wenn wir irgendwelche Operationen auf dem ignite Cluster durchführen, erzeugt java api einen Client, der den Server im laufenden Betrieb zündet und die Daten über den Cluster einnimmt/abfragt. Ist das korrekt.? Bitte korrigieren Sie, wenn ich falsch liege. – user2784095

Verwandte Themen