Я использую сервер Websphere Liberty для запуска своего приложения, и мне нужно использовать ArrayDescriptor
для передачи массивов в хранимую процедуру оракула. Я получаю исключение при развертывании соединения. Я также проверил информацию о драйвере метаданных соединения, и он показывает мне драйвер oracle.jdbc. Код не работает в строке развертывания соединения.
Connection conn = this.getDataSource().getConnection();
OracleConnection oracleConn = conn.unwrap(oracle.jdbc.OracleConnection.class);
Сообщение об исключении: java.sql.SQLException: DSRA9122E: com.ibm.ws.rsadapter.jdbc.v41.WSJdbc41Connection@120edaf не содержит объектов типа oracle.jdbc.OracleConnection.
Я также добавил ссылку на загрузчик классов для своего приложения в server.xml, но это не помогло.
Мой server.xml выглядит так:
<dataSource id="datasource" jndiName="jdbc/XXXXXX"
type="javax.sql.XADataSource">
<jdbcDriver libraryRef="ordLib"/>
<properties.oracle databaseName="XXXX" driverType="thin" password="XXXXXX"
portNumber="XXXXXX" serverName="XXXXXX" serviceName="XXXXXX" url="XXXXXX"
user="XXXXXX"/>
</dataSource>
<webApplication id="NAExtractWeb" location="NAExtractWeb.war"
name="NAExtractWeb">
<classloader commonLibraryRef="ordLib"></classloader>
</webApplication>
<library id="ordLib">
<fileset dir="C:\lib" id="fileset" includes="ojdbc6-11.2.0.4.jar"/>
</library>
Также я использую эту функцию развертывания в одном из моих зависимых файлов jar проекта, и у меня есть зависимость ojdbc (maven), добавленная в мой зависимый проект. Повлияет ли это на этап распаковки?
Вот метод, который получит источник данных:
public DataSource getDataSource(String dsName) throws BatchException {
try {
return (DataSource) new InitialContext().lookup(dsName);
} catch (Exception e) {
//Code to handle
}
}
Вот полная трассировка стека:
Я только что проверил это на WebSphere Liberty, и у меня сработал следующий код: