【问题标题】:Running Liquibase with CDI on Wildfly 8在 Wildfly 8 上使用 CDI 运行 Liquibase
【发布时间】:2014-11-17 02:10:27
【问题描述】:

我正在尝试在 WildFly 8.1.0.Final 上使用 CDI 运行 Liquibase 脚本,但出现此错误:

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。我做错了什么?

【问题讨论】:

    标签: cdi liquibase wildfly-8


    【解决方案1】:

    LiquibaseStarter 没有定义 bean 的注解。在班级级别添加@Dependent

    【讨论】:

    • 谢谢!就是这样。不幸的是,Liquibase 站点提供的示例没有此注释。 liquibase.org/documentation/cdi.html
    • 这取决于 CDI 规范级别和您的配置是否需要定义 bean 的注释。据推测,Liquibase 示例是为 CDI 1.0 编写的。
    • 我可以更新文档,但使用 CDI 不足以确定更改。我可以将 @Dependent 添加到公共类 LiquibaseProvider 吗?
    • 是的,可以。它不会破坏 CDI 1.0 的任何内容,它是 CDI 1.1+ 的默认解决方案。它将帮助临时用户,对于高级 CDI 用户来说,何时以及如何替换默认值应该是显而易见的。
    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2020-09-01
    • 1970-01-01
    • 2015-09-10
    • 2015-09-21
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多