在WAS中得到OracleConnection
我們可以在WAS中設置JNDI,并在Spring中這樣配置:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName"><value>jdbc/testDB</value></property> </bean>這樣,如果在代碼中獲取ApplicationContext,得到的dataSource并不是org.springframework.jndi.JndiObjectFactoryBean,而是com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource。在它上面調用getConnection(),得到的是com.ibm.ws.rsadapter.jdbc.WSJdbcConnection。
有時候我們在Java代碼中需要構建Oracle特定的類型,比如ARRAY、ArrayDescriptor等。拿ArrayDescriptor為例,如果將前面的WSJdbcConnection傳入ArrayDescriptor.createDescriptor(arrayName, connection),將拋出異常:
com.ibm.ws.rsadapter.jdbc.WSJdbcConnection incompatible with oracle.jdbc.OracleConnection上面的鏈接中已經給出了幾種解決方法,我們這里使用WSCallHelper的getNativeConnection。但WSCallHelper位于哪個jar包中呢?
對剛才得到的dataSource調用如下的方法,得到WSJdbcDataSource所在的jar包:
dataSource.getClass().getProtectionDomain().getCodeSource().getLocation();顯示結果為
IBM\Websphere\AppServer\plugins\com.ibm.ws.runtime.jar在WAS中找到這個包,發現WSCallHelper也在里面。把這個包添加到項目的Build Path里,就可以得到OracleConnection了:
Connection connection = (OracleConnection) WSCallHelper.getNativeConnection((WSJdbcConnection)dataSource.getConnection());最后吐槽一下Oracle的JDBC API,它們都不是標準的API,需要各種適配。另外,對于ArrayDescriptor這種Oracle特定的類,使用OracleConnection無可厚非,但傳入參數的類型為java.sql.Connection,就有點蛋疼了……
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的在WAS中得到OracleConnection的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ”该证书已被签发机构吊销“错误解决方案
- 下一篇: juniper防火墙做ipsec ***