Deltaspike TransactionStrategy Альтернативные Неоднозначные зависимости - PullRequest
0 голосов
/ 25 апреля 2020

Я определяю TransactionStrategy в apache -deltaspike.properties , используя конфигурацию глобальных альтернатив:

globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy

My bean. xml имеет модуль deltaspike-data Только для перехватчика:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.1" bean-discovery-mode="all">
    <interceptors>
        <class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class>
    </interceptors>
</beans>

Но меня поражает исключение, описанное ниже, которое не имеет для меня никакого смысла :

WELD-001409: Ambiguous dependencies for type TransactionStrategy with qualifiers @Default
  at injection point [UnbackedAnnotatedField] @Inject private org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor.transactionStrategy
  at org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor.transactionStrategy(TransactionalInterceptor.java:0)
  Possible dependencies: 
  - Managed Bean [class org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy] with qualifiers [@Any @Default],
  - Managed Bean [class org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy] with qualifiers [@Any @Default]

Очевидно, альтернатива BeanManagedUserTransactionStrategy активируется по умолчанию. При удалении определения глобальной альтернативы я вижу, что модуль deltaspike-data использует BeanManagedUserTransactionStrategy .

Версии зависимостей:

  • сварной шов: 3.0.6. Финал
  • deltaspike: 1.9.3

Любые идеи о том, как обойти это? Мне нужно использовать ResourceLocalTransactionStrategy .

1 Ответ

0 голосов
/ 26 апреля 2020

Я использую обходной путь: исключая BeanManagedUserTransactionStrategy из проверки бинов.

Я делаю это в бобах. xml, используя WELD конкретная c XML схема:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans">
    <weld:scan>
        <weld:exclude name="org.apache.deltaspike.jpa.impl.transaction.BeanManagedUserTransactionStrategy"/>
    </weld:scan>
    <interceptors>
        <class>org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor</class>
    </interceptors>
</beans>

Делая это, я отказываюсь от переносимости, то есть это будет работать только с WELD .

...