我正在尝试在 wildfly-11 中安装 jedis 模块,以便我可以创建数据源。我正在使用
jedis-5.1.0.jar
来达到此目的。
我在
org/redis/jdbc/main
中创建了目录$JBOSS_HOME/modules/system/layers/base
并将我的jedis jar复制到其中。
我还在该目录中创建了一个 module.xml,其中包含以下内容。
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.5" name="org.redis.jdbc">
<resources>
<resource-root path="jedis-5.1.0.jar"/>
</resources>
<dependencies>
<module name="org.apache.commons.pool2"/>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
对于连接池,我正在使用
commons-pool2-2.12.0.jar
。和之前一样,我创建了 org/apache/commons/pool2/main
并在 module.xml
中添加了以下内容
<module xmlns="urn:jboss:module:1.5" name="org.apache.commons.pool2">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<resource-root path="commons-pool2-2.12.0.jar"/>
</resources>
<dependencies>
</dependencies>
</module>
当我使用
jboss-cli.sh
运行 --command="/core-service=module-loading:list-resource-loader-paths(module=org.redis.jdbc)
时,我可以看到模块已正确加载。
现在来到
standalone-ha.xml
中的数据源。我已经做了以下事情
<datasource jta="true" jndi-name="java:jboss/datasources/REDISDS" pool-name="redisds" enabled="true" use-java-context="true">
<connection-url>jdbc:redis://REDIS_IP:6379</connection-url>
<driver>redis</driver>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>SAME_AS_PASSWORD</user-name>
<password>PASSWORD</password>
</security>
<validation>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
<validate-on-match>true</validate-on-match>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>
</datasource>
我还定义了
driver
<driver name="redis" module="org.redis.jdbc">
<!-- <driver-class>redis.clients.jedis.JedisConnectionFactory</driver-class> -->
<!-- <xa-datasource-class>redis.clients.jedis.RedisDataSource</xa-datasource-class> -->
</driver>
jedis-5.1.0.jar
中不存在任何驱动程序类,因此我已对其进行了评论。
现在,当我启动
wildfly
服务器时,出现以下错误
09:24:18,575 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("data-source" => "redisds")
]) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => ["jboss.jdbc-driver.redis"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => [
"org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]",
"jboss.driver-demander.java:jboss/datasources/REDISDS is missing [jboss.jdbc-driver.redis]"
]
}
09:24:18,577 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([
("subsystem" => "datasources"),
("data-source" => "redisds")
]) - failure description: {
"WFLYCTL0412: Required services that are not installed:" => [
"jboss.jdbc-driver.redis",
"jboss.jdbc-driver.redis"
],
"WFLYCTL0180: Services with missing/unavailable dependencies" => [
"org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]",
"jboss.driver-demander.java:jboss/datasources/REDISDS is missing [jboss.jdbc-driver.redis]",
"org.wildfly.data-source.redisds is missing [jboss.jdbc-driver.redis]"
]
}
我怀疑我没有使用兼容的redis jdbc驱动程序。搜索互联网并没有提供太多帮助。有人可以指出错误吗?
谢谢你。
编辑按照this链接,我已设法使用 cdata jdbc 驱动程序创建数据源,但这需要许可。我越来越怀疑我使用的 jedis jar 不兼容 jdbc。
好吧,我已经弄清楚了。我的怀疑是正确的。 Jedis 不兼容 JDBC。我找到了这个 github 存储库。我克隆了它并运行命令
mvn package
。它生成了两个罐子redis-jdbc-driver-0.0.2.jar
和redis-jdbc-driver-core-0.0.2.jar
。然后我将罐子添加为我的 Wildfly 中的模块,如下所示
1. module add --name=org.jdbc.jedis.core --resources=redis-jdbc-driver-core-0.0.2.jar
2. module add --name=org.jdbc.jedis.all --resources=redis-jdbc-driver-0.0.2-all.jar --dependencies=org.jdbc.jedis.core
现在可以按如下方式测试连接
./jboss-cli.sh --connect --controller=JBOSS_IP:9990 --command="/subsystem=datasources/data-source=XXX:test-connection-in-pool"
这里
XXX
是您的数据源 pool-name
。现在给出输出
{
"outcome" => "success",
"result" => [true]
}