2016-05-15 30 views
1

ich erfolgreich das Codebeispiel aus http://www.lagomframework.com/documentation/1.0.x/ReadSide.htmlLagom Rahmen/Persistent lesen Side/Cassandra/DataStax/Table unkonfiguriert

zusammengestellt Es geht um die Lese-Seite des CQRS Schema.

Es gibt nur ein Problem: Es läuft nicht.

Sieht aus wie Konfigurationsproblem ... und die offizielle Dokumentation von Lagom an diesem Punkt ist sehr unvollständig.

Der Fehler sagt:

java.util.concurrent.CompletionException: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table postsummary 

Okay, es gibt eine Zeile in dem Code, cassandra Abfrage der Fall ist, die Auswahl & von & auf eine Tabelle mit dem Namen postsummary einfügen.

Ich dachte, dass die Tabellen standardmäßig automatisch erstellt werden. Wie auch immer, im Zweifel, habe ich einfach diese Zeile in meinem application.conf hinzugefügt:

cassandra-journal.keyspace-autocreate = true 
cassandra-journal.tables-autocreate = true 

Trotzdem ..., kein Glück, gleichen Fehler nach dem Neustart.

Vielleicht hat es etwas mit einem anderen Fehler während des Startvorgangs zu tun, das sagt:

[warn] a.p.c.j.CassandraJournal - Failed to connect to Cassandra and initialize. It will be retried on demand. Caused by: ServiceLocator is not bound 

ich dachte ... in Ordnung, vielleicht es versucht, 9042 (Standard cassandra-Port) zu kontaktieren, während lagom standardmäßig startet eingebettet cassandra bei 4000.

Also versuchte ich diese Zeilen in application.conf fügt hinzu:

cassandra-journal.contact-points = ["127.0.0.1"] 
cassandra-journal.port = 4000 
lagom.persistence.read-side.cassandra.contact-points = ["127.0.0.1"] 
lagom.persistence.read-side.cassandra.port = 4000 

Trotzdem ..., kein Glück, gleiche Fehler.

Kann mir jemand helfen, es zu lösen. Ich muss dieses Beispiel laufen lassen, wichtiger Teil der CQRS-Studie mit Lagom.

Einige Ref .: https://github.com/lagom/lagom/blob/master/persistence/src/main/resources/reference.conf

Hier sind einige Screenshots:

enter image description here

enter image description here


Btw, ich löste es durch die Tabellen in den Code erstellen, diese Aufruf Methode von der Vorbereitungsmethode des Ereignisprozessors:

private CompletionStage<Done> prepareTables(CassandraSession session) { 
    CompletionStage<Done> preparePostSummary = session.executeCreateTable(
    "CREATE TABLE IF NOT EXISTS postsummary (" 
    + "partition bigint, id text, title text, " 
    + "PRIMARY KEY (id))" 
).whenComplete((ok, err) -> { 
    if (err != null) { 
     System.out.println("Failed to create postsummary table, due to: " + err.getMessage()); 
    } 
    }); 

    CompletionStage<Done> prepareBlogEventOffset = session.executeCreateTable(
    "CREATE TABLE IF NOT EXISTS blogevent_offset (" 
    + "partition bigint, offset uuid, " 
    + "PRIMARY KEY (offset))" 
).whenComplete((ok, err) -> { 
    if (err != null) { 
     System.out.println("Failed to create blogevent_offset table, due to: " + err.getMessage()); 
    } 
    }); 

    return preparePostSummary.thenCompose(a -> prepareBlogEventOffset); 
} 

Dank !, Raka

Antwort

1

Ich habe ein funktionierendes Beispiel hier. Selbst wenn es keine automatisch erzeugten Tabellen verwendet: https://github.com/lagom/activator-lagom-cargotracker/blob/master/registration-impl/src/main/java/sample/cargotracker/registration/impl/CargoEventProcessor.java

+0

HI Marcus, danke für das Aufzeigen. Aber wie die beiden anderen Beispiele (lagom-java & lagom-chirper) verwendet es immer noch die M1-Version von lagom. Und seit M2 wurde die ServiceCall-Definition geändert (2 Typparameter statt 3). Die Lagom Doc-Website bezieht sich auf M2 ... Ich hoffe, Sie haben eine Chance, die Beispiele mit M2 zu synchronisieren, um die Leser nicht zu verwirren. –

+0

Hallo Markus: Ich habe noch eine Frage zu Lagom, bitte hilf mir. Danke einen Haufen! : http://stackoverflow.com/questions/37241401/lagom-framework-streamed-response-pathcall-descriptor-creator-instead-of –