部署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
相关产品推荐
相关产品推荐

