java – 在cassandra中使用触发器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在cassandra中使用触发器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3110字,纯文字阅读大概需要5分钟。
内容图文
![java – 在cassandra中使用触发器](/upload/InfoBanner/zyjiaocheng/827/8969263cedf540c99db5de843f84c9bc.jpg)
我尝试使用示例https://github.com/apache/cassandra/tree/trunk/examples/triggers
我接受了帮助并编写了自己的触发器.但是我在UnsortedColumns.getColumn(UnsortedColumns.java:105)上得到UnsupportedOperationException.这是网络上唯一活跃的例子.其他人在此示例中已弃用.我该如何解决 ?
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.RowMutation;
import org.apache.cassandra.triggers.ITrigger;
public class FirstTrigger implements ITrigger {
@Override
public Collection<RowMutation> augment(ByteBuffer key, ColumnFamily update) {
List<RowMutation> mutations = new ArrayList<RowMutation>();
for (ByteBuffer name : update.getColumnNames()) {
RowMutation mutation = new RowMutation("mykeyspace", update.getColumn(name).value());
mutation.add("trigger_log", name, key, System.currentTimeMillis());
mutations.add(mutation);
}
return mutations;
}
}
存储日志事件的模式是:
use mykeyspace;
create table if not exists TRIGGER_LOG (
transaction_id int,
log varchar,
PRIMARY KEY (transaction_id));
我的错误是
ERROR [Thrift:1] 2013-10-28 03:53:53,120 ProcessFunction.java (line 41) Internal error processing execute_prepared_cql3_query
java.lang.RuntimeException: Exception while creating trigger on CF with ID: 08f73f2f-c4c4-3a23-b2ae-3fdc92559012
at org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:131)
at org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:73)
at org.apache.cassandra.service.StorageProxy.mutateWithTriggers(StorageProxy.java:535)
at org.apache.cassandra.cql3.statements.ModificationStatement.executeWithoutCondition(ModificationStatement.java:360)
at org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:344)
at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:101)
at org.apache.cassandra.cql3.QueryProcessor.processPrepared(QueryProcessor.java:235)
at org.apache.cassandra.thrift.CassandraServer.execute_prepared_cql3_query(CassandraServer.java:2045)
at org.apache.cassandra.thrift.Cassandra$Processor$execute_prepared_cql3_query.getResult(Cassandra.java:4480)
at org.apache.cassandra.thrift.Cassandra$Processor$execute_prepared_cql3_query.getResult(Cassandra.java:4464)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:194)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsupportedOperationException
at org.apache.cassandra.db.UnsortedColumns.getColumn(UnsortedColumns.java:105)
at com.symantec.paranoid.trigger.FirstTrigger.augment(FirstTrigger.java:18)
at org.apache.cassandra.triggers.TriggerExecutor.execute(TriggerExecutor.java:123)
... 15 more
解决方法:
而不是遍历单元名称,迭代单元格本身.
for (Column cell : update)
{
// stuff
}
该示例已得到纠正.
内容总结
以上是互联网集市为您收集整理的java – 在cassandra中使用触发器全部内容,希望文章能够帮你解决java – 在cassandra中使用触发器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。