我尝试访问与卡桑德拉后端泰坦图形数据库和一切工作正常用下面的代码:无法实例化实现:AstyanaxStoreManager
package ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy;
import ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.ITreeSerializer;
import ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.TitanSerializer;
public class ConnectionOkDriver {
public static void main(String[] args) {
ITreeSerializer serializer = TitanSerializer.getInstance();
if (serializer.dbConnected()) {
System.out.print("connection ok");
} else {
System.out.print("connection NOT ok");
}
}
}
输出(忽略SLF4J错误):
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
connection ok
现在,如果我启动以下主要方法,我得到一个Could not instantiate implementation
错误:
package ch.uzh.ifi.ddis.dm.twhc.input;
import ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.ITreeSerializer;
import ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.TitanSerializer;
public class ConnectionFailsDriver {
public static void main(String[] args) {
ITreeSerializer serializer = TitanSerializer.getInstance();
if (serializer.dbConnected()) {
System.out.print("connection ok");
} else {
System.out.print("connection NOT ok");
}
}
}
输出(再次忽略SLF4J错误):
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.ExceptionInInitializerError
at ch.uzh.ifi.ddis.dm.twhc.input.ConnectionFailsDriver.main(ConnectionFailsDriver.java:9)
Caused by: java.lang.IllegalArgumentException: Could not instantiate implementation: com.thinkaurelius.titan.diskstorage.cassandra.astyanax.AstyanaxStoreManager
at com.thinkaurelius.titan.diskstorage.Backend.getImplementationClass(Backend.java:274)
at com.thinkaurelius.titan.diskstorage.Backend.getStorageManager(Backend.java:227)
at com.thinkaurelius.titan.diskstorage.Backend.<init>(Backend.java:97)
at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.getBackend(GraphDatabaseConfiguration.java:440)
at com.thinkaurelius.titan.graphdb.database.StandardTitanGraph.<init>(StandardTitanGraph.java:67)
at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:40)
at ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.TitanSerializer.<init>(TitanSerializer.java:88)
at ch.uzh.ifi.ddis.dm.twhc.clusterhierarchy.persistence.TitanSerializer.<clinit>(TitanSerializer.java:78)
... 1 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.thinkaurelius.titan.diskstorage.Backend.getImplementationClass(Backend.java:263)
... 8 more
Caused by: java.lang.NoSuchMethodError: com.netflix.astyanax.AstyanaxContext.getClient()Ljava/lang/Object;
at com.thinkaurelius.titan.diskstorage.cassandra.astyanax.AstyanaxStoreManager.<init>(AstyanaxStoreManager.java:166)
... 13 more
正如你所看到的类ConnectionOkDriver
和ConnectionFailsDriver
仅在包中定义的不同。但是,这两个类包含在不同的Maven模块中(2whc-clustering-impl依赖于2whc-cluster-hierarchy-impl)。我想后我的项目结构的图像,但我不能这样做:(这里是将图像的链接:https://dl.dropboxusercontent.com/u/48169775/project-structure.png
在我TitanSerializer
对象在TitanFactory.open(conf)
构造出现的错误。这是代码:
private static final String DB_TYPE = "cassandra";
private static final String DB_IP = "127.0.0.1";
private TitanSerializer() {
Configuration conf = new BaseConfiguration();
conf.setProperty("storage.backend", DB_TYPE);
conf.setProperty("storage.hostname", DB_IP);
this.graph = TitanFactory.open(conf);
.
.
.
}
你有一个想法,为什么我得到这个错误
能否请您附上依赖于每一个项目,'MVN的可能结果依赖关系:tree -Dverbose'? – lpiepiora
Thx为依赖提示。 – Faber