betacode

Установите Oracle REST Data Services (ORDS) для Oracle APEX

  1. Что такое Oracle REST Data Services?
  2. Интеракция между Oracle ORDS и Oracle APEX
  3. Download Oracle ORDS
  4. Конфигурация ORDS для APEX
  5. Развертывание ORDS

1. Что такое Oracle REST Data Services?

Oracle REST Data Services (ORDS) это сервис данных заменяющий Oracle HTTP server и mod_plsql. Основанный на Java EE предоставляет серсисы RESTful и повышает способность безопасности. Он развернут на WebLogic, Tomcat, Glassfish или работает независимо.

2. Интеракция между Oracle ORDS и Oracle APEX

Обычно, у вас есть 2 способа установки Oracle APEX.

Способ 1: Конфигурация Embedded PL/SQL Gateway: Это способ конфигурации Oracle APEX который может работать на Oracle XML DB HTTP Server, это готовый HTTP когда вы устанавливаете Oracle 11g или новее.

Способ 2: Конфигурация Oracle APEX на определенном веб сервере, например WebLogic, Tomcat или Glassfish,...
Ссылка работает с Oracle APEX как ниже:
  • http://your-server:8080/apex
Чтобы использовать сервисы RESTful вам нужно дополнительно установить Oracle ORDS, который может развернуться на WebLogic Server, Tomcat, Glassfish,.. или работать независимо. Oracle ORDS может читать напрямую в Oracle APEX и полностью заменить Oracle HTTP Server, поэтому вы можете использовать сервисы RESTful на APEX и использовать новый URL для работы с Oracle APEX.
  • http://your-server:8080/ords

3. Download Oracle ORDS

Вы можете скачать Oracle ORDS по ссылке:
Результаты скачивания:

4. Конфигурация ORDS для APEX

CD к папке с установленным apex.
Войти в систему sqlplus с авторизацией sysdba.
Запустить команду конфигурации REST Service.
-- Configuring REST Service.


@apex_rest_config.sql
После успешного выполнения команды выше, создаются 2 user APEX_LISTENER и APEX_REST_PUBLIC_USER.
  1. APEX_LISTENER - Аккаунт использованный для запроса определения сервисов RESTful сохраненных в Oracle APEX.
  2. APEX_REST_PUBLIC_USER - Аккаунт использованный при вызове определений сервиса сохраненных в Oracle APEX.
Включить сетевые службы (Network Services)
По умолчанию, сетевые службы (Network Services) отключены в Oracle 11g или новее. Поэтому вам нужно использовать пакет DBMS_NETWORK_ACL_ADMIN чтобы дать авторизацию доступа к любому хосту для user database APEX_050000.
Вам нужно сделать запрос для просмотра пользователей APEX в базе данных:
Select Username from All_Users where username like 'APEX%';
Запустить команду для авторизации к любому хосту для user database APEX_050000.
Declare
   Acl_Path Varchar2(4000);
Begin
   -- Look for the ACL currently assigned to '*' and give APEX_050000
   -- the "connect" privilege if APEX_050000 does not have the privilege yet.
   Select Acl
   Into   Acl_Path
   From   Dba_Network_Acls
   Where  Host = '*'
   And    Lower_Port Is Null
   And    Upper_Port Is Null;
   If Dbms_Network_Acl_Admin.Check_Privilege(Acl_Path
                                            ,'APEX_050000'
                                            ,'connect') Is Null Then
      Dbms_Network_Acl_Admin.Add_Privilege(Acl_Path
                                          ,'APEX_050000'
                                          ,True
                                          ,'connect');
   End If;
Exception
   -- When no ACL has been assigned to '*'.
   When No_Data_Found Then
      Dbms_Network_Acl_Admin.Create_Acl('power_users.xml'
                                       ,'ACL that lets power users to connect to everywhere'
                                       ,'APEX_050000'
                                       ,True
                                       ,'connect');
      Dbms_Network_Acl_Admin.Assign_Acl('power_users.xml'
                                       ,'*');
End;
/

Commit;
Дать авторизацию соединения пользователю базы данных APEX_050000 (Oracle 11g):
Declare
   Acl_Path Varchar2(4000);
