Итак, ни для кого не секрет что в БД oracle работает java-машина, которую можно использовать для работы
с нетипичными для БД задачами: работа с
электронной почтой, работа с файловой системой сервера, работа с сокетами, и любыми другими задачами,
которые позволяет реализовать язык java. На
сервере БД Oracle используется JEE (Java Enterprise Edition),
версия java машины зависит от версии сервера. Для ее
определения необходимо выполнить функцию на Java:
System.getProperty("java.version");
Как это правильно сделать, можно увидеть из
прилагаемого листинга программы. Это отступление очень важно, так как в
зависимости от версии java на
сервере необходимо использовать сборку драйвера JDBC соответствующей версии. Иначе ваш код будет
сыпать системными ошибками и откажется работать. При разработке я использовал
версию сервера 11.2.0.3.0, на котором была запущена java-машина версии 1.5.0_10.
Для
некоторого комфорта в разработке на Java
рекомендую использовать JDeveloper
от oracle с необходимой версией JEE. При этом уже готовый код я
компилировал в базе данных, используя TOAD.
Теперь
опишем алгоритм действий:
1. Скачиваем необходимый драйвер JDBC и записываем его на сервер (и на
компьютер с Java средой разработки)
2. Открываем удобную среду разработки
для java JEE.
3. Пишем Java класс с собственным загрузчиком
классов, чтобы можно было подгрузить JDBC
драйвер, не используя переменные сессии сервера CLASSPATH.
4. Тестируем работоспособность класса и
переносим его в TOAD.
5. Пишем БД обертку для созданного класса и
компилируем его. Отлаживаем, чтобы компиляция прошла без ошибок (не забываем поменять
путь до файла JDBC драйвера с тестового на
серверный).
6. Оборачиваем Java-код PL/SQL пакетом.
7. В том же PL/SQL пакете разрабатываем способ хранения
полученной информации в БД, если это необходимо.
8. Даем права на использование схемой java-машины
GRANT JAVAUSERPRIV
TO
XX_SCHEME;
Проверяем права запуском запроса
select * from
user_role_privs
из под схемы XX_SCHEME. При
успехе должны увидеть такую строку:
USERNAME
|
GRANTED_ROLE
|
ADMIN_OPTION
|
DEFAULT_ROLE
|
OS_GRANTED
|
XX_SCHEME
|
JAVASYSPRIV
|
NO
|
NO
|
NO
|
9. После запуска работоспособной функции connect сервер БД потребует дать права на
использование java (в описании ошибки
будет пример раздачи прав). Даем такие права как в описании ошибки (Если
позволяет безопасность – можно дать сразу PUBLIC права)
exec
dbms_java.grant_permission(
'PUBLIC',
'SYS:java.net.SocketPermission',
'192.168.1.3:1433','connect,resolve');
Такие права даются из под пользователя SYS. Проверить доступность прав можно запросом
select
* from
USER_JAVA_POLICY
order
by
SEQ
desc
из под пользователя XX_SCHEME
10. Создаем пакет-обертку на PL/SQL, заполняем
разработанные структуры данных и наслаждаемся результатом.
Прикрепляю ссылку для возможности Просмотреть исходники архивом
Комментариев нет:
Отправить комментарий