It here I present TWO different ways of integrating Oracle APEX and Oracle EBS:
The way suggested and supported by Oracle
The APEX2EBS framework developed by me
I will go through the details of these 2 methods:
Installation and setup
Architectural, technical, and functional differences
Pro and cons between these 2 methods
Note
Oracle knowledge article KB290245 (https://support.oracle.com/support/?kmContentId=3060058) provide this recommended architecture of integrating Oracle EBS 12.2 and APEX.
This integration requires that Oracle APEX is installed to the same EBS database. The OA Framework page components for setting up the linkage (through a Form Function) need to access the APEX tables to locally.
Install Oracle APEX on the same database used for EBS. In here I use a new Vision demo instance (details). Here is the specification:
EBS 12.2.15 Vision Demo instance, Database 19c (Windows 2019 Server)
APEX 24.2
ORDS 25.4
Download the APEX zip file from https://www.oracle.com/tools/downloads/apex-downloads.html
Delete the original APEX files shipped with Oracle database installation (%ORACLE_HOME%\apex). Unzip the archive to this folder.
Download the ORDS zip file from https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads.html
Create a new folder C:\oracle\[SID]\ords, and unzip the ORDS archive to this folder.
Install the APEX application
cd %ORACLE_HOME%\apexsqlplus / as sysdba @apexins.sql SYSAUX SYSAUX TEMP /i/
Reset APEX admin password to Welcome!23:
SYS> @apxchpwd.sql...set_appun.sql================================================================================This script can be used to change the password of an Oracle APEXinstance administrator. If the user does not yet exist, a user record will becreated.================================================================================Enter the administrator's username [ADMIN]User "ADMIN" does not yet exist and will be created.Enter ADMIN's email [ADMIN]Enter ADMIN's password [Welcome!23]Created instance administrator ADMIN.
Unlock APEX_PUBLIC_USER user account and reset it's password (ORDS needs this user account):
SQL> alter user APEX_PUBLIC_USER account unlock;SQL> alter user APEX_PUBLIC_USER identified by APEX_PUBLIC_USER;
Download Oracle JDK17 from https://download.oracle.com/java/17/archive/jdk-17.0.12_windows-x64_bin.zip
Unzip the file to C:\oracle\[SID]\ords. Rename the folder to jdk17.
Change the database init parameter compatible from 12.1.0 to 12.2.0. It is required to support longer database object names.
ALTER SYSTEM SET COMPATIBLE = '12.2.0' SCOPE=SPFILE;
Start a new command prompt under database profile, and setup the ORDS:
C:\oracle\[SID]\ords\bin>set JAVA_HOME=C:\oracle\[SID]\ords\jdk17C:\oracle\[SID]\ords\bin>set PATH=%JAVA_HOME%\bin;%PATH%C:\oracle\[SID]\ords\bin>ords.exe installORDS: Release 25.4 Production on Fri Jan 30 05:42:33 2026Copyright (c) 2010, 2026, Oracle.Configuration:C:\oracle\[SID]\ords\binThe configuration folder C:\oracle\[SID]\ords\bin does not contain any configuration files.Oracle REST Data Services - Interactive InstallEnter a number to select the TNS net service name to use from C:\oracle\[SID]\db19c\home\network\admin\VIS_demo\tnsnames.ora or specify the database connection[1] EXTPROC_CONNECTION_DATA SID=PLSExtProc[2] VIS SERVICE_NAME=VIS[S] Specify the database connectionChoose [1]: 2Provide database user name with administrator privileges.Enter the administrator username: SYSEnter the database password for SYS AS SYSDBA: (system password)
Set the password for ORDS_PUBLIC_USER user manually:
Retrieving information.ORDS is not installed in the database. ORDS installation is required.Enter a number to update the value or select option A to Accept and Continue[1] Connection Type: TNS[2] TNS Connection: TNS_NAME=VIS TNS_FOLDER=C:\oracle\[SID]\db19c\home\network\admin\VIS_demoAdministrator User: SYS AS SYSDBA[3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <generate>[4] ORDS runtime user and schema tablespaces: Default: SYSAUX Temporary TEMP[5] Additional Feature: Database Actions[6] Configure and start ORDS in Standalone Mode: Yes[7] Protocol: HTTP[8] HTTP Port: 8080[9] APEX static resources location: null[A] Accept and Continue - Create configuration and Install ORDS in the database[Q] Quit - Do not proceed. No changesChoose [A]: 3Enter your choice for the runtime user password (ORDS_PUBLIC_USER)[S] Specify your own password[G] Generate password[C] Cancel - No ChangesChoose [G]: SEnter the database password for ORDS_PUBLIC_USER: (ORDS_PUBLIC_USER)Confirm password: (ORDS_PUBLIC_USER)
Similarly, change the APEX static resources to point to %ORACLE_HOME%\apex\images:
Enter a number to update the value or select option A to Accept and Continue[1] Connection Type: TNS[2] TNS Connection: TNS_NAME=[SID] TNS_FOLDER=C:\oracle\[SID]\db19c\home\network\admin\[SID]_[host]Administrator User: SYS AS SYSDBA[3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <specified password>[4] ORDS runtime user and schema tablespaces: Default: SYSAUX Temporary TEMP[5] Additional Feature: Database Actions[6] Configure and start ORDS in Standalone Mode: Yes[7] Protocol: HTTP[8] HTTP Port: 8080[9] APEX static resources location: null[A] Accept and Continue - Create configuration and Install ORDS in the database[Q] Quit - Do not proceed. No changesChoose [A]: 9Enter the APEX static resources location: C:\oracle\[SID]\db19c\home\apex\imagesEnter a number to update the value or select option A to Accept and Continue[1] Connection Type: TNS[2] TNS Connection: TNS_NAME=VIS TNS_FOLDER=C:\oracle\[SID]\db19c\home\network\admin\VIS_demoAdministrator User: SYS AS SYSDBA[3] Database password for ORDS runtime user (ORDS_PUBLIC_USER): <specified password>[4] ORDS runtime user and schema tablespaces: Default: SYSAUX Temporary TEMP[5] Additional Feature: Database Actions[6] Configure and start ORDS in Standalone Mode: Yes[7] Protocol: HTTP[8] HTTP Port: 8080[9] APEX static resources location: C:\oracle\[SID]\db19c\home\apex\images[A] Accept and Continue - Create configuration and Install ORDS in the database[Q] Quit - Do not proceed. No changesChoose [A]: A......
Choose A to start the installation. When it is completed, the Jetty server is started:
2026-01-30T15:19:44.565Z INFO Oracle REST Data Services initializedOracle REST Data Services version : 25.4.0.r3641739Oracle REST Data Services server info: jetty/12.0.25Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286 mixed mode, sharing)
Press CLTR-C to stop the server and back to command prompt.
Edit the file C:\oracle\[SID]\ords\bin\default\pool.xml. Remove (or comment) the value for key security.requestValidationFunction :
<properties><comment>Saved on Fri Jan 30 15:19:24 UTC 2026</comment><entry key="db.connectionType">tns</entry><entry key="db.tnsAliasName">VIS</entry><entry key="db.tnsDirectory">C:\oracle\[SID]\db19c\home\network\admin\VIS_demo</entry><entry key="db.username">ORDS_PUBLIC_USER</entry><entry key="feature.sdw">true</entry><entry key="plsql.gateway.mode">proxied</entry><entry key="restEnabledSql.active">true</entry><!-- <entry key="security.requestValidationFunction">ords_util.authorize_plsql_gateway</entry> --></properties>Start the server again:
C:\oracle\[SID]\ords\bin>ords.exe serveORDS: Release 25.4 Production on Fri Jan 30 16:27:28 2026Copyright (c) 2010, 2026, Oracle.Configuration:C:\oracle\[SID]\ords\bin2026-01-30T16:27:28.367Z INFO HTTP and HTTP/2 cleartext listening on host: 0.0.0.0 port: 80802026-01-30T16:27:28.399Z INFO Disabling document root because the specified folder does not exist: C:\oracle\[SID]\ords\bin\global\doc_root2026-01-30T16:27:28.400Z INFO Default forwarding from / to contextRoot configured.2026-01-30T16:27:31.787Z INFO Configuration properties for: |default|lo|...2026-01-30T16:27:32.258Z INFO Oracle REST Data Services initializedOracle REST Data Services version : 25.4.0.r3641739Oracle REST Data Services server info: jetty/12.0.25Oracle REST Data Services java info: Java HotSpot(TM) 64-Bit Server VM (build 17.0.12+8-LTS-286 mixed mode, sharing)
Open http://localhost:8080/ to land the portal page. Select "Oracle APEX" Go button and log on to admin page
Workspace INTERNAL, Username ADMIN, Password Welcome!23
This Vision Demo instance is running with SSL enabled, so this ORDS service should also use SSL.
The cwallet.sso wallet used in this Vision instance is a local auto-login wallet, so it does not contain password-protected private key. In ORDS (jetty server), we cannot use the certificate file without the private key file. In this case, we need to go through the process: create a private key, generate a certificate request, and then sign this request by CA to create a certificate. Please refer this document for the details of these operations.
So finally you have the private ket and signed certificate files in C:\oracle\[SID]\cert:
Private key file ords-private.pem (in unencrypted PKCS8 text format)
Signed certificate file ords-cert.pem (complete certificate chain)
Create a new folder (C:\oracle\[SID]\ords\log) store log file. Add these lines in C:\oracle\[SID]\ords\bin\global\settings.xml:
<entry key="standalone.https.cert">C:\oracle\[SID]\cert\ords-cert.pem</entry><entry key="standalone.https.cert.key">C:\oracle\[SID]\cert\ords-private.pem</entry><entry key="standalone.https.port">8443</entry><entry key="standalone.access.log">C:\oracle\[SID]\ords\log</entry>
Create a batch file to start the ORDS service:
SET JAVA_HOME=C:\oracle\VIS\ords\jdk17cd C:\oracle\VIS\ords\binstart /min ords.exe serve --secure --port 8443
When it runs, a new minimized command prompt is created and ORDS is running in it.
Now the URL becomes https://[hostname]:8443. Th URL must use the hostname (FQDN), cannot use localhost or 127.0.0.1.
© 2026 by Christopher Ho. All Rights Reserved