如何将 Oracle 驱动程序添加到 Arquillian 的托管 Wildfly?

How to add the Oracle driver to Arquillian's managed Wildfly?

我正在使用 Arquillian 来测试我的部分代码。为了 运行 使用物化视图的特定测试我不能依赖 H2,因此我必须将它更改为真正的 Oracle 数据库。

为此,我创建了一个小型 Docker 容器 运行ning Oracle 数据库 11g XE,添加了一个用户 "db"。然后我添加了一个 oracle-ds.xml ,我也将其添加到我的 Arquillian 部署中。但是它无法检测到 oracle 驱动程序:

Caused by: java.lang.Exception: { "WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.oracle"], "WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.data-source.\"jboss.naming.context.java.jboss.datasources.OracleTestDs\" is missing [jboss.jdbc-driver.oracle]"] }

在我的本地机器上,我手动添加了它,但它在 Arquillian 的托管 Wildfly 中不起作用——或者至少我不知道如何。

我试过直接添加,还是不行:

PomEquippedResolveStage pomFile = Maven.resolver().loadPomFromFile("pom.xml");

WebArchive archive = ShrinkWrap.create(WebArchive.class)
    .addAsLibraries(pomFile.resolve("org.assertj:assertj-core").withTransitivity().asFile())
    .addAsLibraries(pomFile.resolve("com.oracle:ojdbc6").withTransitivity().asFile())
    // add many classes....
    .addAsResource("test-persistence.xml", "META-INF/persistence.xml")
    .addAsResource("import.sql")
    .addAsResource("log4j2.xml")
    .addAsManifestResource("oracle-ds.xml")
    .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");

这只是将 oracle 驱动程序添加到 war 文件中,但我的代码依赖于 Wildfly 容器中的驱动程序。有没有办法将它部署到通过 Arquillian 提供的 Wildfly?

您可能想尝试更换

.addAsManifestResource("oracle-ds.xml").addAsWebInfResource("oracle-ds.xml", "oracle-ds.xml")

但这似乎并不能解决您的问题。

在我的一个 .pom 文件中,我有以下插件,它将 oracle 驱动程序复制到需要它的文件夹中(我相信 module.xmlojdbc6 都是必要的).或许你可以由此推断来解决你的问题。

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>${maven-antrun-plugin}</version>
        <executions>
          <execution>
            <phase>process-test-classes</phase>
            <configuration>
              <tasks>
                <echo message="copy file from ${basedir}/target/test-classes/${test.standalone.xml}" />
                <delete file="${basedir}/target/wildfly-${wildfly.version}/standalone/configuration/standalone.xml" />
                <copy file="${basedir}/target/test-classes/${test.standalone.xml}" toFile="${basedir}/target/wildfly-${wildfly.version}/standalone/configuration/standalone.xml" />
                <copy file="${basedir}/src/test/resources/module.xml" toFile="${basedir}/target/wildfly-${wildfly.version}/modules/system/layers/base/com/oracle/ojdbc6/main/module.xml" />
                <copy file="${basedir}/src/test/resources/ojdbc6.jar" toFile="${basedir}/target/wildfly-${wildfly.version}/modules/system/layers/base/com/oracle/ojdbc6/main/ojdbc6.jar" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>