Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / CURRENT TIMESTAMP в UDF / 9 сообщений из 9, страница 1 из 1
11.04.2013, 09:58
    #38221293
aserdjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
Добрый день, коллеги.

Быть может, кто-то сталкивался с проблемой :
есть sql user defined function UDF1, возвращаюшая таблицу.

Функция вызывает sql stored procedure PROC1, которая оперирует переменными timestamp,
получая значения из регистра CURRENT TIMESTAMP.

Проблема заключается в том, что в процедуре PROC1 значение CURRENT TIMESTAMP не меняется в ходе выполнения
при вызове из функции UDF1 и прекрасно меняется при вызове процедуры PROC1 напрямую.

Есть ли метод обойти это наследование c помощью настроек БД или DDL UDF1 или PROC1 ?

Приложение, к сожалению, не может вызвать PROC1.
...
Рейтинг: 0 / 0
11.04.2013, 11:41
    #38221493
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
aserdjuk,

Добрый день.

Вроде изменяется...
Код: 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.
create or replace procedure test_timestamp(out a timestamp, out b timestamp)
reads sql data
begin
  set a = (select max(current timestamp) from syscat.tables, syscat.tables);
  set b = (select max(current timestamp) from syscat.tables, syscat.tables);
end@

create or replace function test_timestamp()
returns table (a timestamp, b timestamp)
begin atomic
  declare a, b timestamp;
  call test_timestamp(a, b);
  return
  select a, b from sysibm.sysdummy1;
end@

call test_timestamp(?, ?)@


  Value of output parameters
  --------------------------
  Parameter Name  : A
  Parameter Value : 2013-04-11-11.33.43.267000

  Parameter Name  : B
  Parameter Value : 2013-04-11-11.33.43.352000

select * from table(test_timestamp())@


A                          B                         
-------------------------- --------------------------
2013-04-11-11.34.14.692000 2013-04-11-11.34.14.774000

Если хочется, чтобы всегда изменялось, используйте вместо current timestamp:
Код: plaintext
timestamp(generate_unique()) + current timezone
...
Рейтинг: 0 / 0
11.04.2013, 12:16
    #38221577
aserdjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
Mark Barinstein,

большое спасибо, помогло и отпустило.

Дабы не затевать новую тему, спрошу тут.
Есть проблема в нескольких разновидных приложений, вызывающих процедуру P1. Процедура пишет данные в таблицу и ждет ответа от обработчика.
Обработчик (бин на WAS 8) вызывает select field from table( UDF1() ); получая записи для обработки, обрабатывает их и записывает результат в ту же таблицу.

Т.к. требования к скорости достаточно жесткие, пытаюсь минимизировать таймауты этой конструкции.
UDF1 оптимизирована, данные партиционированы и т.д.
Уменьшение интервала сканирования обработчикам нагружает cpu&io, убивает event monitoring.

Пробовал dbms_alert и dbms_pipe, но время между send и receive у них порядка 500-700 мс.
Пробовал soap wrapper, дополнительные расходы около 1 секунды.

Нет ли еще какой-либо альтернативы для быстрого обмена между различными приложениями с помощью функций и процедур
в db2 9.7FP8 @aix ?

Исключить общение приложений через db2, к сожалению, не получится.
...
Рейтинг: 0 / 0
11.04.2013, 14:16
    #38221804
CawaSPb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
aserdjuk,

А почему бы не кидать нотификации через те же пайпы/другие средства IPC, используя DB2 как брокер (списки подписчиков, прочая информация).
Нет возможности заморачиваться всем этим в приложении, писать соответствующие внешние ф-и/процедуры.
...
Рейтинг: 0 / 0
11.04.2013, 14:42
    #38221880
CURRENT TIMESTAMP в UDF
aserdjukИсключить общение приложений через db2, к сожалению, не получится.
Тут бы подробнее в чем именно "затык" и какое ПО доступно для использования.
Можно конечно поиграться с блокировкой/разблокировкой пустой отдельной таблицы, когда факт разблокировки будет служить сигналом начало обработки, но это криво по сути.
Откуда растет требование синхронизации действий приложений через СУБД?
Можно например написать хранимую (java), которая будет "дергать" EJB/MDB-компонент на WAS и возвращать результаты.
Можно из DB2 общаться с IBM WebSphere MQ, можно дергать сервис через SOAP и получать ответ.

Желательно видеть постановку задачи более полно, чтобы сформулировать варианты решения. И понимать что в этой постановке можно менять, а что трудно и/или невозможно. Если будет понятен "поток" обработки, т.е. кто кому и что передает, и в какой последовательности обрабатывает, можно будет что-то предложить по вариантам реализации.
...
Рейтинг: 0 / 0
11.04.2013, 16:58
    #38222299
aserdjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
Евгений Хабаров,
CawaSPb


Трудностей только три, два лиричных и одна практическая :
проект большой и команда инерционна,
приоритетами является функциональное развитие, а не технологическое усовершенствование,
несколько legacy потребителей, которые, в силу своего возраста, знать ничего не знают об mq, soap и rmi.

Пока, насколько понимаю, самый практичный вариант это замена SQL процедур и функций на JAVA.
Для вызова WAS с db2 понадобится WAS client ?

