В очередной раз пришлось встретиться с WebUtil на Oracle Forms 10g. Первый раз, когда решил воспользоваться данной библиотекой, помню долго и упорно настраивал, прежде чем добился нормальной работы. Потом были курсы, на которых среди прочего упоминалась установка и работа с WebUtil. Я со "знанием дела" предвкушал былые сложности, но преподаватель заявил, что все трудности остались в прошлом и сейчас настройка поддержки WebUtil не займет ни большого количества времени, ни вызовет особых трудностей. Так в общем-то и получилось - я был приятно удивлён.
Вернувшись на рабочее место, коллега решил применить возможности WebUtil в своих разработках, и мы снова нарвались на всевозможные ошибки - вроде и делали всё как было описано в книге с курсов, но вместо рабочей программы получали набор "непонятных" ошибок. Я захотел проверить всё сам и решил установить всё на чистую систему. Вот этот опыт я и хочу тут законспектировать, чтобы в будущем не искать снова и не нарываться на старые грабли.
Устроивший меня вариант установки я нашел тут, за что товарищу Ammar W. Sajdi БОЛЬШОЕ СПАСИБО. Здесь я приведу перевод его статьи с моими небольшими дополнениями.
Итак, у меня была чистая машина, куда я установил Oracle Developer Suite 10g v10.1.2.0.2, после чего пропатчил DevSuite патчем Oracle Developer Suite 10g patch v10.1.2.3.
ORACLE_HOME - папка, куда был установлен DevSuite (у меня C:\ORA_DS).
1) Скачиваем файл jacob_18.zip (пишут что не надо брать версии ни 1.7, ни 1.9, а только 1.8)
2) Файл jacob.jar из скачанного архива кидаем в ORACLE_HOME\forms\java, а файл jacob.dll в ORACLE_HOME\forms\webutil.
3) Подписываем файлы frmwebutil.jar и jacob.jar:
- Пуск-Выполнить-cmd.exe
- добавляем ORACLE_HOME\jdk\bin в переменную среды PATH - set PATH=C:\ORA_DS\jdk\bin;%PATH%
- подписываем файлы и смотрим нет ли ошибок -
C:\ORA_DS\forms\webutil\sign_webutil C:\ORA_DS\forms\java\frmwebutil.jar
C:\ORA_DS\forms\webutil\sign_webutil C:\ORA_DS\forms\java\jacob.jar
4) Если у вас уже есть схема с базе данных, содержащая хранимый код WebUtil, то этот шаг можно пропустить. В противном случае создаём схему для хранения кода WebUtil. Открываем в текстовом редакторе файл ORACLE_HOME\forms\create_webutil_db.sql и правим его: удаляем или комментируем строку с командой EXIT, чтобы иметь возможность посмотреть не возникло ли ошибок при генерации. Запускаем SQL*Plus и выполняем следующее:
CREATE USER webutil IDENTIFIED BY a
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
/
GRANT CONNECT, CREATE PROCEDURE, CREATE PUBLIC SYNONYM TO webutil;
/
CONNECT webutil/webutil@oracle_db_tns
@C:\ORA_DS\forms\create_webutil_db.sql
-- Проверяем вывод SQL*Plus на наличие ошибок, а затем
CREATE PUBLIC SYNONYM webutil_db FOR webutil.webutil_db;
/
--Переподключаемся как SYSTEM, и выполняем:
grant execute on webutil_db to public;
/
5) Редактируем файл ORACLE_HOME\forms\server\default.env - добавляем C:\ORA_DS\jdk\jre\lib\rt.jar в CLASSPATH.
6) Редактируем файл ORACLE_HOME\forms\server\formsweb.cfg, меняем секцию [default] добавляя (или проверяя наличие):
archive_jini=frmall_jinit.jar,frmwebutil.jar,jacob.jar
archive=frmall.jar
и добавляем (проверяем) секцию:
[webutil]
WebUtilLogging=off
WebUtilLoggingDetail=normal
WebUtilErrorMode=Alert
WebUtilDispatchMonitorInterval=5
WebUtilTrustInternal=true
WebUtilMaxTransferSize=16384
baseHTMLjinitiator=webutiljini.htm
baseHTMLjpi=webutiljpi.htm
baseHTML=webutilbase.htm
archive_jini=frmall_jinit.jar
WebUtilArchive=frmwebutil.jar,jacob.jar,frmall.jar
archive=frmwebutil.jar,frmall.jar
lookAndFeel=oracle
7) Редактируем файл ORACLE_HOME\forms\server\webutil.cfg, меняя:
transfer.database.enabled=TRUE
transfer.appsrv.enabled=TRUE
8) Стартуем OC4J
9) Запускаем Forms Builder и подключаемся к схеме из 4-ого шага.
Открываем webutil.pll, выполняем "Compile ALL" (Shift-Ctrl-K), и генерируем в PLX (Ctrl-T).
Если при генерации возникает ошибка FRM-91507, то необходимо изменить в реестре параметр NLS_LANG на "AMERICAN_..." (впереди AMERICAN, а дальше то что было), перезапустить Forms Builder и сгенерировать PLX.
PLX нам необходим для того, чтобы не пришлось присоединять библиотеку с указанием полного пути, что крайне нежелательно.
10) Создаем новую FMB.
Открываем webutil.olb и перетягивая объект WebUtil на нашу форму, создаем подкласс (Subclass), не копию (Copy). Объект WebUtilConfig не нужен.
Присоединяем webutil.pll, удаляя путь.
Добавляем триггер ON-LOGON с кодом
NULL;
(опционально).
Создаём кнопку на новой канве с кодом
SHOW_WEBUTIL_INFORMATION(TRUE);
в триггере WHEN-BUTTON-PRESSED.
Компилируем FMB в FMX после"Compile ALL" (Shift-Ctrl-K).
11) Переходим на закладку Runtime в настройках (меню Edit-Preferences) Forms Builder-а, нажимаем кнопку "Reset to Default", если строка Application Server URL пустая. В конце этой строки добавляем "?config=webutil" (в итоге получим примерно следующее http://server:port/forms/frmservlet?config=webutil)
12) Запускаем форму и радуемся жизни ;).
P.S. Для того чтобы отображались все элементы канвы WebUtil (для предотвращения ошибки FRM-13008) добавляем в реестр в FORMS_BUILDER_CLASSPATH нашего ORACLE_HOME полный путь к jacob.jar (там уже должны быть как минимум frmall.jar и frmwebutil.jar).
Комментариев нет:
Отправить комментарий