2015-08-06 3 views
0

Я переходящие с 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. Не уверен, что это имеет какой-то смысл.

Любая помощь была бы принята с благодарностью.

ответ

0

Похоже, что у вас развернуто ухо. Убедитесь, что у вашего производителя есть видимость от CDILiquibase. Из журнала ваш продюсер, похоже, находится в войне. Если CDILiquibase находится внутри другого модуля, это может быть проблемой.

+0

Вы правы. Структура развертывания - .ear, содержащая файл .war с LiquibaseProducer.java и Liquibase-cdi, находится в папке .ear/lib. Это отлично работает в JBoss 7.1 и Liquibase 3.0.2. Как обеспечить, чтобы мой продюсер был виден вне мира .war? –

+0

Ваши зависимости, кажется, перевернуты. ухо/либ не может ничего увидеть в вашей войне. Он работает наоборот. Ref doc: https://docs.jboss.org/author/display/WFLY8/Class+Loading+in+WildFly – Franck

+0

Вы считаете, что это действительно так. Я попытался упаковать банки libibase в папку lib в базе данных.war, вместо родительского .ear и, похоже, был wok (хотя произошли и некоторые другие исключения). Кроме того, это указано в документации, которую вы предоставили. Мне интересно, почему, почему решение, когда банки Liquibase расположены в .ear/lib работает с Jboss 7.1 Есть ли большая разница в загрузке классов, по сравнению с Wildfly? –

Смежные вопросы