Application Express

PreviousNext

Architecture

Application Express utilizes a Web browser on the user's computer communicating through a Web listener to the Oracle Database. No client software, other than a browser, is required for development, deployment or runtime. Application Express pages are rendered using HTML within the browser. Page requests and submissions are sent to the Application Express engine within the Oracle Database.


Metadata Driven

Oracle Application Express is an integrated feature of the Oracle database. The essence of Oracle Application Express is over 300 tables and 200 PL/SQL objects containing more then 300,000 lines of code. The Oracle Application Express engine renders pages dynamically in real time from the data contained within the Oracle Application Express metadata repository.

When you create or extend an application, Oracle Application Express creates or modifies the metadata stored in its database tables. When the application is run, the Oracle Application Express engine then reads the metadata and displays the requested page or processes page submissions.

To provide stateful behavior within an application, Oracle Application Express transparently manages session state in the database. Application developers can get and set session state using simple substitutions as well as standard SQL bind variable syntax.

Web Listener

Oracle Application Express Listener

The Oracle Application Express Listener is a Java based alternative to Apache mod_plsql. The Oracle Application Express listener is supported to run on Oracle WebLogic Server and OC4J.

Apache MOD_PLSQL

One way to access the Oracle Application Express engine is to configure the Oracle HTTP Server (Apache) containing the mod_plsql plug-in . The plugin functions as communication broker between the Web server and the Oracle Application Express objects in the Oracle database. This maps browser requests into database stored procedure calls. Images are stored on the file system and served by Apache. Using Apache allows the web listener to be placed on the same physical machine as the database, or on a separate physical machine.

Embedded PL/SQL Gateway

The Embedded PL/SQL Gateway (EPG) runs in the XML DB HTTP server in the Oracle database and includes the core features of mod_plsql, but does not require the Oracle HTTP Server powered by Apache. The EPG stores and serves all files, including images, CSS, and JavaScript from the database. The EPG is convenient for smaller configurations. The EPG is not recommended for larger scale production use cases or Internet facing applications.

Multi Tenant

Oracle Application Express enables a single database to host large numbers of applications and users. Developers work in a dedicated work area called a workspace to develop applications against one or more schemas. This flexible architecture enables a single database instance to act as a "Platform as a Service" (PaaS), providing a hosted Intranet capability within the organization.

Reporting

Oracle BI Publisher

If you have Oracle BI Publisher then Oracle Application Express can be configured to provide "high-fidelity" printing capabilities. Within Oracle Application Express, developers can declaratively define multiple queries, including bind variables, to form the basis of report layouts in Oracle BI Publisher and then integrate these reports into their Oracle Application Express applications.

Other Report Servers

Your report server can be Oracle BI Publisher, OC4J with Apache FOP or another standard XSL-FO processing engine.

Configuring a report server within Application Express enables you to download various report formats, such as PDF, from interactive report regions.

Interoperability

Web Services Support

The Application Express Web services engine supports loosely defined types and document style Web services. This makes it possible to support JDeveloper created Web services and Oracle BPEL synchronous Web services. It is possible to interact with Web services over SSL (HTTPS) as well as Web services that require basic authentication. There is also support for manually creating a Web service reference if the Application Express engine cannot correctly parse the WSDL document for a particular service. You simply supply the SOAP request envelope and the URL endpoint among other information.

Application Express provides wizards to simplify the task of defining RESTful Web Services. Public regions can also be defined to emit REST Web Services.

Database Integration

Oracle Application Express is tightly integrated with the Oracle database.

SQL

Natively write SQL queries, and DML operations. Use bind variable syntax to access bind variables.

select ename, job from emp where empno = :P2_EMPNO
PL/SQL

Natively use PL/SQL as region source, in page processing, in application-level processes, and in component condition text. Reference session state using bind variable syntax. Set session state using bind variable syntax.

Calls to Oracle Database packages, procedures and functions can also be incorporated into region source.

begin
   htp.p('HELLO WORLD'); 
end;
Oracle Text

Perform full text search of documents using Oracle Text contains clause.

select * from emp where contains(resume, :P1_SEARCH, 1) > 0
XML DB

Query data stored as XML, access data in XML datatypes, perform xpath queries that leverage the capabilities of Oracle XML DB.

select XMLCast( XMLQuery ('$p/PurchaseOrder/Reference/text()' 
passing object_value as "p" returning content) as VARCHAR2(32)) "Reference" 
from purchaseorder 
where XMLExists('$p/PurchaseOrder[User/text()="SBELL"]' 
passing object_value as "p")
Oracle Real Application Clusters

