是否可以使用UCP创建OracleConnection以使用入队方法?
现在,使用连接池将消息从java客户端排入OracleAQ队列的最佳方式是什么?
OracleDatasource中的Javadoc建议缓存弃用,并建议使用UCP。但我尝试用它实例化一个连接,但不可能将它强制转换为OracleConnection,我得到了一个代理异常。
很明显,UCP被设计为从sql包返回常见的java接口,如Connection,并且不熟悉Oracle特定的用例?
有人可以帮助我了解如何通过连接池使用Oracle AQ?
谢谢。
Java依赖项:
- 弹簧套:2.4.13
- com.oracle.database.jdbc:ojdbc8:21.5.0.0
- com.oracle.database.jdbc:ucp:21.5.0.0
Spring ucp属性:
spring.datasource.type=oracle.ucp.jdbc.PoolDataSource
spring.datasource.oracleucp.connection-factory-class-name=oracle.jdbc.pool.OracleDataSource
异常消息:
java.lang.ClassCastException: oracle.ucp.jdbc.proxy.oracle$1ucp$1jdbc$1proxy$1oracle$1ConnectionProxy$2oracle$1jdbc$1internal$1OracleConnection$$$Proxy cannot be cast to oracle.jdbc.driver.OracleConnection
源代码:
@Autowired
public InsertController(DataSource ds) {
this.ds = ds;
}
private OracleConnection getConnection() throws Exception {
Connection con = this.ds.getConnection();
return (OracleConnection) con; //Proxy error propagation
}
您可以将UCP连接强制转换为oracle.jdbc.OrcleConnection,然后调用下面的API将消息排入队列
公共无效队列(字符串queueName,oracle.jdbc.aq.AQEnqueueOptions opt,oracle.jdbc.aq.AQMessage mesg(抛出SQLException;