Тайм-аут операции при вызове драйвера JDBC из хранимой процедуры Oracle JavaJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Тайм-аут операции при вызове драйвера JDBC из хранимой процедуры Oracle Java

Сообщение Anonymous »

Я использую хранимую процедуру Oracle Java для чтения данных с MS SQL Server и Advantage Database Server
через драйвер JDBC.
Существует net.sourceforge.jtds.jdbc.Driver для MS SQL и com.extendedsystems .jdbc.advantage.ADSDriver для ADS.
Код Java для создания соединения

Код: Выделить всё

public static Connection getConnection(String JDBC_Driver, String JDBC_URL,
String userName, String password, Connection pompa) throws ClassNotFoundException, SQLException, java.util.ServiceConfigurationError, UnsupportedEncodingException {
Class.forName(JDBC_Driver);
try {
String connectionURL = JDBC_URL;
Connection conn = DriverManager.getConnection(connectionURL, userName,
return conn;
}
catch (Exception e) {
return null;
}
}
Он отлично работал с базой данных Oracle 12 и 19. Я создал соединение, получил набор результатов из базы данных и вернул его в формате json в базу данных Oracle.
Но в базе данных Oracle 21 это работает нестабильно, когда я подключаюсь к той же базе данных MSSQL или ADS по одному и тому же IP-адресу, в 50-60% подключений получаю ошибку.
Для MS SQL:

Код: Выделить всё

java.sql.SQLException: Operation timed out
at net.sourceforge.jtds.jdbc.TdsUtil.getSQLException(TdsUtil.java:181)
at net.sourceforge.jtds.jdbc.TdsUtil.getSQLException(TdsUtil.java:160)
at net.sourceforge.jtds.jdbc.TdsConnection.(TdsConnection.java:182)
at net.sourceforge.jtds.jdbc.TdsConnectionJDBC3.(TdsConnectionJDBC3.java:53)
at net.sourceforge.jtds.jdbc.Driver.getConnection(Driver.java:102)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:85)
at java.sql.DriverManager.getConnection(DriverManager.java:721)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.wgsoftpro.ads.ADSConnect.getConnection(ADSConnect.java:264)
at org.wgsoftpro.ads.ADSConnect.getConnection2Source(ADSConnect.java:398)
at org.wgsoftpro.ads.ADSConnect.getConnection2Source(ADSConnect.java:334)
at org.wgsoftpro.ads.ADSConnect.readResultSet(ADSConnect.java:172)
at org.wgsoftpro.ads.ADSConnect.readResultSet(ADSConnect.java:252)
at org.wgsoftpro.ads.ADSConnect.getResultSet(ADSConnect.java:91)
at org.wgsoftpro.ads.ADSConnect.getResultSetbyStringID(ADSConnect.java:76)
Caused by: java.net.SocketTimeoutException: Operation timed out
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:91)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:360)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:216)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:198)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:255)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:405)
at java.net.Socket.connect(Socket.java:617)
at java.net.Socket.connect(Socket.java:566)
at java.net.Socket.(Socket.java:462)
at java.net.Socket.(Socket.java:239)
at net.sourceforge.jtds.jdbc.TdsSocket.(TdsSocket.java:182)
at net.sourceforge.jtds.jdbc.TdsConnection.(TdsConnection.java:178)
Для рекламы:

Код: Выделить всё

com.extendedsystems.jdbc.advantage.ADSException: [iAnywhere Solutions][Advantage JDBC]Operation timed out
at com.extendedsystems.jdbc.advantage.n.(Unknown Source)
at com.extendedsystems.jdbc.advantage.ADSConnection.(Unknown Source)
at com.extendedsystems.jdbc.advantage.ADSDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:721)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.wgsoftpro.ads.ADSConnect.getConnection(ADSConnect.java:264)
at org.wgsoftpro.ads.ADSConnect.getConnection2Source(ADSConnect.java:398)
at org.wgsoftpro.ads.ADSConnect.getConnection2Source(ADSConnect.java:334)
at org.wgsoftpro.ads.ADSConnect.readResultSet(ADSConnect.java:172)
at org.wgsoftpro.ads.ADSConnect.readResultSet(ADSConnect.java:252)
at org.wgsoftpro.ads.ADSConnect.getResultSet(ADSConnect.java:91)
at org.wgsoftpro.ads.ADSConnect.getResultSetbyStringID(ADSConnect.java:76)
Таким образом, причина та же: «Тайм-аут операции истек», и время от времени она работает.
Когда я пытаюсь сделать то же самое с помощью простого Java-приложения с сервера Oracle , работает без проблем. Пытался изменить версию Java в базе данных Oracle, но это не помогло
На данный момент я "решил" проблему с вызовом DriverManager.getConnection 10 раз, пока он устанавливает соединение. Но я не думаю, что это хорошее решение

Подробнее здесь: https://stackoverflow.com/questions/788 ... -procedure
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»