http://pic.dhe.ibm.com/infocenter/pim/v6r0m0/index.jsp?topic=/com.ibm.wpc.ins.doc/wpc_tsk_setting_up_ibm_db2_on_the_app_server.html
...
Рейтинг: 0 / 0
11.04.2013, 22:47
    #38222757
CURRENT TIMESTAMP в UDF
aserdjukЕвгений Хабаров,
CawaSPb


Трудностей только три, два лиричных и одна практическая :
проект большой и команда инерционна,
приоритетами является функциональное развитие, а не технологическое усовершенствование,
несколько legacy потребителей, которые, в силу своего возраста, знать ничего не знают об mq, soap и rmi.

Пока, насколько понимаю, самый практичный вариант это замена SQL процедур и функций на JAVA.
Для вызова WAS с db2 понадобится WAS client ?

http://pic.dhe.ibm.com/infocenter/pim/v6r0m0/index.jsp?topic=/com.ibm.wpc.ins.doc/wpc_tsk_setting_up_ibm_db2_on_the_app_server.html
Вариантов много. Попытаюсь изложить то, что навскидку пришло в голову.
Основная идея ( с учетом того, что поток обработки я пока не представляю) чтобы доступ к WAS(EJB) шел по более-менее короткому пути.
Т.е. вызываем процедуру и передаем ей (или формируем внутри нее) выборку, подлежащую обработке.
После чего этот массив данных неким образом (скорее всего как XML) передается на обработку серверу приложений (WAS)
Суть хранимой:
- Сформировать выборку и представить ее в виде XML. По сути это один или несколько SQL-запросов.
- Вызвать EJB-компонент или веб-сервис и получить от него ответ.
- Разобрать ответный XML-документ и выполнить модификацию таблиц.

Варианты:
1. Если рядом есть сервер WebSphere MQ, то задействовать MQSeries routines .
Отправка асинхронная, прием без ожидания. Нужно будет разобраться с настройкой тракта передачи и форматом сообщений. Для приема на стороне WAS достаточно написать весьма несложный MDB, который будет слушать очередь и принимать сообщения.
Если рядом MQ нет, можно написать хранимую на Java и использовать Thin Client for JMS для доступа к встроенной службе сообщений WAS.
Это все в случае, если нужна асинхронная обработка. Т.е. в этом случае отправка запроса и чтение ответа "распадаются" на разные транзакции.
Со стороны DB2 - нужна настройка для взаимодействия с MQ штатных хранимых/функций, или написание собственной хранимой/функции.
Со стороны WAS - написание компонент(ы) отвечающей за прием и обработку сообщений.

2. Если есть лицензия на IBM InfoSphere Federation Server, можно задействовать Web service consumer functions со стороны СУБД и дописать/оформить EJB для работы в качестве веб-сервиса.
Со стороны DB2 в этом случае настройка минимальна, со стороны WAS - реализация веб-сервиса.
Если лицензии нет, то написать Java-хранимую, которая будет обращаться к веб-сервису. Тут даже тонкий клиент может не понадобиться, тк функционал для работы с веб-сервисами разных стандартов либо встроен в JDK (зависит от версии JDK), либо доступен в виде внешних библиотек. Можно задействовать и тонкие клиенты для WAS для JAX-WS и JAX-RPC.
Со стороны DB2 в этом случае ннаписать хранимую/функцию, со стороны WAS - реализация веб-сервиса.

3. Можно задействовать Thin Client for EJB для прямого обращения к EJB.
Со стороны СУБД - хранимая на Java. Со стороны WAS - возможно ничего.

4. Можно со стороны WAS написать простейший сервлет (который, возможно, вызывает EJB), который будет принимать на входе например JSON (или XML) и на выход аналогично отдавать JSON или XML. На самом деле реализовать веб-сервис (в современных условиях) почти не сложнее, чем сервлет. Посмотрите в сторону JAX-RS. Так что этот пункт считать не рекомендуемым, а просто как доп. вариант.

Надеюсь, что схема взаимодействия компонент в существующем виде есть? И чего хочется достичь тоже есть?
В графическом представлении рисовать и анализировать потоки обработки информации все же удобнее.
Если нет, рекомендую такую схему нарисовать (для себя и коллег), возможно обнаружатся другие варианты(точки) взаимодействия.

PS: Это все, что могу придумать навскидку. До понедельника я буду далеко от интернета, поэтому дискуссию смогу продолжить только в понедельник.
...
Рейтинг: 0 / 0
12.04.2013, 11:05
    #38223098
aserdjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
Евгений Хабаров
3. Можно задействовать Thin Client for EJB для прямого обращения к EJB.
Со стороны СУБД - хранимая на Java. Со стороны WAS - возможно ничего.



Спасибо большое ! П.3. я как раз и реализовывал как самый логичный.
Схем, графов и прочих накладных расходов у нас много :)
...
Рейтинг: 0 / 0
12.04.2013, 13:39
    #38223406
aserdjuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CURRENT TIMESTAMP в UDF
Кстати, посмотрел исходный текст syscat.routines для WAITONE из DBMS_.
Тоже самое цикличное сканирование таблицы SYSTOOLS.DBMS_ALERT_INF с поеданием cpu & io.
Только, в отличии от меня, PREPARE стоит в цикле :(
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / CURRENT TIMESTAMP в UDF / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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