【问题标题】:Deltaspike TransactionStrategy Alternative Ambiguous dependenciesDeltaspike TransactionStrategy Alternative 模糊依赖
【发布时间】:2020-08-09 03:12:20
【问题描述】:

我在 apache-deltaspike.properties 中定义 TransactionStrategy,使用 Global Alternatives 配置:

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

我的 beans.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.Final
  • deltaspike:1.9.3

关于如何绕过它的任何想法?我需要使用 ResourceLocalTransactionStrategy

【问题讨论】:

    标签: java cdi deltaspike weld-se


    【解决方案1】:

    我正在使用一种解决方法:从 bean 扫描中排除 BeanManagedUserTransactionStrategy

    我在 beans.xml 中使用 WELD 特定的 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

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 2012-04-28
      • 1970-01-01
      • 2021-09-08
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多