Не удалось создать экземпляр реализации: AstyanaxStoreManager

Я пытаюсь получить доступ к базе данных графов Titan с помощью бэкэнда Cassandra, и все работает нормально со следующим кодом:

    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);
            .
            .
            .
    }

У вас есть идея, почему я получаю эту ошибку?


person Faber    schedule 18.08.2013    source источник
comment
Не могли бы вы прикрепить зависимости для каждого проекта, возможно, результат mvn dependency:tree -Dverbose?   -  person lpiepiora    schedule 18.08.2013
comment
Спасибо за подсказку о зависимости.   -  person Faber    schedule 18.08.2013


Ответы (1)


Проблема была связана с зависимостями, распределенными по нескольким модулям maven. Чтобы исправить это, я переместил все «внешние» зависимости, такие как titan-all, в основной (или как это назвать?) модуль maven 2whc. Все остальные модули теперь зависят только от моих собственных модулей. Например, 2whc-clustering-impl зависит только от 2whc-cluster-hierarchy-impl, а 2whc-cluster-hierarchy-impl вообще не зависит от своего собственного pom. Однако вкладка «Эффективный pom» редактора eclipse Maven POM Editor показывает для всех модулей собственные зависимости модулей и основные модули 2whc зависимостей.

от 2whc-clustering-impl:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>2whc</artifactId>
        <groupId>ch.uzh.ifi.ddis.dm</groupId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <artifactId>2whc-clustering-impl</artifactId>

    ...

    <dependencies>      
        <dependency>
            <groupId>ch.uzh.ifi.ddis.dm</groupId>
            <artifactId>2whc-cluster-hierarchy-impl</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>   
    </dependencies>
</project>

от 2whc-cluster-hierarchy-impl

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <artifactId>2whc</artifactId>
        <groupId>ch.uzh.ifi.ddis.dm</groupId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>..</relativePath>
    </parent>

    <artifactId>2whc-cluster-hierarchy-impl</artifactId>

    ...

    <dependencies>

    </dependencies>
</project>

от 2whc:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ch.uzh.ifi.ddis.dm</groupId>
    <artifactId>2whc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Two-Way Hierarchical Clustering</name>

    ...

    <modules>
        <module>2whc-clustering-api</module>
        <module>2whc-clustering-impl</module>
        <module>2whc-cluster-hierarchy-impl</module>
        <module>2whc-recommendations-impl</module>
    </modules>

    ...

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>${testng.version}</version>
        </dependency>
        <dependency>
            <groupId>net.sf.supercsv</groupId>
            <artifactId>super-csv</artifactId>
            <version>2.1.0</version>
        </dependency>    
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>2.6.0</version>
        </dependency>    
        <dependency>
            <groupId>net.sf.trove4j</groupId>
            <artifactId>trove4j</artifactId>
            <version>3.0.3</version>
        </dependency>    
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-math3</artifactId>
            <version>3.2</version>
        </dependency>           
        <dependency>
            <groupId>ch.uzh.agglorecommender</groupId>
            <artifactId>inputbeans</artifactId>
            <version>0.01</version>
        </dependency>           
        <dependency>
            <groupId>com.thinkaurelius.titan</groupId>
            <artifactId>titan-all</artifactId>
            <version>0.3.2</version>
        </dependency>           
    </dependencies>
    <properties>
        <testng.version>6.8.5</testng.version>
        <slf4j.version>1.6.6</slf4j.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
</project>
person Faber    schedule 20.08.2013