是否可以在 Quarkus 应用程序属性中部分覆盖 persistence.xml?

Is it possible to override persistence.xml partially in Quarkus application properties?

我正在将一个 JEE / JBOSS 项目迁移到 Quarkus。

在这个项目中,我有一个由许多 EJB(SOAP 服务、REST 服务)共享的 DAO。 DAO 还像这样定义实体和 persistence.xml:

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="broGmw">
        <jta-data-source>java:jboss/datasources/BroDS</jta-data-source>

        <class>x</class>
        <class>y</class>
        <!--> many more <-->

        <properties>
            <property name="hibernate.dialect" value="org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect" />
            <property name="hibernate.show_sql" value="false" />
        </properties>
    </persistence-unit>
</persistence>

现在,我知道 quarkus 还不支持 jta 数据源。

我不想在我的 JEE 项目的每个端点 EJB 中重新定义相同的 persistence.xml。此外,从 DAO 库中删除它感觉不合逻辑,因为 persistence.xml 在逻辑上属于 DAO。

但是,Quarkus 不允许使用 jta-data-source。所以我只想在应用程序属性中重新定义数据源,将 persistence.xml 留在 DAO(库)中。

quarkus.datasource.broDs.db-kind=other
quarkus.datasource.broDs.username=xxx
quarkus.datasource.broDs.password=yyy
quarkus.datasource.broDs.jdbc.url=myUrl
quarkus.datasource.broDs.jdbc.driver=${QUARKUS-BRO-DATASOURCE-DRIVER:oracle.jdbc.OracleDriver}

quarkus.hibernate-orm.broGmw.dialect=${QUARKUS-ORM-DIALECT:org.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect}
quarkus.hibernate-orm.broGmw.log.sql=${QUARKUS-ORM-LOG-SQL:false}
#quarkus.hibernate-orm.broGmw.packages=... (here's where I want the content of my persistence.xml read)
quarkus.hibernate-orm.broGmw.datasource=broDs

然而,当 Quarkus 发现 persistence.xml

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:00 min
[INFO] Finished at: 2021-01-14T22:28:38+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.10.5.Final:build (default) on project gmw_rest_dispatch: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]     [error]: Build step io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor#build threw an exception: java.lang.UnsupportedOperationException: Value found for #getJtaDataSource : not supported yet
[ERROR]     at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.verifyIgnoredFields(LightPersistenceXmlDescriptor.java:164)
[ERROR]     at io.quarkus.hibernate.orm.runtime.boot.LightPersistenceXmlDescriptor.validateAndReadFrom(LightPersistenceXmlDescriptor.java:55)
[ERROR]     at io.quarkus.hibernate.orm.runtime.boot.QuarkusPersistenceUnitDefinition.<init>(QuarkusPersistenceUnitDefinition.java:34)

我如何实现这一点?

从依赖项中过滤 persistence.xml 或许也是一种选择。我知道这在下一个版本的 Quarkus 中是可能的,但也许有一种通用机制可以从依赖项中过滤文件(类、xml)以使 Quarkus 忽略它们。

SKIP_PARSE_PERSISTENCE_XML 属性 必须在您 运行 Quarkus 应用程序时传递,而不是在构建它时传递。

将其传递给 quarkus-maven-plugin 无济于事。

它需要作为 -D 属性 添加到 Maven 构建中,在 IDE 中配置,并在 CI/CD.[=13= 中可能的构建脚本中配置]