使用带有 vert.x jdbc 客户端的 quarkus 连接到 sybase 时出现问题
having problems connecting to sybase using quarkus with vert.x jdbc client
最后,我开始将一些单体代码迁移到 quarkus/vert.x 响应式服务。
我从连接到现有数据库的小型服务开始。我们的数据库目前是 sybase(asa 是一个关系型数据库,IQ 是一个基于列的数据库)。
我正在尝试使用 vert.x 反应式 jdbc 客户端,据我所知,它对所有 jdbc 支持的数据库都是通用的(因为内置反应式 jdbc 的 quarkus 不支持 sybase)。
直到现在才走运,我设法建立了连接,但是当对数据库执行查询时,只有 table 中有数据时,我才会收到以下错误:
java.lang.AbstractMethodError: Receiver class com.sybase.jdbc3.jdbc.SybResultSet does not define or inherit an implementation of the resolved method 'abstract java.lang.Object getObject(int, java.lang.Class)' of interface java.sql.ResultSet.
at com.mchange.v2.c3p0.impl.NewProxyResultSet.getObject(NewProxyResultSet.java:217)
at io.vertx.ext.jdbc.spi.impl.JDBCDecoderImpl.lambda$parse[=12=](JDBCDecoderImpl.java:60)
用谷歌搜索这个错误并没有多大帮助。
请注意,在我提到的任何堆栈中,我都不是专家。这几乎是我第一次尝试这类事情。
对于此事,我将不胜感激...
谢谢!
顺便说一句,我在 quarkus 项目中的相关 gradle 依赖项是:
implementation 'io.vertx:vertx-jdbc-client'
implementation 'io.agroal:agroal-pool:1.16'
implementation files('lib/jconn3.jar')
我在我的 quarkus 服务中注入 vert.x 并使用它来创建连接池。
此外,我尝试了 vert.x jdbc 客户端方法(sqlclient 和 jdbc 客户端),它们都以相同的异常结束
似乎从 jconn3 驱动程序升级到 jconn4 驱动程序并且仅使用 jdbc 客户端方法(现已弃用)对我有用...
谢谢
更新:有一个 jconn42.jar 驱动程序,它是 jdbc4.2 实现。
LogUtils class 内部调用了 jboss 日志系统不允许的方法,因此 quarkus/wildfly 使用这个较新的驱动程序将立即失败。
方法调用是 'logger.setParent(SybDriver.getLogger());',在 jboss 日志系统中它抛出一个安全异常...
在反编译并注释掉有问题的行后,驱动程序仍然可以工作,但仍然只能使用旧的 jdbc 客户端方法,而不是新的 sql 客户端方法...
希望这会帮助一些坚持使用 sybase 数据库的人...
最后,我开始将一些单体代码迁移到 quarkus/vert.x 响应式服务。
我从连接到现有数据库的小型服务开始。我们的数据库目前是 sybase(asa 是一个关系型数据库,IQ 是一个基于列的数据库)。
我正在尝试使用 vert.x 反应式 jdbc 客户端,据我所知,它对所有 jdbc 支持的数据库都是通用的(因为内置反应式 jdbc 的 quarkus 不支持 sybase)。 直到现在才走运,我设法建立了连接,但是当对数据库执行查询时,只有 table 中有数据时,我才会收到以下错误:
java.lang.AbstractMethodError: Receiver class com.sybase.jdbc3.jdbc.SybResultSet does not define or inherit an implementation of the resolved method 'abstract java.lang.Object getObject(int, java.lang.Class)' of interface java.sql.ResultSet.
at com.mchange.v2.c3p0.impl.NewProxyResultSet.getObject(NewProxyResultSet.java:217)
at io.vertx.ext.jdbc.spi.impl.JDBCDecoderImpl.lambda$parse[=12=](JDBCDecoderImpl.java:60)
用谷歌搜索这个错误并没有多大帮助。 请注意,在我提到的任何堆栈中,我都不是专家。这几乎是我第一次尝试这类事情。 对于此事,我将不胜感激... 谢谢!
顺便说一句,我在 quarkus 项目中的相关 gradle 依赖项是:
implementation 'io.vertx:vertx-jdbc-client'
implementation 'io.agroal:agroal-pool:1.16'
implementation files('lib/jconn3.jar')
我在我的 quarkus 服务中注入 vert.x 并使用它来创建连接池。 此外,我尝试了 vert.x jdbc 客户端方法(sqlclient 和 jdbc 客户端),它们都以相同的异常结束
似乎从 jconn3 驱动程序升级到 jconn4 驱动程序并且仅使用 jdbc 客户端方法(现已弃用)对我有用... 谢谢
更新:有一个 jconn42.jar 驱动程序,它是 jdbc4.2 实现。 LogUtils class 内部调用了 jboss 日志系统不允许的方法,因此 quarkus/wildfly 使用这个较新的驱动程序将立即失败。
方法调用是 'logger.setParent(SybDriver.getLogger());',在 jboss 日志系统中它抛出一个安全异常...
在反编译并注释掉有问题的行后,驱动程序仍然可以工作,但仍然只能使用旧的 jdbc 客户端方法,而不是新的 sql 客户端方法... 希望这会帮助一些坚持使用 sybase 数据库的人...