вторник, августа 25, 2009

Установка WebUtil

В очередной раз пришлось встретиться с 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).

Комментариев нет: