Имеется следующий JAVA код созданый и скомпилированый в БД Oracle.
create or replace and compile java source named windowserrors as
public class OpenWindows
{
public static void ErrorText()
{
try
{
Process proc = Runtime.getRuntime().exec("Msg * ошибка");
while (true)
{
try
{
proc.waitFor();
break;
}
catch (Exception t)
{
t.getMessage();
}
}
}
catch(Exception e)
{
e.getMessage();
}
}
}
Этот код должен запускать рассылку сообщений (для примера всем пользователям), о том, что совершена ошибка.
Написана простая процедура, которая должна его запускать на выполнение, а так же, собственно, сам вызов процедуры.
PROCEDURE Rise_error AS LANGUAGE JAVA
NAME 'OpenWindows.ErrorText()';
BEGIN
p_oms_patreg.Rise_error;
END;
Но, при вызове процедуры ORACLE отрабатывает, но не выводится окно с сообщением. Хотя если запустить данный код на исполнение, например, в Eclipse - появляется соответствующее окно.
Перерыв достаточно много информации, так и не нашел подобный вариант реализации.
Ответ
Проверил, код выполняется нормально.
Убрал проглатывание ошибок:
create or replace and compile java source named windowserrors as
public class OpenWindows {
public static void ErrorText() throws Exception {
Process proc = Runtime.getRuntime().exec("Msg * ошибка");
proc.waitFor();
}
}
Создал процедуру:
CREATE OR REPLACE PROCEDURE Rise_error AS LANGUAGE JAVA
NAME 'OpenWindows.ErrorText()';
Вызвал ее:
begin
rise_error();
end;
Первый раз, вылезло ORA-29532 с сообщением о нехватке привилегий. Выдал привилегии, создал новое подключение к БД и выполнил заново. На сервере БД появилось сообщение (из-за кодировки поехала кириллица, но это уже другой вопрос).
Убедитесь, что:
отключен перехват ошибок в Java (смотрите код выше);
выполняется именно нужная процедура (нет ли здесь путаницы: p_oms_patreg.Rise_error;);
наличие сообщений проверяется на сервере БД, на котором выполняется код.
Комментариев нет:
Отправить комментарий