Deltaspike TransactionStrategy备选不明确的依赖关系



我正在apache deltaspe.properties中定义TransactionStrategy,使用全局替代配置:

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

我的beans.xml只有deltaspeak数据模块Interceptor:

<?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数据模块使用BeanManagedUserTransactionStrategy

依赖项版本:

  • 焊缝着色:3.0.6.最终
  • deltaspeak: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

最新更新