Begin
   -- Look for the ACL currently assigned to '*' and give APEX_050000
   -- the "connect" privilege if APEX_050000
   --does not have the privilege yet.
   Select Acl
   Into   Acl_Path
   From   Dba_Network_Acls
   Where  Host = '*'
   And    Lower_Port Is Null
   And    Upper_Port Is Null;
   If Dbms_Network_Acl_Admin.Check_Privilege(Acl_Path
                                            ,'APEX_050000'
                                            ,'connect') Is Null Then
      Dbms_Network_Acl_Admin.Add_Privilege(Acl_Path
                                          ,'APEX_050000'
                                          ,True
                                          ,'connect');
   End If;
Exception
   -- When no ACL has been assigned to '*'.
   When No_Data_Found Then
      Dbms_Network_Acl_Admin.Create_Acl('power_users.xml'
                                       ,'ACL that lets power users to connect to everywhere'
                                       ,'APEX_050000'
                                       ,True
                                       ,'connect');
      Dbms_Network_Acl_Admin.Assign_Acl('power_users.xml'
                                       ,'*');
End;
/

Commit;
Дать авторизацию соединения пользователю базы данных APEX_050000 (Oracle 12c):
Процедуры CREATE_ACL, ASSIGN_ACL, ADD_PRIVILEGE и CHECK_PRIVILEGE в пакете DBMS_NETWORK_ACL_ADMIN устарели в Oracle Database 12c. Oracle рекомендует вам использовать APPEND_HOST_ACE.
-- Sử dụng cho Oracle 12c.

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'APEX_050000',
                           principal_type => xs_acl.ptype_db));
END;
/

5. Развертывание ORDS

Примечание: Удостоверьтесь что вы установили Java версию 7 или новее. И объявили переменную среды PATH в папку bin Java. Вы можете посмотреть инструкцию установки Java по ссылке:
Добавить в конец PATH, ссылку к папке bin в Java.
;C:\DevPrograms\Java\jdk1.8.0_65\bin
Извлечь файл ords-**.zip который вы скачали в определнную папку.
Вы можете увидеть в извлеченной папке есть файл ords.war
Копировать папку images в apex в папку ords:
Теперь мы установим Oracle ORDS независимо (Не нужно развертывать на WebLogic, Tomcat или на другом Web server)
CD к папке ords:
Далее войдите в sqlplus с авторизацией sysdba.
Ваш Oracle APEX работает на Oracle XML DB HTTP Server, вы должны отключить его командой:
--  Disable Oracle APEX on Oracle XML DB HTTP Server.

EXEC DBMS_XDB.SETHTTPPORT(0);


-- Note: You can enable it with command:

EXEC DBMS_XDB.SETHTTPPORT(8080)
Выйти из sqlplus. И CD в папку ords:
Запуск команды:
# Run command:

java -jar ords.war

# Or:

java -jar ords.war install
Ввести адрес компьютера содержащего базу данных (По умолчанию это localhost):
Порт базы данных (По умолчанию 1521):
Ввести Service Name или SID базы данных:
Ввести пароль для пользователя базы данных: ORDS_PUBLIC_USER
Sqlplus требует еще раз ввести информацию пользователя базы данных с авторизацией sysdba. (Ввести sys и потом ввести password).
SQLPlus спрашивает используете ли вы Oracle APEX, если да, введите 1, введите 1 и enter чтобы продолжить:
Ввести пароль для пользователя который будет создан APEX_PUBLIC_USER:
Далее введите 1 чтобы определить password для созданных 2 пользователей базы данных (APEX_LISTENER, APEX_REST_PUBLIC_USER).
Выбрать 1 для независимого развертывания ORDS (Standalone).
Вы успешно конфигурировали ORDS. Закрыть окно CMD.
Запуск ORDS
Примечание: Вы можете запустить команду ниже, чтобы посмотреть способ использования:
java -jar ords.war help standalone
CD в папку ORDS и запустить команду:
java -jar ords.war standalone --port 8080 --apex-images C:/DevPrograms/ords/images
В первый раз, он спросит где расположить файл установки:
ORDS успешно развернут.
Примечание: Если вы получили ошибку:
Разблокируйте для пользователя APEX_PUBLIC_USER
Column username format a25;
Column account_status format a25;

-- Query unlocked APEX user.

select username,account_status from dba_users
 where lock_date is not null
 and username like 'APEX%';
Alter user APEX_PUBLIC_USER account unlock;
Файлы конфигурации созданы после того, как вы развернули ORDS:
Не закрывайте окно выше, вы можете использовать APEX с новой ссылкой: