java - Deltaspike TransactionStrategy 替代方案 不明确的依赖关系

标签 java cdi deltaspike weld-se

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

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

最佳答案

我正在使用一种解决方法:从 beans 扫描中排除 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

关于java - Deltaspike TransactionStrategy 替代方案 不明确的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61427124/

相关文章:

java - 使用 jdbc 通过 PrepareStatement 为 DATETIME 字段插入 null

java - 如何使用 MyBatis 调用返回 BOOLEAN 的函数?

jakarta-ee - JAX-RS 2 过滤器有哪些范围?

java ee cdi : catch exception thrown by producer method

java - 来自自定义属性文件的 Deltaspike + Quartz + CronExpressions

java - Deltaspike 和@Stateless Bean

java - 带有 CDI 的 DeltaSpike 自定义 ConfigSource

java - jconn4.jar 的 Maven 存储库是什么?

java - 如何在 Spring 3 MVC 应用程序中对文件上传实现病毒扫描

cdi - Helidon MP/Microprofile 的启动/关闭 Hook ?