You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署JEE8 Soteria安全应用至Wildfly10时HSQLDB模块及数据源配置失败

解决Wildfly10中HSQLDB模块缺失导致数据源配置失败的问题

我来帮你搞定这个问题,结合你用Cargo Maven插件部署JavaEE8安全应用的场景,给你几个针对性的解决方案:

方案1:利用Wildfly10自带的HSQLDB模块

其实Wildfly10默认就在modules/system/layers/base/org/hsqldb/main目录下自带了HSQLDB模块,你只需要在Cargo的数据源配置里正确引用它就行,不用额外安装。

具体配置步骤:

在你的pom.xml的Cargo插件配置段中,添加正确的数据源配置:

<configuration>
  <container>
    <containerId>wildfly10x</containerId>
    <home>${wildfly.home}</home> <!-- 确保这个变量指向你的Wildfly10安装目录 -->
  </container>
  <configuration>
    <datasources>
      <datasource>
        <id>java:jboss/datasources/JavaEESoteriaDS</id> <!-- 要和你应用中使用的JNDI名称一致 -->
        <driverClass>org.hsqldb.jdbcDriver</driverClass>
        <url>jdbc:hsqldb:mem:javaee-soteria;DB_CLOSE_DELAY=-1</url> <!-- 内存模式数据库,适合测试 -->
        <username>sa</username>
        <password></password>
        <properties>
          <property>
            <name>module</name>
            <value>org.hsqldb</value> <!-- 关联Wildfly自带的HSQL模块 -->
          </property>
        </properties>
      </datasource>
    </datasources>
  </configuration>
</configuration>

配置完成后,重新执行cargo:run,Cargo会自动关联Wildfly自带的HSQL模块,数据源就能正常初始化了。

方案2:通过Cargo插件自动安装HSQLDB模块

如果你用的是精简版Wildfly10,确实没有自带HSQL模块,那可以让Cargo插件帮你自动安装模块到Wildfly中:

步骤1:添加HSQLDB依赖到pom.xml

确保你的依赖段里有HSQLDB的依赖,并且设置为provided(因为要部署到服务器模块,不用打包到WAR):

<dependencies>
  <!-- 其他原有依赖... -->
  <dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.7.1</version> <!-- 选一个兼容Wildfly10的版本 -->
    <scope>provided</scope>
  </dependency>
</dependencies>

步骤2:在Cargo配置中添加模块安装逻辑

在Cargo的配置段里加入modules配置,让插件自动安装HSQL模块:

<configuration>
  <container>
    <containerId>wildfly10x</containerId>
    <home>${wildfly.home}</home>
  </container>
  <configuration>
    <!-- 数据源配置同方案1 -->
    <modules>
      <module>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>2.7.1</version>
        <moduleName>org.hsqldb</moduleName>
        <resources>
          <resource>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
          </resource>
        </resources>
        <dependencies>
          <dependency>javax.api</dependency>
          <dependency>javax.transaction.api</dependency>
        </dependencies>
      </module>
    </modules>
  </configuration>
</configuration>

执行cargo:run时,Cargo会自动把HSQLDB模块安装到Wildfly的模块目录,同时关联你的数据源。

方案3:将HSQLDB打包到WAR中(快速测试用)

如果只是临时测试,不想折腾服务器模块配置,可以直接把HSQLDB的jar包打包到WAR里:

修改HSQLDB依赖的scope为compile:

<dependencies>
  <!-- 其他原有依赖... -->
  <dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.7.1</version>
    <scope>compile</scope>
  </dependency>
</dependencies>

然后修改数据源配置,去掉module属性:

<datasource>
  <id>java:jboss/datasources/JavaEESoteriaDS</id>
  <driverClass>org.hsqldb.jdbcDriver</driverClass>
  <url>jdbc:hsqldb:mem:javaee-soteria;DB_CLOSE_DELAY=-1</url>
  <username>sa</username>
  <password></password>
</datasource>

⚠️ 注意:这种方式只适合测试环境,生产环境不推荐,会导致类加载冲突和重复依赖的问题。

最后再检查几个关键点:

  • 确认Cargo的containerId是wildfly10x,别写错成其他版本的ID
  • 数据源的JNDI名称要和你应用代码中引用的完全一致
  • 如果用内存数据库,重启Wildfly后数据会丢失,要是需要持久化,可以把URL改成文件模式,比如jdbc:hsqldb:file:./data/javaee-soteria

内容的提问来源于stack exchange,提问作者robyp7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:15:23