Oracle Forms Application Deployment Services (FADS)

Posted by Dirk Nachbar on Tuesday, September 05, 2017
Within the latest release of Oracle Forms & Reports 12.2.1.3.0 is a really cool new feature - Oracle Forms Application Deployment Services (FADS).

FADS allows you to package, deploy, configure and store complete Forms Applications. A normal Forms Application contains executables like fmx, mmx and plx, but also jar's, html's. With FADS you can package them all together, version them.

The installation is quite simple, but ONLY if you follow the Standard Naming convention from Oracle :-(, which means DONT CHANGE the name of the Admin Server within your WebLogic Domain for Oracle Forms & Reports 12.2.1.3.0, the Admin Server name MUST be AdminServer !!!!

The reason for that is, that within the configuration script $ORACLE_HOME/forms/fads/fads_config.py all references for the Admin Server are hardcoded (!!!) with the name AdminServer.
In case you are like me and want to change that hardcoded values (2 times in line 69 and 1 time in line 255) from the hardcoded name "AdminServer" to the name of your AdminServer and you execute the fads_config.py script, you will be happy at the first stage ... the deployment will complete successfully ... but afterwards you can not use FADS, looks like that within the deployed ear files are also hardcoded references to the Admin Server name "AdminServer"

Snippet from $DOMAIN_HOME/servers/<Your Admin Server Name>/logs/fads-diagnostic.log as you can see internally com.bea:Name=AdminServer,Type=Server is even hardcoded :-(

[2017-09-04T10:39:54.024+02:00] [FRTESTAdminServer] [ERROR] [] [oracle.forms.fads.bundles] [tid: 136] [userId: <anonymous>] [ecid: 98ca6478-f846-4dc7-8614-317c730df63b-00000062,0] [APP: fads] [partition-name: DOMAIN] [tenant-name: GLOBAL] [SRC_CLASS: oracle.forms.fads.deployment.engine.config.DeploymentServiceConfig] [SRC_METHOD: <init>] FRM-80020 error parsing Deployment Services configuration file {0}[[
javax.management.InstanceNotFoundException: com.bea:Name=AdminServer,Type=Server
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:643)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$17.run(WLSMBeanServerInterceptorBase.java:466)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.getAttribute(WLSMBeanServerInterceptorBase.java:464)
        at weblogic.management.mbeanservers.internal.JMXContextInterceptor.getAttribute(JMXContextInterceptor.java:157)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$17.run(WLSMBeanServerInterceptorBase.java:466)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.getAttribute(WLSMBeanServerInterceptorBase.java:464)
        at weblogic.management.mbeanservers.internal.SecurityInterceptor.getAttribute(SecurityInterceptor.java:294)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$17.run(WLSMBeanServerInterceptorBase.java:466)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.getAttribute(WLSMBeanServerInterceptorBase.java:464)
        at weblogic.management.mbeanservers.internal.MBeanCICInterceptor.getAttribute(MBeanCICInterceptor.java:139)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$17.run(WLSMBeanServerInterceptorBase.java:466)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.getAttribute(WLSMBeanServerInterceptorBase.java:464)
        at weblogic.management.mbeanservers.internal.PartitionJMXInterceptor.getAttribute(PartitionJMXInterceptor.java:307)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase$17.run(WLSMBeanServerInterceptorBase.java:466)
        at java.security.AccessController.doPrivileged(Native Method)
        at weblogic.management.jmx.mbeanserver.WLSMBeanServerInterceptorBase.getAttribute(WLSMBeanServerInterceptorBase.java:464)
        at weblogic.management.mbeanservers.internal.CallerPartitionContextInterceptor.getAttribute(CallerPartitionContextInterceptor.java:177)

In case you have environments with a Non-Oracle-Standard-Naming-Convention for your Admin Server, sorry, no chance currently to use FADS ...

In case you are Oracle-Standard-Naming-Convention conform, enjoy the new FADS :-)

Before you start, you have to consider some important points for your WebLogic Domain creation.
Make sure that the required Repository is created with following components:


And make sure that on your "NOT-RENAMED" Admin Server the Server Group is WSMPM-MAN-SVR is selected.



As I pointed out already in my previous blogpost "Oracle Forms & Reports 12.2.1.3.0 - First Look", at first you need to update the SQL Developer binaries, which are delivered in a 3.2 version and you will need SQL Developer 4.2 or higher. Simply download the latest version of SQL Developer, currently 17.2 from here http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html, take the "Other Platforms" version and place the zip file in your $ORACLE_HOME.

# Connect to your server as oracle user
mv sqldeveloper sqldeveloper_org
unzip sqldeveloper-17.2.0.188.1159-no-jre.zip

As next we can configure the FADS:

# Connect to your server as oracle user
# export your ORACLE_HOME variable
# for example, align with your settings
export ORACLE_HOME=/u00/app/oracle/product/fmw-fr-12.2.1.3.0
# now we are running the configuration for FADS
cd $ORACLE_HOME/forms/fads
../../oracle_common/common/bin/wlst.sh fads_config.py

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

----------------------------------------------------------------------
               fads configuration script                        
----------------------------------------------------------------------

Admin Server will be shutdown by running this script.
Do you want to continue? [Y/n] :y

You need to install Oracle SQL Developer 4.2 or higher under ORACLE_HOME.  Did you install SQL Developer 4.2? [Y/n] :y

SQL Developer 4.2 is installed under /u00/app/oracle/product/fmw-fr-12.2.1.3.0

connecting to WebLogic:

Please enter your username :weblogic
Please enter your password :
Please enter your server URL [t3://localhost:7001] :
Connecting to t3://localhost:7001 with userid weblogic ...
Successfully connected to Admin Server "AdminServer" that belongs to domain "demo_domain".

Warning: An insecure protocol was used to connect to the server. 
To ensure on-the-wire security, the SSL port or Admin port should be used instead.

obtaining Admin Server host/port information
Location changed to domainRuntime tree. This is a read-only tree 
with DomainMBean as the root MBean. 
For more help, use help('domainRuntime')

fadsui.ear:-> /u00/app/oracle/user_projects/applications/demo_domain/forms/fads/fads-ui.ear
webservices - http://localhost:7001/fads/apis (updated to http://192.168.56.119:7001/fads/apis)
Saving...
Totals {connections=1, rest=1, updated=1}
updating FADS OWSM policy
creating fads keystore
Already in Domain Runtime Tree

Keystore created

Already in Domain Runtime Tree

Key pair generated

Context is missing, therefore using current context "/WLS/demo_domain".

Successfully configured property "keystore.type".

Successfully configured property "location".

Successfully configured property "keystore.sig.csf.key".

Successfully configured property "keystore.enc.csf.key".
creating fads WSM policy set
Session started for modification.
Description defaulted to "Global policy attachments for RESTful Resource resources."
The policy set was created successfully in the session.
Policy reference "oracle/multi_token_rest_service_policy" added.
The configuration override property "propagate.identity.context" having value "true" has been added to the reference to policy with URI "oracle/multi_token_rest_service_policy".
The policy set restPolicySet is valid.
Creating policy set restPolicySet in repository.

Session committed successfully.
importing fads authorization policy
import fadsWSpolicy passed /u00/app/oracle/product/fmw-fr-12.2.1.3.0/forms/fads/policy/fadsWSMPolicy.zip
Importing "META-INF/policies/oracle/binding_authorization_template_fads"
Successfully imported "1" documents
Location changed to edit custom tree. This is a writable tree with No root.
For more help, use help('editCustom')

Starting an edit session ...
Started edit session, be sure to save and activate your changes once you are done.
Saving all your changes ...
Saved all your changes successfully.
Activating all your changes, this may take a while ... 
The edit lock associated with this edit session is released once the activation is completed.
Activation completed
shutting down the Admin Server
Shutting down the server AdminServer with force=false while connected to AdminServer ...
..Disconnected from weblogic server: AdminServer
shutting down the Admin Server
                                                    
.......done with fads post configuration............


        please start the Admin Server           
                                                    
----------------------------------------------------------------------

Exiting WebLogic Scripting Tool.


The next step is to startup your AdminServer and finally you can connect to your FADS WebFrontend with http://<servername>:<port>/fadsui for the Login use your WebLogic Admin User and the corresponding password



For the next steps consult the official Oracle Documentation here http://docs.oracle.com/middleware/12213/formsandreports/deploy-forms/oracle-forms-application-deployment-services-fads.htm#FSDEP-GUID-7859329F-D2A5-43A5-A2F4-02C7282C75C1 or wait for my next blogpost on "What you can do with FADS"

As short summing up, great tool the new Oracle Forms Application Deployment Services (FADS), but the implementation with hardcoded names for the Admin Server is a bit annoying ... I hope that Oracle will enhance FADS, so that you are free to use your own Admin Server names ... let's see :-)

Update 18th September 2017: I received from My Oracle Support an official statement to the point that you can use FADS only when your Admin Server is called "AdminServer":

I have checked with Development Team ,
This is currently a known limitation. Development is investigating several possible improvements that might be introduced in a future release. For now, You will need to either retain the default "AdminServer" name when configuring the domain or change the script at their own risk.
Note: We will not support if any changes made to the script by You . 

Let's see if they will remove this limitation ...