Я создал пользовательский репозиторий Lagom для чтения в моей службе user-impl, но по какой-то причине таблица пользователей Cassandra не создается при запуске sbt lagom:runAll
.Я не уверен, что мне здесь не хватает.
Мой класс UserRepository:
@Singleton
public class UserRepository {
private final CassandraSession session;
@Inject
public UserRepository(CassandraSession session, ReadSide readSide) {
this.session = session;
readSide.register(PUserEventProcessor.class);
}
private static class PUserEventProcessor extends ReadSideProcessor<PUserEvent> {
private final CassandraSession session;
private final CassandraReadSide readSide;
private PreparedStatement insertUserStatement;
private PreparedStatement updateUserStatement;
@Inject
public PUserEventProcessor(CassandraSession session, CassandraReadSide readSide) {
this.session = session;
this.readSide = readSide;
}
@Override
public ReadSideHandler<PUserEvent> buildHandler() {
return readSide.<PUserEvent>builder("pUserEventOffset")
.setGlobalPrepare(this::createTables)
.setPrepare(tag -> prepareStatements())
.setEventHandler(PUserEvent.PUserCreated.class,
e -> insertUser(e.getUser()))
.setEventHandler(PUserEvent.PUserUpdated.class,
e -> updateUser(e.getUser()))
.build();
}
private void registerCodec(Session session, InstantCodec codec) {
session.getCluster().getConfiguration().getCodecRegistry().register(codec);
}
@Override
public PSequence<AggregateEventTag<PUserEvent>> aggregateTags() {
return PUserEvent.TAG.allTags();
}
private CompletionStage<Done> createTables() {
return doAll(
session.executeCreateTable(
"CREATE TABLE IF NOT EXISTS users (" +
"userId UUID, " +
"email text, " +
"firstName text, " +
"lastName text, " +
"gender text, " +
"PRIMARY KEY (userId) " +
")"
)
);
}
private CompletionStage<Done> prepareStatements() {
return doAll(
session.underlying()
.thenAccept(s -> registerCodec(s, InstantCodec.instance))
.thenApply(x -> Done.getInstance()),
prepareInsertUserStatement(),
prepareUpdateUserStatement());
}
// Insert users
private CompletionStage<Done> prepareInsertUserStatement() {
return session.
prepare("INSERT INTO users(" +
"userId, " +
"email" +
"firstName, " +
"lastName, " +
"gender, " +
"refreshToken" +
") " +
"VALUES (?, ?, ?, ?, ?, ?)"
)
.thenApply(accept(s -> insertUserStatement = s));
}
private CompletionStage<List<BoundStatement>> insertUser(DbUser user) {
return completedStatements(
insertUserCreator(user)
);
}
private BoundStatement insertUserCreator(DbUser user) {
return insertUserStatement.bind(
user.getUserId(),
user.getEmail(),
user.getFirstName(),
user.getLastName(),
user.getGender(),
user.getRefreshToken()
);
}
// Update user by userId
private CompletionStage<Done> prepareUpdateUserStatement() {
return session.
prepare("UPDATE users " +
"SET email = ?, " +
" firstName = ?, " +
" lastName = ?, " +
" gender = ?, " +
" refreshToken = ?" +
"WHERE userId = ?;"
)
.thenApply(accept(s -> updateUserStatement = s));
}
private CompletionStage<List<BoundStatement>> updateUser(DbUser user) {
return completedStatements(
updateUserCreator(user)
);
}
private BoundStatement updateUserCreator(DbUser user) {
return updateUserStatement.bind(
user.getEmail(),
user.getFirstName(),
user.getLastName(),
user.getGender(),
user.getUserId(),
user.getRefreshToken()
);
}
}
}
Добавлено в UserModule.java:
public class UserModule extends AbstractModule implements ServiceGuiceSupport {
@Override
protected void configure() {
bindService(UserService.class, UserServiceImpl.class);
bind(UserRepository.class);
}
}
application.conf:
play.modules.enabled += UserModule
lagom.persistence.ask-timeout = 1000s
user.cassandra.keyspace = user
cassandra-journal.keyspace = ${user.cassandra.keyspace}
cassandra-snapshot-store.keyspace = ${user.cassandra.keyspace}
lagom.persistence.read-side.cassandra.keyspace = ${user.cassandra.keyspace}
Моя настройка стандартна:
Создана таблица 'user', таблица сообщений дажехранит события.
Любая помощь в том, почему не отображается таблица «пользователи», или как устранить неполадки?
Этот тип сводит меня с ума.
Никаких ошибок не возникает при запуске служб, проверил пример lagom-аукциона и там есть доступные пространства ключей.Я не вижу никакой разницы в коде ...
Редактировать: Больше попыток получить мою таблицу: - очистить sbt / вручную удалить встроенную кассандру - обновить lagom-sbt-plugin до 1.4.8
Помощь или даже советы высоко ценится.Много не могу сделать без чтения, лол.