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

View more categories:

1- Введение

Статья основана на:
  • Oracle 11g, 12c

  • ORDS 3.x

2- Что такое Oracle REST Data Services?

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

3- Интеракция между 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

4- Download Oracle ORDS

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

5- Конфигурация 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;
/

6- Развертывание 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 с новой ссылкой:

View more categories: