powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Восстановить соединение в Forms
14 сообщений из 14, страница 1 из 1
Восстановить соединение в Forms
    #38680972
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Приложение на Forms запущено постоянно и выполняет действия по таймеру (триггер WHEN-TIMER-EXPIRED ). Если происходит обрыв связи, то надо выйти из приложения и запустить снова. Если обрыв произошел ночью, то только утром происходит перезапуск. Хотят, чтобы коннект восстанавливался автоматически.
Проверка наличия коннекта к базе проходит нормально, но не получается LOGOUT и LOGON
триггер WHEN-TIMER-EXPIRED
Код: plsql
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.
46.
DECLARE 	   
  timer_id TIMER;  
  do_log BOOLEAN;  
  n_date date;
  NOT_CONN EXCEPTION;
  PRAGMA EXCEPTION_INIT(NOT_CONN,-1089); 
  NOT_CONN1 EXCEPTION;
  PRAGMA EXCEPTION_INIT(NOT_CONN1,-3113);   
BEGIN
    UN := SUBSTR(Get_Application_Property(USERNAME),1,32); 
    PW := SUBSTR(Get_Application_Property(PASSWORD),1,32);
    PW1 := SUBSTR(Get_Application_Property(PASSWORD),1,32);
    CS := ltrim(rtrim(SUBSTR(Get_Application_Property(CONNECT_STRING),1,30)));
    IF cs IS NOT NULL THEN
      PW := PW||'@'||CS;
    END IF;  	
.....
      timer_id := FIND_TIMER ('LOAD_TIMER');
      IF Id_Null(Timer_id) THEN
         Timer_id := Create_timer('LOAD_TIMER', 6000, NO_REPEAT);
      ELSE
        SET_TIMER(timer_id, 6000, NO_REPEAT);
      END IF;    	
 execute_query;
EXCEPTION WHEN 	NOT_CONN or NOT_CONN1  
	THEN
	 do_log:=false;	 
	 While do_log =false Loop
          n_date := to_date(:System.Current_Datetime,'DD-MON-YYYY HH24:MI:SS')+0.002; 
          While to_date(:System.Current_Datetime,'DD-MON-YYYY HH24:MI:SS')<n_date Loop
        	null;
         end loop;
	    do_log:=get_connection(un,pw1,cs); 	    
	 End Loop;  

        logout;
     LOGON(un,pw);
-- 	 в это месте говорит ALREADY LOGGED ON. Must logout before changing connections

	 timer_id := FIND_TIMER ('LOAD_TIMER');
   IF Id_Null(Timer_id) THEN
      Timer_id := Create_timer('LOAD_TIMER', 6000, NO_REPEAT);
   ELSE
       SET_TIMER(timer_id, 6000, NO_REPEAT);
   END IF;	 
END;


Код: plsql
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.
Функция
FUNCTION GET_CONNECTION ( 
  v_userName IN VARCHAR2 DEFAULT NULL,
  v_password IN VARCHAR2 DEFAULT NULL,
  v_datasource IN VARCHAR2 DEFAULT NULL
) RETURN BOOLEAN IS
  c_attempts CONSTANT INTEGER := 3;
  un VARCHAR2(80);
  pw VARCHAR2(80);
  cn VARCHAR2(80);
  tmpConInfo VARCHAR2(255);
  tmpConHandle EXEC_SQL.ConnType;
  logonSuccessful BOOLEAN := FALSE;
BEGIN 
--	message('get_con') ; pause;  
      un := v_username;
      pw := v_password;
      cn := v_datasource;    
    IF ((un is null) and (pw is null) and (cn is null)) THEN      
      logonSuccessful:=false;
    END IF;
    BEGIN
      tmpConHandle := EXEC_SQL.OPEN_CONNECTION(un, pw, cn);
    EXCEPTION
    WHEN EXEC_SQL.PACKAGE_ERROR THEN     
      logonSuccessful:=false;
    END;
    IF EXEC_SQL.VALID_CONNECTION(tmpConHandle) THEN
      logonSuccessful := TRUE;
      EXEC_SQL.CLOSE_CONNECTION(tmpConHandle);
    END IF;
  IF logonSuccessful THEN
    RETURN TRUE;
  ELSE
    RETURN FALSE;
  END IF;  
END;
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681028
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется идея бредовая. Но это нужно нормально с заказчиком разговаривать, что требуется.

Ну и второе, что за Forms. Он разный. Версия?
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681034
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Forms 6i.
Знаю, что бредовая, но именно заказчик требует автоматического восстановления соединения
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681049
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я бы сделал отдельное приложение монитор.

Запустили монитор, он запустил Forms Runtime, если Forms Runtime подвис/вылетел/потерял соединение - убили процесс, запустили снова.

Поздно пить боржоми. Почки уже отвалились. Только в морг. IMHO & AFAIK

Как банальный вариант, просто батник: запуск Forms + goto на начало. В Forms на таймер выход.
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681060
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что за обработка на клиенте-то у вас? Нельзя ли ее на сервер, на scheduler вынести?

А если, как вариант, брутально запустить новый экземпляр можно попробовать:
host('start ifrun60 module=... userid=...');
и выйти из дисконнектнувшегося экземпляра?
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681062
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
монитор сверху не катит. Я не могу понять почему в моем примере не происходит logout, только в этом загвоздка. если я делаю тестовую форму с проверкой соединения по кнопке - все работает, а тут по таймеру, получается, что что-то не устраивает Forms
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681067
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=APS=-,нет, обработка должна быть как есть. А если хост запущу, то из этого приложения я же не выйду пока новое не закроется
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681081
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
новый2А если хост запущу, то из этого приложения я же не выйду пока новое не закроется
Неправда. "Вы просто не умеете его готовить" ( C )

Но через HOST это сильно топорно. Id процесса не получить, процесс не отмониторить, не убить и т.д. В общем, лично мне такое решение нафиг.

Ну и не факт, что при обломившемся коннекте удастся "просто выйти". IMHO & AFAIK.

-=APS=-...и выйти из дисконнектнувшегося экземпляра?
Я так раньше делал модуль обновления софта на клиенте ))):

Клиент понимает, что он старый. Копирует модуль "обновлялку" в новое место (что бы саму обновлялку можно было запускать). Запускаем обновлялку и выходим из основной программы. Обновлялка ждет завершение основного процесса (для таких вещей и хочется ID процесса). Софт обновляется (включая обновлялку в основной директории, сами работаем из запасной). Запускаем новую версию софта.
( C ) www.kamis.ru
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681082
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За счет start, по идее, вернет управление сразу.
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681136
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=APS=-, что такое start?
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681160
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Команда такая, в Windows.
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681165
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем, не делает logout только если падает на exception в триггеру WHEN-TIMER-EXPIRED (((
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681206
новый2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже так: при обрыве связи не делается logout, соответственно нельзя сделать logon. как бороться? может еще есть возможность отконнектиться от формы?
...
Рейтинг: 0 / 0
Восстановить соединение в Forms
    #38681210
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
свое мнение я уже высказал: кильнуть процесс и запустить по новой. Все остальное - может сработать, а может и нет.

Лучше уж тогда с фотоаппаратом по улице ходить и фотографировать встретившихся динозавров. Как известно, вероятность 1/2, или встретишь или нет. А за не фейковую фотку динозавра бабла можно срубить не мало IMHO.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Восстановить соединение в Forms
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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