The high availability and scalability offered by Oracle Real Application Clusters (RAC) enables businesses to ensure high returns on their IT investments. Combining Oracle Application Express with Oracle RAC enables users to quickly build, modify and deploy their applications with continued access to mission critical data while drawing benefit from the robust and transparent infrastructure provided by Oracle RAC.

Oracle Spatial

Integrate spatial queries and spatial data using Oracle Application Express.

declare
   l_thumb    blob;
begin
   -- resize image
   select blob_content into l_thumb from mytable where id = :ID
   ordsys.ordimage.process(l_thumb, 'maxScale=64 64');
end;
Multimedia

Oracle Multimedia is a feature of Oracle Database Standard Edition and Enterprise Edition. It provides support for the most popular multimedia formats with built-in metadata extraction and basic image processing. Oracle multimedia also provides comprehensive support for DICOM content. Multimedia can be accessed using PL/SQL API's from within Oracle Application Express applications.

Analytic Functions

Write SQL that uses analytic functions to integrate powerful lag, lead and other analytic functions.

Internal Server Error

500 - Internal Server Error

Request Path passes syntax validation
Mapping request to database pool: PoolMap [_poolName=apex, _regex=null, _workspaceIdentifier=null, _failed=false, _lastUpdate=-1, _template=null, _type=REGEX]
Applied database connection info
Attempting to process with PL/SQL Gateway
==== Processing Request: ====
GET /apex/f?p=4600:28:6728383206469::NO:::
==== Headers in Request ====
accept: */*
user-agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
accept-encoding: gzip, br, zstd, deflate
referer: http://reconquistatramites.gov.ar:9095/apex/f?p=4600%3A28%3A4213100948574%3A%3ANO%3A%3A%3A
cookie: ORA_WWV_USER_63113586886954=ORA_WWV-GRnHej/7a9jn5qSOAKVWqdzm
host: reconquistatramites.gov.ar:9095
==== Cookies in Request ====
ORA_WWV_USER_63113586886954 =  ORA_WWV-GRnHej/7a9jn5qSOAKVWqdzm
request parameter: p=4600:28:6728383206469::NO:::
isValidRequest(), procedure name: 
Validating: f
*** Total number of arguments: 15
SID: 529
Parse: 0 ms
-----
begin 
 f(p=>?);
commit;
  end;
*** Total number of arguments: 15
{p=4600:28:6728383206469::NO:::}
p=4600:28:6728383206469::NO:::
p= 4600:28:6728383206469::NO:::
Exec: 49 ms
Got results length: 15415
==== Headers from Results ====
Setting Content-Type (Content-type): text/html; charset=utf-8
Adding X-Frame-Options: DENY
Adding X-DB-Content-length: 15415
Processed PL/SQL Gateway request

WebException [statusCode=500]
	at oracle.dbtools.rt.web.WebException.webException(WebException.java:343)
	at oracle.dbtools.rt.web.WebException.internalError(WebException.java:262)
	at oracle.dbtools.rt.web.WebErrorResponse.internalError(WebErrorResponse.java:101)
	at oracle.dbtools.rt.web.WebErrorResponse.error(WebErrorResponse.java:75)
	at oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:132)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$Itr.next(AbstractList.java:343)
	at java.util.Collections.sort(Collections.java:120)
	at oracle.dbtools.apex.statistics.Statistics.toString(Statistics.java:227)
	at oracle.dbtools.apex.statistics.Statistics.print(Statistics.java:174)
	at oracle.dbtools.apex.statistics.Statistics.finishRequest(Statistics.java:141)
	at oracle.dbtools.apex.ModApexContext.close(ModApexContext.java:324)
	at oracle.dbtools.common.util.Closeables$2.closeType(Closeables.java:155)
	at oracle.dbtools.common.util.Closeables$2.closeType(Closeables.java:149)
	at oracle.dbtools.common.util.Closeables$BaseCloser.close(Closeables.java:239)
	at oracle.dbtools.common.util.Closeables.close(Closeables.java:97)
	at oracle.dbtools.apex.ModApex.close(ModApex.java:176)
	at oracle.dbtools.apex.ModApex.doGet(ModApex.java:101)
	at oracle.dbtools.apex.ModApex.service(ModApex.java:301)
	at oracle.dbtools.rt.web.HttpEndpointBase.modApex(HttpEndpointBase.java:347)
	at oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:130)
	... 13 more