【发布时间】:2021-01-19 03:43:06
【问题描述】:
我正在将 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 忽略它们。
【问题讨论】:
-
使用插件 io.quarkus:quarkus-maven-plugin:1.11.0.CR1 我添加了:
那行不通.. 仍在寻找如何做到这一点.. ?-DSKIP_PARSE_PERSISTENCE_XML=true -
嗯。我看了一下github.com/quarkusio/quarkus/pull/10107,似乎你真的必须使用 -D 选项运行 maven。如果你能以某种方式在插件中指定它会很好