如何将NewProxyConnection强制转换为AS400JDBCConnection

时间:2011-09-05 08:00:45

标签: java spring jdbc ibm-midrange spring-aop

我是Spring的新手。我在Spring中使用ComboPooledDataSource进行连接池。 我正在使用AS400进行连接。 我的问题是,当我使用此连接并尝试对此进行类型转换时 AS400JDBCConnection as400Conn =(AS400JDBCConnection)conn; 它给出了ClassCastCastException,因为ComboPooledDataSource返回的连接对象的类型为NewProxyConnection,我如何将其类型转换为AS400JDBCConnection。

2 个答案:

答案 0 :(得分:2)

你不应该转向AS400JDBCConnection。所有相关方法都应通过Connection界面提供。

您正在处理的不是实际的Connection对象(AS400JDBCConnection),而是一个包围它的代理对象,并管理对原始Connection对象的访问。 Understanding AOP Proxies

中解释了不同的代理机制

更新回复评论:需要访问方法AS400JDBCConnection.getServerJobIdentifier()。然后你将不得不切换到CGLib代理(解释here)。

答案 1 :(得分:0)

Spring确实支持解包代理的ComboPooledDataSource对象。如果您使用的是JdbcTemplate,则可以将nativeJdbcExtractor属性设置为适当的对象。因此,您可以检索本机连接甚至任何派生对象(如ResultSet)的任何位置都是本机的。

NativeJdbcExtractor接口的JavaDoc,用于支持的类列表。这可以帮助您确定哪种实现适用于您的应用程序。