Thursday, May 04, 2017

APEX and ORDS up and running in....2 steps!

In January 2017, I had a meeting with Dr. Sriram Birudavolu from Hyderabad.  He got my attention when he said he would love to start a 1000-person APEX Meetup group in Hyderabad (gotta love aggressive goals!).  However, he spent much of December and January just trying to figure out how to get APEX installed, configured and running.  He won't profess to be an expert, but he's exactly the type of person we want to enable.  He was correct in saying that if a potential customer struggles to get APEX installed, we've already lost.

Recently, Gerald Venzl asked for some assistance in creating a Docker image for APEX.  His goal was to create an APEX Docker image on top of the base Oracle Database Docker image.  He knows a lot about Docker, but he won't claim to be an expert in APEX.  He wanted something that is scriptable and can result in APEX being installed, configured and up and running, along with ORDS, in as few steps as possible.  A "silent install", if you please. This was the final bit of motivation I needed for this blog post and video.

While the installation documentation is complete and detailed, it's also lengthy and sometimes confusing - especially for the new person.  Thus, I wanted to provide the simplest set of instructions with as few steps as possible to get APEX installed, configured and up and running, along with ORDS configured and up and running.  It can be done in two steps.  That's right, two.  While I explain the individual steps executed from SQL*Plus in detail below, you can combine all of these SQL commands into a single SQL script.  I prefer the name "hookmeup.sql".



  1. Download and unzip APEX http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html
  2. cd to apex directory
  3. Start SQL*Plus and ensure you are connecting to your PDB and not to the "root" of the container database (APEX should not be installed at all):
    sqlplus sys/your_password@localhost/your_pdb as sysdba @apexins sysaux sysaux temp /i/
    
  4. Unlock the APEX_PUBLIC_USER account and set the password:
    alter user apex_public_user identified by oracle account unlock;
    
  5. Create the APEX Instance Administration user and set the password:
    begin
        apex_util.set_security_group_id( 10 );
        apex_util.create_user(
            p_user_name => 'ADMIN',
            p_email_address => 'your@emailaddress.com',
            p_web_password => 'oracle',
            p_developer_privs => 'ADMIN' );
        apex_util.set_security_group_id( null );
        commit;
    end;
    /
    
  6. Run APEX REST configuration, and set the passwords of APEX_REST_PUBLIC_USER and APEX_LISTENER:
    @apex_rest_config_core.sql oracle oracle
    
  7. Create a network ACE for APEX (this is used when consuming Web services or sending outbound mail):
    declare
        l_acl_path varchar2(4000);
        l_apex_schema varchar2(100);
    begin
        for c1 in (select schema
                     from sys.dba_registry
                    where comp_id = 'APEX') loop
            l_apex_schema := c1.schema;
        end loop;
        sys.dbms_network_acl_admin.append_host_ace(
            host => '*',
            ace => xs$ace_type(privilege_list => xs$name_list('connect'),
            principal_name => l_apex_schema,
            principal_type => xs_acl.ptype_db));
        commit;
    end;
    /
    
  8. Exit SQL*Plus.  Download and unzip ORDS http://www.oracle.com/technetwork/developer-tools/rest-data-services/downloads/index.html
  9. cd to the directory where you unzipped ORDS (ensure that ords.war is in your current directory)
  10. Copy the following into the file params/ords_params.properties and replace the contents with the text below (Note:  this is the file ords_params.properties in the "params" subdirectory - a subdirectory of your current working directory):
    db.hostname=localhost
    db.port=1521
    # CUSTOMIZE db.servicename
    db.servicename=your_pdb
    db.username=APEX_PUBLIC_USER
    db.password=oracle
    migrate.apex.rest=false
    plsql.gateway.add=true
    rest.services.apex.add=true
    rest.services.ords.add=true
    schema.tablespace.default=SYSAUX
    schema.tablespace.temp=TEMP
    standalone.mode=TRUE
    standalone.http.port=8080
    standalone.use.https=false
    # CUSTOMIZE standalone.static.images to point to the directory 
    # containing the images directory of your APEX distribution
    standalone.static.images=/home/oracle/apex/images
    user.apex.listener.password=oracle
    user.apex.restpublic.password=oracle
    user.public.password=oracle
    user.tablespace.default=SYSAUX
    user.tablespace.temp=TEMP
    
  11. Configure and start ORDS in stand-alone mode.  You'll be prompted for the SYS username and SYS password:
    java -Dconfig.dir=/your_ords_configuration_directory -jar ords.war install simple --preserveParamFile
    

That's it!!  You should now be able to go to http://localhost:8080/ords/, and login with:

Workspace: internal
Username:  admin
Password:  oracle





IMPORTANT, PLEASE READ:

By no means is this a recommended or secure installation.  These are minimal instructions to get someone from zero to up and running easily and quickly.  In a production instance, I would create different tablespaces for APEX and ORDS, I would use far more complex and distinct passwords, I would use HTTPS and not HTTP, I would deploy ORDS on a physically distinct server, and more.

The above steps were tested with Oracle Application Express 5.1.1.00.08, Oracle REST Data Services 3.0.9, and Oracle Database 12.2.0.1 running on Oracle Linux.


Wednesday, May 03, 2017

End users still on IE8? Upgrade them before upgrading to Application Express 5.1 or later

If you have end users of your Application Express (APEX) applications still using Internet Explorer 8, you should upgrade their browsers before upgrading to Oracle Application Express 5.1 or later.

The documented general browser compatibility for Oracle Application Express is N-1, where N is the latest production version of a browser, and N-1 is the major production version prior to that.  At the time of release of Application Express 5.1, Microsoft Edge was the current Microsoft browser and Internet Explorer 11 was the prior major version.

The Oracle Cloud Database Schema Service was recently upgraded to APEX 5.1.1, and a customer contacted me directly, saying that some of his end users who were still on IE8 couldn't even login to the application.  "We" (Anthony and John) reviewed these issues, but concluded that there really wasn't any practical way for us to resolve this for the customer.  We'll move heaven and earth to not impact a customer and avoid unplanned cost and work for them, but in this case, there simply wasn't anything we could do.

If you need a compelling reason to have your end users upgrade to a modern version of Internet Explorer, remember that Microsoft no longer supports or provides security patches for the older IE versions.