【问题标题】:Could not find implementation class: "cassandra"找不到实现类:“cassandra”
【发布时间】:2014-10-22 18:56:25
【问题描述】:

我正在尝试通过 Titan-Node 连接到由 Cassandra 支持的 Titan(随 Rexster Titan-Server 软件包一起安装)。

我得到了错误...

java.lang.IllegalArgumentException:找不到实现 类:“卡桑德拉”

...当我运行以下代码时....

var Titan = require('titan-node');
var gremlin = new Titan.Gremlin({ loglevel: 'OFF' });

var TitanFactory = gremlin.java.import('com.thinkaurelius.titan.core.TitanFactory');
var graph = TitanFactory.openSync('titan.config');

配置:

storage.directory = "/tmp/titan"
storage.backend = "cassandra"
storage.hostname = "127.0.0.1"
storage.port = 9160

有什么想法吗?

我的 Titan 安装文件夹以及 Titan-Node 包中的目标/依赖文件夹中似乎都有所需的 .jar。

为什么 Java 找不到文件?是否缺少类路径条目?如果是这样,是否需要为数据库或节点设置?我认为它会是节点,因为这是试图加载类的应用程序。

编辑

丹的建议给了我....

'java.lang.IllegalArgumentException: 找不到实现 班级: "com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager"'

...和...

'java.lang.IllegalArgumentException: 找不到实现 班级: "com.thinkaurelius.titan.diskstorage.cassandra.astyanax.AstyanaxStoreManager"'

...分别。

事实上,无论您在配置中将 storage.backend 设置为什么值,它都无法找到它在异常消息中报告的实现的类的名称。

如果你在这里查看代码...

https://github.com/thinkaurelius/titan/blob/master/titan-core/src/main/java/com/thinkaurelius/titan/diskstorage/Backend.java

...抛出异常的instantiate方法使用getImplementationClass中的调用传入的消息中的方法参数clazzname。后者应该通过storage.backend 中设置的键查找要加载的类,但奇怪的是它似乎没有找到任何东西,所以它按原样使用该值。即使这样,即使你直接设置它仍然找不到类。所以这里还有第二个谜。

我想我必须通过 Rexster 才能解决此问题。

【问题讨论】:

  • 检查github.com/inolen/titan-node/issues/9。这是自 6 月 19 日以来的一个已知问题,但似乎没有人关心。
  • commented on the issue。如果将 storage.backend 设置为 com.thinkaurelius.titan.diskstorage.cassandra.thrift.CassandraThriftStoreManager 或 com.thinkaurelius.titan.diskstorage.cassandra.astyanax.AstyanaxStoreManager 会发生什么?不是真正的答案或修复,但可能是一种解决方法。
  • @DanLaRocque 我已经更新了问题。

标签: java node.js cassandra titan


【解决方案1】:

此时 titan-node 支持 Titan 0.4.1 java jar 文件。 您可以通过替换新的 Titan jar 文件来升级它。 然后你可以使用下面的代码连接到 Titan

var Titan = require('titan-node');
var gremlin = new Titan.Gremlin({ loglevel: 'OFF' });

var BaseConfiguration = gremlin.java.import('org.apache.commons.configuration.BaseConfiguration');
var _confObj={'backend':'cassandra','hostname':'127.0.0.1'};
var TitanFactory = gremlin.java.import('com.thinkaurelius.titan.core.TitanFactory');

conf = new BaseConfiguration();
conf.setPropertySync("storage.backend",_confObj.backend);
conf.setPropertySync("storage.hostname",_confObj.hostname);
var graph = TitanFactory.openSync(conf);
var g = gremlin.wrap(graph);

g.addVertex(null, function (err, saturn) {
    console.log('added');
    g.commit(function() {
        console.log('commited');
    });
});

【讨论】:

  • 是的,这就是我所拥有的。我下载了早期版本的 Titan Server 以匹配 Titan-Node 安装中的 jar 版本。
猜你喜欢
  • 1970-01-01
  • 2016-07-15
  • 2021-03-30
  • 1970-01-01
  • 2017-01-09
  • 2015-02-11
  • 2015-03-01
  • 2015-08-29
  • 2022-01-11
相关资源
最近更新 更多