【问题标题】:Problem with Quarkus Dependency Injection to JPA Entity ManagerQuarkus 依赖注入到 JPA 实体管理器的问题
【发布时间】:2020-04-22 00:03:04
【问题描述】:

构建问题

Caused by: io.quarkus.builder.BuildException: 
Build failure: Build failed due to errors
    [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: Found 2 deployment problems: 
[1] Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@DataSource(value = "ergoint")]
    - java member: com.int.dao.EPersistence#entityManagerE
    - declared on CLASS bean [types=[java.lang.Object, com.int.dao.EPersistence], qualifiers=[@Default, @Any], target=com.int.dao.EPersistence]
[2] Unsatisfied dependency for type javax.persistence.EntityManager and qualifiers [@DataSource(value = "madata")]
    - java member: com.int.dao.MPersistence#entityManagerM
    - declared on CLASS bean [types=[com.int.dao.MasterDataPersistence, java.lang.Object], qualifiers=[@Default, @Any], target=com.int.dao.MPersistence]
    at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:873)

代码:

@ApplicationScoped
public class MPersistence {

    @Inject
    @DataSource("madata")
    private EntityManager entityManagerMaster;

属性文件:

quarkus.datasource.driver=oracle.jdbc.driver.OracleDriver
quarkus.hibernate-orm.dialect=oracle.jdbc.driver.OracleDriver

quarkus.datasource.madata.url=jdbc:oracle:thin:@myhost:1521:orcl
quarkus.datasource.madata.driver=oracle.jdbc.driver.OracleDriver
quarkus.datasource.madata.username=quarkus_test
quarkus.datasource.madata.password=quarkus_test

只需从 eclipse ide 运行“maven clean install”,在运行测试用例时就会遇到这个问题。

(之前我认为这两个类可以通过 EJB 中的 @Stateless 读取,但是当我将 quarkus 更新到 1.1.0 final 时,它删除了所有 EJB 依赖项。所以我将应用程序范围设置为)

【问题讨论】:

  • 那么如果你使用eclipselink而不是hibernate它可以工作吗? (entitymanager 接口是 JPA,不是 Hibernate)
  • quarkus.hibernate-orm.dialect=oracle.jdbc.driver.OracleDriver 错误,这一定是 quarkus.hibernate-orm.dialect=org.hibernate.dialect.Oracle12cDialect 但如果这是我的问题不知道
  • 我不是 quarkus 用户,但由于错误中描述的 [types=[com.int.dao.MasterDataPersistence, java.lang.Object] 方式,看起来有多个 bean 可用于注入。 Weld 会明确说明,也许 Quarkus 不会。可能是一个用于生产,一个用于测试。

标签: jpa cdi quarkus


【解决方案1】:

更新:自 Quarkus 1.8 起,我们支持直接在 application.properties 中设置多个持久性单元。请参阅https://quarkus.io/guides/hibernate-orm#multiple-persistence-units 了解更多信息。

我们还不支持在application.properties 中配置的多个持久性单元。 因此,您尝试注入的 EntityManagers 不是由 Quarkus 创建的。

您可以跟踪此问题https://github.com/quarkusio/quarkus/issues/2835 以了解我们在该主题上的进展。

【讨论】:

  • 还不支持吗?
  • 从 Quarkus 1.8 开始支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多