A complete on-premises Oracle APEX stack has four layers: the Oracle Database that stores your data and the APEX engine, Oracle APEX itself, Oracle REST Data Services (ORDS) which serves APEX pages and REST APIs over HTTP, and, for pixel-perfect PDF invoices and reports, a JasperReports server. This guide walks through setting up all four on a single Windows server, which is the most common setup we see in small and mid-sized businesses running ERP or POS systems.
Before you start: versions and installer prompts change between releases. Always read the README and release notes that ship with each download. This guide reflects the requirements published for APEX 26.1 at the time of writing.
1. Check the version requirements
Component
Requirement for this stack
Oracle Database
19c with Release Update 19.18 or later (or Oracle AI Database 26ai 23.26.0 or later)
Oracle APEX
26.1
ORDS
26.1.1 or later
Java
A supported JDK for your ORDS release (check the ORDS release notes)
JasperReportsIntegration
Deployed on Apache Tomcat with a compatible Java version
Check your database version and Release Update first. If you are below 19.18, apply the latest 19c Release Update before installing APEX 26.1.
SELECT banner_full FROM v$version;
2. Plan the server layout
Keeping software in clear folders makes upgrades and troubleshooting much easier later:
C:\apex – unzipped APEX 26.1 files, including C:\apex\images
C:\ords – ORDS program files
C:\ords\config – ORDS configuration (back this folder up)
C:\tomcat – Apache Tomcat for JasperReports
C:\jri – JasperReports configuration, reports and logs
Decide your ports too. A common choice is 8080 for ORDS and 8090 for Tomcat, so the two never clash.
3. Prepare the database
On 19c, install APEX into a pluggable database (PDB) rather than the root container. Connect as SYSDBA and switch to your PDB:
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = ORCLPDB;
SELECT tablespace_name FROM dba_tablespaces;
Make sure the SYSAUX tablespace has free space; the APEX installation adds several hundred megabytes of objects.
4. Install Oracle APEX 26.1
Unzip the APEX download to C:\ so you get C:\apex. Open a command prompt in that folder so SQL*Plus can find the install scripts, then run the full development installation:
cd C:\apex
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = ORCLPDB;
@apexins.sql SYSAUX SYSAUX TEMP /i/
The four parameters are the APEX tablespace, the files tablespace, the temporary tablespace and the virtual images path. The installation takes some time; let it finish and review the log for errors.
Set the instance administrator password
@apxchpwd.sql
Enter a username (usually ADMIN), email and a strong password. You will use this account to sign in to APEX Administration Services.
Unlock the public user
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY "Use_A_Strong_Password_1";
To stop this account from expiring and breaking your applications, consider assigning it a profile with an unlimited password lifetime.
5. Install and configure ORDS
Install a supported JDK, unzip ORDS to C:\ords, and add C:\ords\bin to the system PATH. Then run the installer:
ords --config C:\ords\config install
The interactive installer asks for:
Database connection: host name, port (usually 1521) and the PDB service name
An administrator account to install ORDS (for example SYS AS SYSDBA)
Which features to enable – choose to enable Oracle APEX and REST-enabled SQL as needed
The standalone HTTP port (for example 8080)
The location of the APEX static files: C:\apex\images
Start ORDS and test
ords --config C:\ords\config serve
Open http://localhost:8080/ords/ in a browser. You should see the APEX sign-in page. Sign in to the INTERNAL workspace with the ADMIN account to reach Administration Services, then create your first workspace.
Run ORDS as a Windows service
A command window that someone closes by mistake will take the whole application down. For production, run ORDS under a Windows service wrapper or another supervised method so it starts automatically after a reboot, and run it under a dedicated service account.
6. Install JasperReports for PDF reporting
APEX has built-in printing, but many ERP and POS projects need pixel-perfect invoices, delivery challans and statements designed in Jaspersoft Studio. The open-source JasperReportsIntegration (JRI) project connects APEX to a JasperReports engine running in Tomcat.
6.1 Install Tomcat
Install a Java version and Tomcat version supported by the JRI release you download (check its release notes), and set Tomcat’s HTTP port to 8090 in conf\server.xml.
6.2 Deploy the JRI web application
Download the JRI binary release and unzip it.
Copy webapp\jri.war into C:\tomcat\webapps.
Create C:\jri with conf, reports and logs subfolders, and copy the sample application.properties into conf.
Set the system environment variable OC_JASPER_CONFIG_HOME=C:\jri so JRI can find its configuration.
Restart Tomcat.
6.3 Configure the data source
Edit C:\jri\conf\application.properties and point the default data source at the schema that owns your report data:
Use the encryption script included in the JRI bin folder so the password is not stored in plain text.
6.4 Install the database objects
From the JRI sql folder:
As SYS in your PDB, run sys_install.sql and pass your application schema name.
As SYS, run sys_install_acl_12_and_above.sql to allow the schema to make HTTP calls to the Tomcat server.
Connect as the application schema and run user_install.sql.
6.5 Test
Open http://localhost:8090/jri. The JRI home page includes a test report. Then install the test APEX application from the JRI apex folder to confirm APEX can call the report server and return a PDF.
Save your .jasper or .jrxml report files in C:\jri\reports and call them from APEX through the PL/SQL package installed by user_install.sql, passing the report name, output format and parameters such as the invoice number.
7. Secure the stack
Do not expose Tomcat/JRI to the internet. Only the database server should call it; block port 8090 on the firewall.
Put ORDS behind HTTPS – either a reverse proxy (IIS, Nginx) with a certificate, or ORDS configured with a certificate directly.
Change all default and installer passwords and store them securely.
Restrict the database listener port to the servers that need it.
Back up the database with RMAN and also back up C:\ords\config and C:\jri. See our Oracle 19c backup guide.
8. Troubleshooting
404 or “page not found” at /ords/ – ORDS is not running, or the APEX feature was not enabled during installation. Check the ORDS console output.
APEX pages load without styling – the images path is wrong. Confirm ORDS points to C:\apex\images and that it matches the version you installed.
“The database user for the connection pool is locked” – unlock APEX_PUBLIC_USER or the ORDS runtime users and reset their passwords.
ORA-24247 when printing a report – the network ACL for the application schema is missing or points to the wrong host/port.
JRI cannot connect to the database – check the JDBC URL uses the PDB service name, not the root container SID.
Installation checklist
Database on 19c RU 19.18+ (or 26ai)
APEX 26.1 installed in the PDB; admin password set
APEX_PUBLIC_USER unlocked with a non-expiring password
ORDS 26.1.1+ installed, APEX enabled, images path set
ORDS running as a service
Tomcat + JRI deployed, data source configured, DB scripts run
Test report printed from APEX
HTTPS, firewall rules and backups in place
Need this stack installed for you?
AbairTech installs and upgrades Oracle Database, APEX, ORDS and JasperReports for ERP, POS and business applications. Explore our live demos or discuss your server setup.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.