Запуск Liquibase с CDI на Wildfly 8

Я пытаюсь запустить скрипты Liquibase с помощью CDI на WildFly 8.1.0.Final и получаю эту ошибку:

Unsatisfied dependencies for type ResourceAccessor with qualifiers @LiquibaseType

Мой POM имеет следующие зависимости:

<dependencies>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-cdi</artifactId>
        <version>3.3.0</version>
    </dependency>
    <dependency>
        <groupId>com.mattbertolini</groupId>
        <artifactId>liquibase-slf4j</artifactId>
        <version>1.2.1</version>
    </dependency>
</dependencies>

Мой CDI Bean выглядит следующим образом:

import javax.annotation.Resource;
import javax.enterprise.inject.Produces;
import javax.sql.DataSource;

import liquibase.integration.cdi.CDILiquibaseConfig;
import liquibase.integration.cdi.annotations.LiquibaseType;
import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.resource.ResourceAccessor;

public class LiquibaseStarter {
    @Produces
    @LiquibaseType
    public CDILiquibaseConfig createConfig() {
        CDILiquibaseConfig config = new CDILiquibaseConfig();
        config.setChangeLog("liquibase/parser/core/xml/simpleChangeLog.xml");
        return config;
    }

    @Resource(name="java:jboss/datasources/ExampleDS")
    private DataSource ds;

    @Produces
    @LiquibaseType
    public DataSource createDataSource() {
        return ds;
    }

    @Produces
    @LiquibaseType
    public ResourceAccessor create() {
        return new ClassLoaderResourceAccessor(getClass().getClassLoader());
    }
}

Мой проект простой WAR. Что я делаю не так?


person lexsoto    schedule 17.11.2014    source источник


Ответы (1)


LiquibaseStarter не имеет аннотации, определяющей компонент. Добавьте @Dependent на уровне класса.

person Harald Wellmann    schedule 17.11.2014
comment
Благодарю вас! Вот оно. К сожалению, в примере, предоставленном сайтом Liquibase, этой аннотации не было. liquibase.org/documentation/cdi.html - person lexsoto; 18.11.2014
comment
Это зависит от уровня спецификации CDI и от вашей конфигурации, требуется ли аннотация, определяющая компонент. Предположительно, пример Liquibase был написан для CDI 1.0. - person Harald Wellmann; 18.11.2014
comment
Я могу обновить документы, но недостаточно использую CDI, чтобы точно знать об изменении. Могу ли я просто добавить @Dependent в открытый класс LiquibaseProvider? - person Nathan Voxland; 21.11.2014
comment
Да, это подойдет. Это ничего не сломает для CDI 1.0 и является решением по умолчанию для CDI 1.1+. Это помогло бы обычным пользователям, а для опытных пользователей CDI должно быть очевидно, когда и как заменить значение по умолчанию. - person Harald Wellmann; 21.11.2014