Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / проблемы с коннектом WebSphere после перезапуска БД / 7 сообщений из 7, страница 1 из 1
08.10.2007, 11:33
    #34853420
Tyo
Tyo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
Помогите плз рабозраться.
Приложение на ВебСфере коннектится с Оракловой БД. Если БД перезапустить, то при первом коннекте к БД выдает ошибку (см. ниже), при последующих -- всё нормально.
Если же после перезапуска БД сразу перезапустить и сервер приложений, ошибок нет.
Вопрос: можно ли как-то обойтись без ошибок и без перезагрузки сервера приложений?
Заранее спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[ 08 . 10 . 07   10 : 58 : 15 : 366  MSD]  00000061  ConnectionEve A   J2CA0056I: The Connection Manager 
received a fatal connection error from the Resource Adaptor for resource jdbc/Legal.  
The exception which was received is com.ibm.websphere.ce.cm.StaleConnectionException: 
Исключение ввода/вывода: Connection reset by peer: socket write error
[ 08 . 10 . 07   10 : 58 : 15 : 366  MSD]  00000061  SystemOut     O [LibSend.getMaxDateSend] DSRA9110E: 
Connection is closed.

[ 08 . 10 . 07   10 : 58 : 15 : 740  MSD]  00000061  WSRdbManagedC W   DSRA0180W: Exception detected during 
ManagedConnection.destroy().  The exception is:  com.ibm.ws.exception.WsException: DSRA0080E: An 
exception was received by the Data Store Adapter. See original exception message: Закрытое 
соединение. with SQL State : null SQL Code :  17008 
	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java: 112 )
...
Рейтинг: 0 / 0
08.10.2007, 14:14
    #34854053
d----
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
Попробуйте перехватить исключение com.ibm.ejs.cm.pool.ConnectionWaitTimeoutException и повторить операцию с БД.
Например, так, как это показано в IBM Redbook'e "WebSphere Application Server Network Deployment V6: High Availability Solutions" (режим AutoCommit включен):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
public void myConnPool() throws java.rmi.RemoteException {
// retry indicates whether to retry or not
// numOfRetries states how many retries have been attempted
boolean retry = false;
int numOfRetries =  0 ;
java.sql.Connection conn = null;
java.sql.Statement stmt = null;
do {
    try {
       //Assumes that a datasource has already been obtained from JNDI
       conn = ds.getConnection();
       stmt = conn.createStatement();
       stmt.execute(
                     "INSERT INTO ORG VALUES (10, 'Pacific', '270', 'Western', 
                    'Seattle')");
        retry = false;
    } catch (com.ibm.websphere.ce.cm.StaleConnectionException sce) {
      //if a StaleConnectionException is caught rollback and retry the action
         if (numOfRetries <  2 ) {
            retry = true;
            numOfRetries++;
            // add an optional pause
           Thread.sleep( 10000 );
        } else {
           retry = false;
        }
    } catch (java.sql.SQLException sqle) {
        //deal with other database exception
    } finally {
       //always cleanup JDBC resources
       try {
          if (stmt != null)
             stmt.close();
       } catch (java.sql.SQLException sqle) {
          //usually can ignore
       }
      try {
           if (conn != null)
              conn.close();
      } catch (java.sql.SQLException sqle) {
          //usually can ignore
      }
    }
  } while (retry);
}
...
Рейтинг: 0 / 0
08.10.2007, 15:14
    #34854307
chro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
не знаю, что такое StaleConnectionException
а суть проблемы такова : после перезапуска Oracle (вроде проблема специфична для Oracle) некоторые открытые соединения в пуле оказываются закрытыми и при попытке обращения так и говорят -закрытое соединение. Я думаю, проблема решится при использовании методов connection.isClosed() и connection.close() в нужных местах.
...
Рейтинг: 0 / 0
08.10.2007, 16:07
    #34854509
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
не помню как в вебсфере, но в веблоджике можно установить параметры Connection tests (interval, frequency etc), которые будут поддерживать (а в случае разрыва соединения - восстанавливать) соединения.
...
Рейтинг: 0 / 0
08.10.2007, 16:21
    #34854560
d----
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
Немного процитирую (из того же Redbook'а):

From an application code perspective stale connections are connections which
are no longer usable, for example, if the database server is shut down or the
network is experiencing problems
. When a StaleConnectionException is
detected in the application server runtime, the connection pool is flushed and
repopulated. Explicitly catching a StaleConnectionException is not required,
because applications already catch java.sql.SQLException and
StaleConnectionException extends SQLException. Specifically coding to catch a
StaleConnectionException can trigger an application to perform additional
(custom) recovery steps.
...
Рейтинг: 0 / 0
08.10.2007, 16:52
    #34854680
d----
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
rimanне помню как в вебсфере, но в веблоджике можно установить параметры Connection tests (interval, frequency etc), которые будут поддерживать (а в случае разрыва соединения - восстанавливать) соединения.
Это можно реализовать на WebSphere, по крайней мере - для WAS на iSeries, установкой некоторых custom properties.

Если у автора свойство пула соединений Purge policy установлено в "EntirePool", можно надеяться, что перехват исключения StaleConnectionException и реконнект к базе ему поможет:


Purge Policy
Specifies how to purge connections when a stale connection or fatal connection error is detected.

Data type String

Default EntirePool

Range EntirePool

All connections in the pool are marked stale. Any connection not in use is immediately closed. A connection in use is closed and issues a stale connection Exception during the next operation on that connection . Subsequent getConnection() requests from the application result in new connections to the database opening. When using this purge policy, there is a slight possibility that some connections in the pool are closed unnecessarily when they are not stale. However, this is a rare occurrence. In most cases, a purge policy of EntirePool is the best choice.
...
Рейтинг: 0 / 0
10.10.2007, 09:10
    #34858944
Tyo
Tyo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблемы с коннектом WebSphere после перезапуска БД
Всем спасибо, будем пробовать
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / проблемы с коннектом WebSphere после перезапуска БД / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]