Я переходящие с JBoss 7.1 до Wildfly 8. При попытке развернуть модуль, который содержит сценарии LiquiBase для БД я получаю следующее сообщение об ошибке:LiquiBase CDI неудовлетворенные зависимости для типа DataSource
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());
}
}
Я пытался добавить @Dependent
аннотацию, как описано в this answer, но не повезло. Кроме того, пытался использовать @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. Последняя идея заключается в том, что мой продюсер выпускает разные DataSource, чем Liquibase ожидает от разных rt.jar. Не уверен, что это имеет какой-то смысл.
Любая помощь была бы принята с благодарностью.
Вы правы. Структура развертывания - .ear, содержащая файл .war с LiquibaseProducer.java и Liquibase-cdi, находится в папке .ear/lib. Это отлично работает в JBoss 7.1 и Liquibase 3.0.2. Как обеспечить, чтобы мой продюсер был виден вне мира .war? –
Ваши зависимости, кажется, перевернуты. ухо/либ не может ничего увидеть в вашей войне. Он работает наоборот. Ref doc: https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly – Franck
Вы считаете, что это действительно так. Я попытался упаковать банки libibase в папку lib в базе данных.war, вместо родительского .ear и, похоже, был wok (хотя произошли и некоторые другие исключения). Кроме того, это указано в документации, которую вы предоставили. Мне интересно, почему, почему решение, когда банки Liquibase расположены в .ear/lib работает с Jboss 7.1 Есть ли большая разница в загрузке классов, по сравнению с Wildfly? –