Liquibase CDI 类型数据源的不满足依赖关系
Liquibase CDI unsatisfied dependencies for type DataSource
我正在从 JBoss 7.1 迁移到 Wildfly 8。当我尝试部署包含数据库的 Liquibase 脚本的模块时,出现以下错误:
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DataSource with qualifiers @LiquibaseType
at injection point [BackedAnnotatedField] @Inject @LiquibaseType private liquibase.integration.cdi.CDILiquibase.dataSource
at liquibase.integration.cdi.CDILiquibase.dataSource(CDILiquibase.java:0)
根据文档设置生产者:
public class LiquibaseProducer {
private static final String MASTER_CHANGE_LOG_FILE="master_change_log.xml";
@Resource(mappedName="java:jboss/datasources/MyDS")
private DataSource dataSource;
@Produces @LiquibaseType
public CDILiquibaseConfig createConfig() {
CDILiquibaseConfig config = new CDILiquibaseConfig();
config.setChangeLog(MASTER_CHANGE_LOG_FILE);
return config;
}
@Produces @LiquibaseType
public DataSource createDataSource() throws SQLException {
return dataSource;
}
@Produces @LiquibaseType
public ResourceAccessor create() {
return new ClassLoaderResourceAccessor(getClass().getClassLoader());
}
}
我尝试按照 this answer 中的说明添加 @Dependent
注释,但没有成功。此外,尝试使用 @Startup/@ApplicationScoped/@Stateless
,但这也没有帮助。
最初我们使用的是 Liquibase 3.0.2。现在,由于 this Jira issue 我已经升级到 3.0.6,现在甚至升级到 3.4.1 - 仍然没有。
通过启用调试,我可以看到 LiquibaseProducer 已注册:
11:27:53,180 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [ResourceAccessor] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.create()]
11:27:53,180 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundRequestContext
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundSessionContext
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpServletRequest
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|ServletContext
11:27:53,182 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Managed Bean [class com.server.database.LiquibaseProducer] with qualifiers [@Any @Default]
11:27:53,182 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundConversationContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpConversationContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpSessionContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpSessionDestructionContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|RequestContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|ApplicationContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|SingletonContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [DataSource] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.createDataSource()]
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|Conversation
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [CDILiquibaseConfig] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.createConfig()]
所以我现在不知道为什么它不能与 Wildfly 一起工作。最后一个想法是,我的生产者从不同的 rt.jar 中生成了与 Liquibase 预期不同的数据源。虽然不确定它是否有意义。
如有任何帮助,我们将不胜感激。
您似乎部署了耳朵。确保 CDILiquibase 对您的生产商具有可见性。从日志来看,您的生产者似乎位于 war。如果 CDILiquibase 在不同的模块中,这可能是问题所在。
我正在从 JBoss 7.1 迁移到 Wildfly 8。当我尝试部署包含数据库的 Liquibase 脚本的模块时,出现以下错误:
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.0.Final.jar:1.2.0.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45]
at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DataSource with qualifiers @LiquibaseType
at injection point [BackedAnnotatedField] @Inject @LiquibaseType private liquibase.integration.cdi.CDILiquibase.dataSource
at liquibase.integration.cdi.CDILiquibase.dataSource(CDILiquibase.java:0)
根据文档设置生产者:
public class LiquibaseProducer {
private static final String MASTER_CHANGE_LOG_FILE="master_change_log.xml";
@Resource(mappedName="java:jboss/datasources/MyDS")
private DataSource dataSource;
@Produces @LiquibaseType
public CDILiquibaseConfig createConfig() {
CDILiquibaseConfig config = new CDILiquibaseConfig();
config.setChangeLog(MASTER_CHANGE_LOG_FILE);
return config;
}
@Produces @LiquibaseType
public DataSource createDataSource() throws SQLException {
return dataSource;
}
@Produces @LiquibaseType
public ResourceAccessor create() {
return new ClassLoaderResourceAccessor(getClass().getClassLoader());
}
}
我尝试按照 this answer 中的说明添加 @Dependent
注释,但没有成功。此外,尝试使用 @Startup/@ApplicationScoped/@Stateless
,但这也没有帮助。
最初我们使用的是 Liquibase 3.0.2。现在,由于 this Jira issue 我已经升级到 3.0.6,现在甚至升级到 3.4.1 - 仍然没有。
通过启用调试,我可以看到 LiquibaseProducer 已注册:
11:27:53,180 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [ResourceAccessor] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.create()]
11:27:53,180 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundRequestContext
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundSessionContext
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpServletRequest
11:27:53,181 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|ServletContext
11:27:53,182 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Managed Bean [class com.server.database.LiquibaseProducer] with qualifiers [@Any @Default]
11:27:53,182 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|BoundConversationContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpConversationContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpSessionContext
11:27:53,183 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|HttpSessionDestructionContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|RequestContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|ApplicationContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|SingletonContext
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [DataSource] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.createDataSource()]
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: WELD|AbstractSyntheticBean|com.server.deployment.ear.ear/com.server.database-1.19.0-SNAPSHOT.war/WEB-INF/classes|Conversation
11:27:53,184 DEBUG [org.jboss.weld.Bootstrap] (MSC service thread 1-7) WELD-000106: Bean: Producer Method [CDILiquibaseConfig] with qualifiers [@LiquibaseType @Any] declared as [[BackedAnnotatedMethod] @Produces @LiquibaseType public com.server.database.LiquibaseProducer.createConfig()]
所以我现在不知道为什么它不能与 Wildfly 一起工作。最后一个想法是,我的生产者从不同的 rt.jar 中生成了与 Liquibase 预期不同的数据源。虽然不确定它是否有意义。
如有任何帮助,我们将不胜感激。
您似乎部署了耳朵。确保 CDILiquibase 对您的生产商具有可见性。从日志来看,您的生产者似乎位于 war。如果 CDILiquibase 在不同的模块中,这可能是问题所在。