APEX 3.0 via Embedded PL/SQL Gateway
I managed to get APEX 3.0 working on Oracle 10.2.0.1 using the embedded PL/SQL gateway (i.e. without installing Apache), contrary to the advice given here. I used apex_epg_config instead of apex_epg_config11. For it to work, however, I had to remove some security on XDB so it’s not a recommended option. This involved modifying my xdbconfig.xml to allow anonymous access to XDB using this:
DECLARE configxml SYS.XMLType; BEGIN SELECT INSERTCHILDXML(xdburitype('/xdbconfig.xml').getXML(), '/xdbconfig/sysconfig/protocolconfig/httpconfig', 'allow-repository-anonymous-access', XMLType('true'), 'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"') INTO configxml FROM DUAL; DBMS_XDB.cfg_update(configxml); END; /
Now for some general tips:
Tip #1. List Your DAD Authorizations
As described so well in the excellent article DBMS_EPG – The Embedded PL/SQL Gateway in Oracle 10g Database Release 2, you can authorize and deauthorize a DAD using the DBMS_EPG package. It should be noted that dropping a DAD will not remove the authorizations as well, so you need to deauthorize it as well. To find out what authorizations have been made on your database, you can query the DBA_EPG_DAD_AUTHORIZATION view, e.g.:
SQL> select * from dba_epg_dad_authorization; DAD_NAME USERNAME -------- --------- APEX ANONYMOUS 1 row selected.
There’s also a USER_EPG_DAD_AUTHORIZATION view which shows the DAD_NAME for authorized DADs for the current user.
Tip #2. List Your DADS
You can find out what DADs have been set up on your instance using the DBMS_EPG package. There is a bug, however, that causes dbms_epg.get_all_dad_attributes to return nothing, so this script gets each attribute separately with dbms_epg.get_dad_attribute. The script lists all the DADS, their mappings and their attributes.
set serveroutput on PROMPT list all dads declare blank dbms_epg.varchar2_table; dad_names dbms_epg.varchar2_table; paths dbms_epg.varchar2_table; procedure show_dad_attribute(dad in varchar2, attr in varchar2) is val varchar2(4000); begin val := dbms_epg.get_dad_attribute(dad, attr); if val is not null then dbms_output.put_line('... ' || attr || '=' || val); end if; end; begin dbms_epg.get_dad_list(dad_names); if dad_names.count > 0 then for i in dad_names.first..dad_names.last loop dbms_output.put_line(dad_names(i)); paths := blank; dbms_epg.get_all_dad_mappings(dad_names(i), paths); if paths.count > 0 then for j in paths.first..paths.last loop dbms_output.put_line('... path=' || paths(j)); end loop; else dbms_output.put_line('... No mappings found'); end if; show_dad_attribute(dad_names(i),'after-procedure'); show_dad_attribute(dad_names(i),'always-describe-procedure'); show_dad_attribute(dad_names(i),'authentication-mode'); show_dad_attribute(dad_names(i),'before-procedure'); show_dad_attribute(dad_names(i),'bind-bucket-lengths'); show_dad_attribute(dad_names(i),'bind-bucket-widths'); show_dad_attribute(dad_names(i),'cgi-environment-list'); show_dad_attribute(dad_names(i),'compatibility-mode'); show_dad_attribute(dad_names(i),'database-username'); show_dad_attribute(dad_names(i),'default-page'); show_dad_attribute(dad_names(i),'document-path'); show_dad_attribute(dad_names(i),'document-procedure'); show_dad_attribute(dad_names(i),'document-table-name'); show_dad_attribute(dad_names(i),'error-style'); show_dad_attribute(dad_names(i),'exclusion-list'); show_dad_attribute(dad_names(i),'fetch-buffer-size'); show_dad_attribute(dad_names(i),'input-filter-enable'); show_dad_attribute(dad_names(i),'info-logging'); show_dad_attribute(dad_names(i),'owa-debug-enable'); show_dad_attribute(dad_names(i),'max-requests-per-session'); show_dad_attribute(dad_names(i),'nls-language'); show_dad_attribute(dad_names(i),'path-alias'); show_dad_attribute(dad_names(i),'path-alias-procedure'); show_dad_attribute(dad_names(i),'request-validation-function'); show_dad_attribute(dad_names(i),'session-cookie-name'); show_dad_attribute(dad_names(i),'session-state-management'); show_dad_attribute(dad_names(i),'transfer-mode'); show_dad_attribute(dad_names(i),'upload-as-long-raw'); end loop; else dbms_output.put_line('No dads found'); end if; end; /
When the above script is run, you’ll get something like this:
APEX ... path=/apex/* ... authentication-mode=Basic ... database-username=ANONYMOUS ... default-page=apex ... document-path=docs ... document-procedure=wwv_flow_file_mgr.process_download ... document-table-name=wwv_flow_file_objects$ ... nls-language=american_america.al32utf8 ... request-validation-function=wwv_flow_epg_include_modules.authorize