Deltaspike TransactionStrategy替代方案 模糊的依赖性

问题描述 投票:0回答:1

我在定义 交易策略apache-deltaspike.properties使用全局备选方案配置。

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(管理用户交易策略)。.

依赖版本。

  • 焊接-se-shaded: 3.0.6.Final
  • deltaspike。1.9.3

有什么办法可以解决这个问题吗?我需要使用 资源本地交易策略.

java cdi deltaspike weld-se
1个回答
0
投票

我使用了一个变通的方法:排除掉了 BeanManagedUserTransactionStrategy(管理用户交易策略)。 从豆子的扫描。

我是在 beans.xml 使用 焊接 特定的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>

这样做,我就放弃了可移植性,这意味着它只能在以下情况下工作: 焊接.

© www.soinside.com 2019 - 2024. All rights reserved.