|
|
|||||||||||||||||||||||||||||
|
Java и Oracle - это очень простоСодержание
Основные понятияНачиная с версии 8.1 в состав СУБД Oracle можно дополнительно включать так называемый JServer, позволяющий использовать для хранимых процедур помимо PL/SQL еще и язык Java. В состав JServer входят следующие элементы:
JVM Aurora способна исполнять методы Java ("хранимые Java-процедуры") и классы, хранимые в Oracle. В версии 9.0 JServer переименован в Oracle9i JVM (иногда - OJVM или же Enterprise Java Server). Место Java в архитектуре Oracle
Наличие встроенной виртуальной машины Java в Oracle -дополнительная возможность по отношению к базовой поставке. Начиная с версии 9.2 встроенная в СУБД виртуальная машина Java не поддерживает магазины протоколов J2EE и CORBA. В частности, с этого времени нет возможности разместить в БД под управлением Oracle контейнеры для EJB, JSP и сервлетов (OSE), как это было раньше. Их предлагается размещать в среде OC4J из состава Oracle 9i Application Server. Встроенная машина Java продолжает поддерживать только работу хранимых процедур, JDBC и SQLJ. Соотношение и взаимосвязь PL/SQL и Java в OracleJava в Oracle представляет собой полнофункциональную замкнутую систему, однако классы Java средствами Oracle можно "публиковать" для PL/SQL-машины и вызывать из программ на PL/SQL. Вплоть до версии 9.2 включительно PL/SQL в Oracle несравнимо эффективнее отрабатывает SQL-запросы. С другой стороны Java обладает более богатой и универсальной языковой средой для описания приложений. Особенности Java и среда работы программ на JavaАрхитектура и принципы работы Java резко отличаются от архитектуры и принципов работы PL/SQL. Ниже излагаются некоторые особенности Java, существенные для использования этого языка при работе с Oracle. Программные компоненты в среде разработки на JavaОсновными программными компонентами в среде разработки на Java являются исходный код, класс, пакет, интерфейс, файл ресурсов. Взаимоотношение показано на рисунке. Пакет используется для логический группировки программных единиц Java. Архив используется для физической группировки программных единиц Java, необходимых для работы конкретной Java-программы, могущих быть вызваных прямо или по цепочке. Технологически часто единственная альтернатива неимоверному числу .class-файлов. Установка среды разработки на JavaДля ведения разработок с использованием Java необходимо установить на компьютере JDK (Java Development Kit, прежнее название - SDK, Software Development Kit for Java). Начиная с версии Oracle 8.1 JDK присутствует на CD с основной поставкой и может устанавливаться штатной программой Oracle Installer путем специального указания. В типовых вариантах установки программной среды Oracle (например, в вариантах Typical или Minimal в версиии 8.1) JDK появляется на компьютере автоматически. JDK можно установить и независимо от Oracle, переписав этот программный комплект с http://www.javasoft.com/products/. Среда окружения OCДля работы программ среды разработки Java должны быть выставлены следующие минимально необходимые переменные среды окружения ОС:
Исполняемые модули из состава JDK в версии 8.1 расположены в %ORACLE_HOME%\apache\jdk\bin, а в версии 9 - в %ORACLE_HOME%\ jdk\bin. Основные библиотеки классов classes111.zip и classes12.zip (разница между ними - в версиях Java) в обеих версиях Oracle находятся в %ORACLE_HOME%\jdbc\lib Для проведения экспериментов удобно создать командный файл со следующим текстом для версии Oracle 8.1: set nls_lang=american_america.ru8pc866 или со следующим текстом для версии Oracle 9.2: set nls_lang=american_america.ru8pc866 Теперь можно открыть консольное окошко и прогнать нужный командный файл. Создание самостоятельных программ на JavaПример транслирования и выполнения Java-программыФайл с программой под названием MyJavaAgent.java может иметь следующее содержание:
Транслирование программы (класса): javac MyJavaAgent.java Запуск программы (класса): java MyJavaAgent Создание хранимых программ на Java в OracleOracle позволяет хранить Java-программы и вызывать их на исполнение с помощью встроенной JVM, полностью наподобие хранимым PL/SQL-процедурам, исполняемым встроенной PL/SQL-машиной. Дополнительные компоненты СУБД Oracle для работы с хранимыми Java-программамиДля работы с хранимыми Java-программами посредством Jserver/OJVM в Oracle добавлены следующие компоненты разного характера:
В зависимости от характера перечисленных компонент они заводятся либо при установке программноый среды работы Oracle, либо при создании в БД среды JServer/OJVM. Схема вызова хранимых Java-программХранимым Java-программам в Oracle соответствуют методы Java, подверженные следующим ограничениям (версия 8.1):
Установка JServer/OJVM в версиях 8.1 и 9Проще и короче всего установить JServer/OJVM в виде побочного следствия установки одной из стандартных конфигураций программной среды Oracle (например, Typical или Minimal в версии 8.1). Тем не менее, JServer/OJVM можно доустановить к имеющейся программной среде, если он отсутствовал ранее, путем запуска сценария initjvm.sql из каталога %ORACLE_HOME%\javavm\install (система обозначений Windows). Пример создания хранимой Java-программыХранимые Java-программы могут создаваться в БД под Oracle двумя способами:
Ниже показаны оба способа на примере класса, создаваемого в рамках пакета training.demos. Создание с помощью loadjavaПусть в каталоге training/demos имеется файл MyJavaAgentInOracle.java (имеет отличия от файла MyHi.java , приведенного выше):
Загрузка в схему SCOTT БД текста кода для класса в этом файле (система обозначений Windows; в Unix-оболочках аналогично): set CLASSPATH=%CLASSPATH%;%ORACLE_HOME%\javavm\aurora.zip (в версии 9 %CLASSPATH%;%ORACLE_HOME%\javavm\lib\aurora.zip ) loadjava -user scott/tiger -o training/demos/MyJavaAgentInOracle.java Если в том же каталоге у нас будет странслированный программой javac класс MyHiFromOracle, можно будет загрузить в БД сразу его: loadjava -user scott/tiger -o training/demos/MyJavaAgentInOracle.class Создание SQL-предложениемЗагрузить код того же класса можно по-другому: CREATE JAVA SOURCE NAMED "training/demos/MyJavaAgentInOracle" AS Обращение к загруженной в Oracle процедуре JavaОбращение к Java-программе из Java-кода делается как обычно. Для обращения к сохраненной в БД Java-программе из PL/SQL, ее следует опубликовать для этого языка: CREATE FUNCTION say_hello_from_java_to (to_whom IN VARCHAR2) После этого можно выполнить в SQL*Plus: SET SERVEROUTPUT ON Работа со словарем-справочникомОрганизация справочной информацииСправочная информация о программных элементах Java распределена между словарем-справочником СУБД (таблица DBA_OBJECTS) и специальными структурами, создаваемыми в каждой схеме, владеющей этими элементами. При первой загрузке программных элементов Java в любую схему loadjava или команда CREATE JAVA создадут там:
Фактически загрузка программой loadjava вызывает неявную выдачу команды CREATE JAVA … . Описание программных элементов Java заносится в таблицу CREATE$JAVA$LOB$TABLE. Повторная загрузка одного и того же Java-элемента реально выполняться не будет, если только (а) он не изменил свое описание или (б) не указан ключ -force при вызове программы loadjava. Просмотр Java-элементовJava-объекты, заведенные в схеме, можно просмотреть из таблицы USER_OBJECTS словаря-справочника обычным способом: COLUMN object_name FORMAT A30 Просмотр исходных текстовВыгрузить из БД исходные тексты из "словаря-справочника объектов Java" конкретной схемы можно с помощью процедур пакета DBMS_JAVA: DECLARE Исходные тексты программ на Java в БД модно посмотреть также в консоли Oracle Enterprize Manager или в аналогичных системах третьих фирм. Преобразование именСтандарт именования классов в Java допускает более длинные имена, чем предел в 30 знаков в SQL Oracle. Достаточно длинные Java-имена Oracle при помещении в словарь-справочник самостоятельно заменяет на придуманные более короткие. Получить первоначальное имя по присвоенному Oracle можно с помощью функции DBMS_JAVA.LONGNAME. Пример ее использования: COLUMN shortname FORMAT A30 SELECT object_name shortname,DBMS_JAVA.LONGNAME(object_name) longname Кроме того, при помещении составного имени Java в БД Oracle переводит точки в знаки "/", например training.demos.MyHiFromOracle Ссылки по теме
|
|