如何将 NewProxyConnection 类型转换为 AS400JDBCConnection
Posted
技术标签:
【中文标题】如何将 NewProxyConnection 类型转换为 AS400JDBCConnection【英文标题】:how can I typecast NewProxyConnection into AS400JDBCConnection 【发布时间】:2011-09-05 08:00:45 【问题描述】:我是 Spring 新手。我在 Spring 中使用 ComboPooledDataSource 进行连接池。 我正在使用 AS400 进行连接。 我的问题是,当我使用此连接并尝试对此进行类型转换时 AS400JDBCConnection as400Conn = (AS400JDBCConnection)conn; 它给出了 ClassCastCastException,因为 ComboPooledDataSource 返回的连接对象是 NewProxyConnection 类型的,我该如何将它类型转换为 AS400JDBCConnection。
【问题讨论】:
【参考方案1】:您不应该投射到AS400JDBCConnection
。所有相关方法都应该通过Connection
接口提供。
您要处理的不是实际的连接对象(AS400JDBCConnection),而是一个包裹在它周围并管理对原始连接对象的访问的代理对象。 Understanding AOP Proxies
中解释了不同的代理机制更新响应 cmets:需要访问方法 AS400JDBCConnection.getServerJobIdentifier()
。然后你将不得不切换到 CGLib 代理(解释为here)。
【讨论】:
亲爱的肖恩其实我想做这个 AS400JDBCConnection as400Conn = (AS400JDBCConnection)conn;字符串 serverJobIdentifier = as400Conn.getServerJobIdentifier();我必须将其类型转换为 AS400JDBCConnection 的主要原因【参考方案2】:Spring 确实支持解开代理的 ComboPooledDataSource 对象。如果您使用的是 JdbcTemplate,则可以将 nativeJdbcExtractor 属性设置为适当的对象。因此,您可以检索本机 Connection 甚至任何派生对象(如 ResultSet)的任何地方都将是本机的。
NativeJdbcExtractor 接口的 JavaDoc 以获取支持的类列表。这可以帮助您决定哪种实现适合您的应用程序。
【讨论】:
以上是关于如何将 NewProxyConnection 类型转换为 AS400JDBCConnection的主要内容,如果未能解决你的问题,请参考以下文章