Я использую Cassandra Trigger на столе.Я следую примеру и загружаю jar триггера с помощью 'nodetool reloadtriggers'.Затем я использую команду
'CREATE TRIGGER mytrigger ON ..'
из cqlsh для создания триггера на моей таблице.При добавлении записи в эту таблицу моя таблица аудита заполняется.Но при вызове метода из моего Java-приложения, которое сохраняет запись в моей таблице с помощью 'session.execute (BoundStatement)', я получаю следующее исключение:
InvalidQueryException: table of additional mutation does not match primary update table
Почему происходит вставка в таблицу иработа аудита при выполнении его непосредственно с cqlsh и почему он не работает, когда выполняется почти то же самое с приложением Java?
Я использую это как AuditTrigger, очень упрощенный (исключая все другие операции, другиечем вставка строки:
public class AuditTrigger implements ITrigger {
private Properties properties = loadProperties();
public Collection<Mutation> augment(Partition update) {
String auditKeyspace = properties.getProperty("keyspace");
String auditTable = properties.getProperty("table");
CFMetaData metadata = Schema.instance.getCFMetaData(auditKeyspace,
auditTable);
PartitionUpdate.SimpleBuilder audit =
PartitionUpdate.simpleBuilder(metadata, UUIDGen.getTimeUUID());
if (row.primaryKeyLivenessInfo().timestamp() != Long.MIN_VALUE) {
// Row Insertion
JSONObject obj = new JSONObject();
obj.put("message_id", update.metadata().getKeyValidator()
.getString(update.partitionKey().getKey()));
audit.row().add("operation", "ROW INSERTION");
}
audit.row().add("keyspace_name", update.metadata().ksName)
.add("table_name", update.metadata().cfName)
.add("primary_key", update.metadata().getKeyValidator()
.getString(update.partitionKey()
.getKey()));
return Collections.singletonList(audit.buildAsMutation());
Похоже, что при использовании BoundStatement триггер не работает:
session.execute(boundStatement);
, хотя обычная работа cql queryString работает.
session.execute(query)
Мы используем Boundstatement повсюду в нашем приложении и не можем это изменить. Любая помощь будет признательна.
Спасибо