Oracle Forms Standalone Launcher

The Forms Standalone Launcher (FSAL) offers an alternative way for end-users to run Forms applications rather than using a browser.

About Forms Standalone Launcher

The Forms Standalone Launcher (FSAL) provides a browser-less, client/server-like experience for users to access and interact with applications. The application runs in its own parent window, unlike when running a form embedded in an html page in a browser.

As a result, there is no risk of accidentally navigating away from the running form by pressing the Back or Forward button, or clicking a bookmark, and so on. With FSAL, the application is hosted on a centralized application server such as WebLogic Server. This means the Forms application modules are securely stored on the remote middle-tier server.

Although the user will not have direct access to the Forms modules, such as FMX, MMX, PLX, and so on. which are on the remote server, they will be able to run these applications using a typical URL previously used when running in a browser.

The use of FSAL supports all the same functionality found when running a form in a browser, except event driven single sign-off. Single sign-on is supported. JavaScript integration support for applications launched using FSAL can be added/enabled with a provided add-on (WJSI) and a third-party library (Eclipse/Jetty). FSAL can be launched using custom protocol handlers from web pages.

FSAL does not rely on Java Deployment technologies—such as Plug-in, Web Start, and so on—and is not dependent on a browser. It does require the Java Runtime on the end-user machine.

Requirements

FSAL requires Oracle Java installed on the user’s machine. You can use any Oracle Java distribution that supports running a Java application and was certified with the Oracle Forms version being used.

Which distribution and/or version you choose may depend on the application’s needs. It is recommended that the contents of the Oracle Java installation chosen be carefully reviewed and your application be thoroughly tested before moving to production.

The following distributions are available for most common end-user platforms and can be used to run FSAL:

  • The Java 8 family: 32-bit and 64-bit distributions of the JRE, JDK, or Server JRE.

    Note:

    The Server JRE distribution is delivered as a zip file that must be manually extracted. Because this distribution does not perform a software installation and is much more lightweight than the JRE and JDK distributions, this option is ideal for the FSAL when used along with a customized startup script or similar.
  • Java 17 and newer. These are only available as a 64-bit JDK distribution, but can be used with FSAL. Be sure to refer to Oracle Fusion Middleware Supported System Configurations for this Forms version in order to ensure you are using a certified Java version.

Here are the main differences between the available Java distributions:

  • Java Runtime Environment - JRE: Java 8 only. The JRE installs most components needed for typical end-users. It includes everything needed to run a local Java application, as well as the Java Deployment components (Java Web Start and Java Plug-in). Java Deployment components are not available in major releases newer than Java 8.
  • Java Development Kit - JDK: The JDK, available in all versions, is generally for Java developers and includes far more than a typical user should need. The JDK includes a complete JRE, the Java Deployment components (Java 8 only), and tools for developing, debugging, and monitoring and maintaining Java applications.
  • Server JRE: Java 8 only. The Server JRE is primarily for deploying Java applications on servers. It includes tools for JVM monitoring and tools commonly required for server applications. It does not include the Java Deployment components needed for browser integration—such as Java Plug-in, Java Web Start, auto-update, and an installer.
  • Custom JRE: Oracle Java version 17 or newer. Users can use this version to create a custom JRE distribution.

    Note:

    This guide doesn't cover how to create a custom JRE distribution. Refer to your Java documentation for information on how to use these utilities.

    This version includes these utilities:

    • The jdeps utility: Used to determine which Java modules are needed
    • The jlink utility: Used to create the custom JRE
    • The jpackage utility: Used to package your custom JRE into an installable distribution if desired

Installing the Forms Standalone Launcher

Download the FSAL java JAR file (frmsal.jar) and save it to your local drive.

You can download the frmsal.jar file from the Usage/Syntax web page available with the installation. This utility can be stored anywhere as long the user has access to that directory and utility. Storing it in the user's home directory is recommended, but not required.

This file is version-specific—you cannot use frmsal.jar from one installation against another. For example, you cannot use frmsal.jar downloaded from a Microsoft Windows server to run an application against a UNIX/Linux server or vice versa. The launcher is not client- platform specific. It can be used on any platform that supports running a Forms certified Oracle Java version.

WARNING:

Do not change the name of the frmsal.jar file. Some functionality in FSAL expects the default filename. Changing the filename may result if some functionality not working correctly.

To download the frmsal.jar file:

  1. Access the Usage/Syntax web page using a URL like this:
    https://<your server>:<your port>/forms/html/fsal.htm
  2. Click the available download link and save the file to your local drive.

Using FSAL to Run Applications

To run an application using FSAL, you simply have to open a command prompt and provide the required command line arguments, Forms application URL, and other details.

If your needs are more advanced—for example, your app needs to communicate through a proxy server or you want to use custom protocol handlers—refer to the other topics in this section.

Although the Forms Standalone Launcher and the applications it runs are not related to a web browser or its applications, it is possible to communicate with a web page from an FSAL application. For details, refer to Oracle Forms and JavaScript Integration.

Running an Application with FSAL

Launch an application in FSAL using a command prompt.

Knowing the complete Forms application URL is necessary in order to service the request. Currently, the use of URL redirects or rewrites is not supported, but may be technically possible depending on the server configuration. FSAL expects to receive a fully qualified URL that points to the Forms environment.

A desktop shortcut, script, or batch file can be used in place of a hyperlink in order to make starting the application simple and less error prone.

Note:

This utility is not recommended for non-interactive purposes such as unattended load testing. Launching too many simultaneous or sequential sessions on a user’s machine may result in unpredictable and undesirable behavior.

To start an application with FSAL:

  1. Open a shell such as DOS on Microsoft Windows, then enter this command to verify the desired and certified Oracle Java version is found.
    java –version

    The result should indicate the desired Oracle Java version. If not, the system’s PATH may not be properly set. Make the needed correction then continue.

  2. Change to the directory where the frmsal.jar is stored, then enter the following command using the required server name and port:

    Note:

    If the server is not running SSL enabled and instead is using HTTP, the protocol (http://) can be omitted from the URL entry, as it is assumed.
    java -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp" 

    In this example, the application associated with the configuration section titled standaloneapp will run. You can use any configuration section as long as it contains the entries found in the standaloneapp example provided in the Forms Web Configuration.

  3. If required, create a desktop shortcut, batch script file, or custom executable to make launching the application easier and more seamless.

Oracle Forms generated output, typically seen in the Java Console, appears in the shell used to start the application. If the javaw or similar command is used rather than java, a console may not be shown. If using the java command, closing the shell that started the application will terminate the application.

This behavior can be altered to accommodate the application needs using various shell commands and associated switches. Refer to the operating system documentation for information on using the command shell on the user’s platform.

Refer to the FSAL Usage page provided in the installation for a complete list of command line arguments. To access this page, enter this URL in a browser:

http://<server>:<port>/forms/html/fsal.htm

Enabling JavaFX for Java 17+

If you are using Oracle Java 17 or newer "Long Term Support" (LTS) releases to run FSAL, you'll need to enable JavaFX if your applications use the Forms audio feature. JavaFX is necessary for the audio feature to function properly.

If the applications do not use the Forms audio feature, you can skip these steps.

To enable JavaFX, you'll need the JavaFX SDK. You can download this SDK from Gluon's JavaFX page at https://gluonhq.com/products/javafx. Make sure to download the version of the JavaFX SDK that most closely matches the Java version used to run FSAL.

Note:

JavaFX is now an Open-Source project hosted by Gluon. JavaFX versions newer than 8 are supported and licensed by Gluon and/or the open source community. Be sure to review the Terms of Use and support options before downloading and using. Refer to https://openjfx.io and https://github.com/openjdk/jfx.

Gluon is not affiliated with Oracle and JavaFX is not supported by Oracle.

To enable JavaFX on the user’s machine:

  1. Extract the JavaFX SDK into a directory where the user has runtime (read, execute) permissions.
  2. Alter the typical FSAL startup command to include JFX.

    For example:

    java --module-path C:/javafx-sdk-17.0.4/lib --add-modules=javafx.media,javafx.swing -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

Running An Application Through a Proxy Server

If an application needs to communicate through a proxy server, you can include proxy settings using arguments with the java command when you launch the application in FSAL.

In many cases, users will access a Forms application while within a corporate network. In some cases, this means that the user’s machine requires the appropriate proxy configuration in order to access both internal and external content. In the case of using FSAL, the browser and system level settings may not be visible to the shell that launches the application. Therefore, you may need to include such settings at the time FSAL is run.

You can do this by using arguments that either reference the system proxy settings or include the specific proxy settings.

To use the system proxy settings, enter this command to run the application:

java -Djava.net.useSystemProxies=true –jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

The argument, -Djava.net.useSystemProxies=true, causes Java to attempt the call using the proxy settings provided at the system level.

Note:

This method may not be supported when the system is configured to use Automatic Configuration Scripts (such as wpad.dat). Refer to the official Java documentation for details.

You can also specifically include proxy settings. Here are two examples depending on the protocol (HTTPS or HTTP):

java -Dhttps.proxyHost=<proxyserver> -Dhttps.proxyPort=<proxyserver port number> -Dhttps.nonProxyHosts="localhost|example.com" –jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"
java -Dhttp.proxyHost=<proxyserver> -Dhttp.proxyPort=<proxyserver port number> -Dhttp.nonProxyHosts="localhost|example.com" –jar frmsal.jar -url "http://<server>:<port>/forms/frmservlet?config=standaloneapp"

See Java Networking and Proxies.

Launching FSAL with a Custom Protocol Handler

You can use a hyperlink with a custom FSAL protocol to launch a Forms application. FSAL recognizes two special protocols—fsal for non-SSL requests and fsals for SSL requests.

To use a custom protocol, register the custom protocol on the user’s machine and include a properly formatted hyperlink on the desired web page.

Using a Custom Protocol in a Hyperlink

Here is an HTML example that uses a hyperlink with a custom protocol that can be used to launch FSAL with a named Forms configuration, standaloneapp:

<a href="fsal://<SERVER>:<PORT>/forms/frmservlet?config=standaloneapp">Run FSAL</a>

Registering a Custom Protocol

The steps needed to register this new protocol on the user’s machine depend on the operating system. This section provides the steps to register a new protocol on a Microsoft Windows machine. For registering custom protocol handlers on other operating systems, refer to the Operating System documentation or contact the vendor for assistance.

WARNING:

Modifying the Windows Registry can cause irreversible damage if performed incorrectly. Be sure to create a Registry backup and System Restore Point before attempting. Do not attempt this if you are unfamiliar with editing the Windows Registry.

The following commands can either be run individually on a Windows DOS command prompt or executed from a script. Regardless of the approach, the user must have Administrator privileges since this will write to the Windows Registry.

The examples in this section assume:

  • The latest Forms frmsal.jar is stored in the user’s home directory.
  • The latest Oracle Java 8 (32-bit) JRE is installed. Any certified Oracle Java version can be used, however be sure to adjust the path in the examples below to match the location of the java executable.

In the following commands, be sure to carefully review the last entry in each section. Be sure the path to javaw.exe and the path to frmsal.jar on the user’s machine represents your situation. Note that the Java path used is a special path created when installing the JRE only. If using the JDK, this path will need to be updated.

Commands for non-SSL Requests

reg add HKEY_CLASSES_ROOT\fsal /t REG_SZ /d "Oracle Forms Standalone Launcher" /f
reg add HKEY_CLASSES_ROOT\fsal /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\fsal /v "UseOriginalUrlEncoding" /t REG_DWORD /d "00000001"
reg add HKEY_CLASSES_ROOT\fsal\shell /f
reg add HKEY_CLASSES_ROOT\fsal\shell\open /f
reg add HKEY_CLASSES_ROOT\fsal\shell\open\command /t REG_SZ /d "\"C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe\" -jar %USERPROFILE%\frmsal.jar -url \"%1\"" /f

Commands for SSL Requests

reg add HKEY_CLASSES_ROOT\fsals /t REG_SZ /d "Oracle Forms Standalone Launcher with SSL/TLS" /f
reg add HKEY_CLASSES_ROOT\fsals /v "URL Protocol" /t REG_SZ /d "" /f
reg add HKEY_CLASSES_ROOT\fsals /v "UseOriginalUrlEncoding" /t REG_DWORD /d "00000001"
reg add HKEY_CLASSES_ROOT\fsals\shell /f
reg add HKEY_CLASSES_ROOT\fsals\shell\open /f
reg add HKEY_CLASSES_ROOT\fsals\shell\open\command /t REG_SZ /d "\"C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe\" -jar %USERPROFILE%\frmsal.jar -url \"%1\"" /f

Once the above have been successfully executed, the protocols fsal:// or fsals:// can be used in a browser in place of http:// or https://.

File Caching

Like the Java Plugin or a browser, FSAL caches files that may be reused the next time an application is launched to improve startup performance.

Caching Messages

When starting FSAL from a Unix/Linux shell or Windows DOS shell, the directory where cached files are stored is displayed in the shell output during the loading process. Also displayed is whether the files are being downloaded from the server or reused from the existing cache.

If downloading new files (not cached), you will see a message like this:

Inspecting archive files in cache directory C:\Users\<user name>\AppData\Local\Temp\frmsal\<server name>\14.1.2.0
Downloading archive file frmall.jar to cache subdirectory 8ymuqdqvdfe13a0d5vvema0dh

If previously cached files are used, you will see a message like this:

Inspecting archive files in cache directory C:\Users\<user name>\AppData\Local\Temp\frmsal\<server name>\14.1.2.0
Using cached archive file frmall.jar from cache subdirectory 8ymuqdqvdfe13a0d5vvema0dh

Changing tmpdir

To control the location of the cache files, change the location of tmpdir when starting the application. Consider the following example for Microsoft Windows users. Note that it uses the value of the Windows system variable %USERNAME% as the first level directory.

java -Djava.io.tmpdir=C:/%USERNAME%/fsal -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

Note:

When the user is on a shared Unix/Linux platform this may cause problems because the downloaded cached files will be owned by the first user who ran the application. As a result, subsequent users may not have sufficient permissions to overwrite the old cached files with new ones. By creating unique locations for each user this problem can be avoided.

java -Djava.io.tmpdir=/u01/$user/fsal -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

Disabling File Caching

For some applications, you may not want to use cached files, but instead always download from the server. This may also be true when troubleshooting technical issues.

To disable file caching:

  1. Open Fusion Middleware Control (FMC), then edit the FSAL template file (basesaa.txt or webutilsaa.txt based on your application) to include this line:
    ignoreSaaCache=%ignoreSaaCache%
  2. In the Forms Web Configuration, add a new parameter ignoreSaaCache to the [standaloneapp] configuration or whichever configuration is being used to run the application.
  3. Set its value to TRUE.

Cached files will now be ignored and downloading files from the server will occur each time the application is started.

Security Considerations

Review the topics in this section when planning and configuring FSAL, the user's machine, and your network.

Ensuring the highest degree of security for an application, the data exchanged within it, and the network on which it is hosted should be considered the most important aspects of any application deployment. A weakened security layer can be responsible for sensitive data breaches and malicious system attacks. It is your responsibility to ensure that proper security efforts are being used to protect the applications, the data, and their hosting systems.

Note:

This section offers several ways you can improve the security related to using the FSAL, but these are only examples. It is your responsibility to understand the concepts and research any that you do not fully understand. Improperly implementing any security configuration may put your system at risk.

After configuring your system, carefully review and test your changes before assuming they are correct.

The suggestions provided here may not be unique to FSAL or even Oracle Forms in general. Many are standard suggestions that relate to the technologies in use. Therefore, the availability of additional information is widespread. Do not use this section as the only source of information for securing your application, its data, and its environment.

Be sure to also review the Resources section included at the end of this section.

Secure Socket Layer

Using Secure Socket Layer (SSL) and Transport Layer Security (TLS) to run any application communicating on the network is very important to securing data. The use of SSL/TLS for running any and all applications should be considered a requirement and not optional.

Secure Socket Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide encrypted communication between a source and destination of network traffic. These protocols work by creating a trusted connection, which is most often established by a public and private key exchange.

To run an application using SSL/TLS with FSAL requires that the SSL/TLS certificate public key be included in the user’s Java TrustStore. This may require you to import the certificate(s) if that has not already been included in the TrustStore or provided by a known Certificate Authority such as DigiCert, Entrust, or Comodo.

Note:

The terms “KeyStore” and “TrustStore” are used interchangeably in this section.

This key must be imported into the Java TrustStore that is being used by FSAL to run the form. While often only the “root” certificate is needed, in some cases more than one certificate may need to be imported, as a chain of certificates may exist (for example root, intermediate, user).

If you try to run an application using SSL/TLS and a needed certificate is not found or was improperly imported, you may see a Java error like one of these

java.security.cert.CertificateException: No subject alternative names present …
java.security.cert.CertificateException: No name matching <server>:<port> found …
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: …

Following one of the above or similar errors, you will see an FSAL error:

FRM-92490: Unable to fetch applet parameters from server.

This is because a secure connect could not be established and the parameters needed to start and run the application were not permitted to be downloaded.

Configuring SSL/TLS with FSAL

Import and store SSL/TLS certificates using either the FSAL Certificate Importer or the Java provided tools. The FSAL Certificate Importer is the default method.

Using The FSAL Certificate Importer

On receiving initial feedback from the server, FSAL checks the TrustStore to determine if the delivered certificate is known. If known and deemed trusted, the application runs without interruption.

If the certificate is unknown, the user sees a prompt indicating this and allowing the user to import a new certificate. This prompt includes a More Information link that provides details about the delivered certificate.

If the user clicks OK, the new certificate is inserted into a newly created Java TrustStore used by Forms/FSAL. This FSAL created TrustStore is used by FSAL for all subsequent requests unless disabled by the user by setting the runtime switch cert_truststore to "java".

This new Java TrustStore is created in the user’s home directory, specifically in:

C:\Users\<USER NAME>\Oracle\forms

The TrustStore file name is formstruststore. Changing the name of the generated TrustStore is not supported. If the file is not found, a new empty file is created. Because this is a Java generated and standard TrustStore file, the tools found in the Oracle Java installation (keytool.exe) can be used to administer this file if necessary.

When running an application, you can use the autoImportCert switch to import unknown certificates automatically. If set to true, the user will not see the prompt before the certificate is imported. This option is not recommended and is provided mostly for testing purposes. Here is an example of how to use it:

java -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp" -autoImportCert true

For additional information, refer to the FSAL command line arguments listed on the Usage web page. The list of command line arguments is also included here: FSAL Command Line Arguments.

Configuring the KeyStore Manually

Refer to the command line options provided near the end of this document for details on reverting to the previous behavior.

If using the FSAL SSL/TLS Certificate Importer is not desirable, follow these steps prior to using FSAL. It may also be necessary to complete these steps if a compatibility issue is identified with the certificate(s) in use and the FSAL Certificate Importer. Some non-standard or self-generated certificates may not be compatible with the FSAL Certificate Importer.

  1. Obtain an SSL/TLS certificate from a known Certificate Authority and configure Oracle HTTP Server (or WebLogic Server) according to the instructions provided by the documentation for those components.
  2. Obtain the public key portion of the certificate.

    The public key portion of the certificate is be needed on the user’s machine. If you do not have the public key, there are several ways to obtain it. Obtaining the key chain can be done from any machine that has access to the server. Here is an example of how to obtain the key(s) using the openssl command. Make sure to replace <server>:<port> with the server name and SSL/TLS port number.

    openssl s_client -showcerts -connect <server>:<port> > output.txt

    Note:

    This is pre-installed on most Unix/Linux platforms, but can be obtained for Microsoft Windows.

    The result of running this command will be saved in a file named “output.txt”. The file will contain one or more certificates (depending on the certificate type and how it was created). The certificate is the contents between and including the BEGIN and END header/footer.

  3. Copy each certificate to its own text file.

    Be sure to include the BEGIN and END text exactly as shown below and the contents between them. Do not include extra lines above or below the -----BEGIN CERTIFICATE----- or -----END CERTIFICATE----- when saving the file, but do include these header/footer entries.

    Here is an example:

    -----BEGIN CERTIFICATE-----
    MIIFKDCCBBCgAwIBAgIBPTANBgkqhkiG9w0BAQsFADCBrjEpMCcGA1UEAxMgTmlj
    Y2subWFuc0BvcmFjbGUuY29tMRAwDgYDVQQLEwdTdXBwb3J0MQ8wDQYDVQQKEwZP
    cmFjbGUxGTAXBgNVBAcTEENvbG9yYWRvIFNwcmluZ3MxETAPBgNVBAgTCENvbG9y
    . . .
    -----END CERTIFICATE-----

    Tip:

    Alternatively, run the following to directly generate the needed certificate file:

    openssl s_client -showcerts -servername <server name> -connect <server>:<port> | openssl x509 -outform PEM > cert.cer
  4. Import the public key(s) into the KeyStore on the user’s machine (for example, cacerts).

    If it is a certificate chain, be sure to import all keys in the chain (signer, intermediate, root, and so on). This means it may be necessary to run the keytool utility more than once. To import the certificate public key(s) use the Java keytool utility, which is included in most Oracle Java distributions.

    Here is an example of how import each certificate using the keytool utility. Refer to the Oracle Java documentation for details on how to use the keytool utility.

    keytool -importcert -alias <server_name> -keystore <JAVA_HOME>/jre/lib/security/cacerts -file cert.cer

    Note:

    The alias must be unique. If there are more than one certificate in the chain each must have a unique alias. However, the root should be imported first and should use the server’s name as its alias. Attempting to use an alias that was previously used will result in an error. It is recommended that the server’s name be used in the alias. For example, the root certificate should be imported first and should be named myserver, the second myserver2, and the third myserver3.
  5. Run FSAL with SSL, including the switch, -cert_truststore, set to java in order to bypass the automatic certificate importer:
    java -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp" –cert_truststore java

Troubleshooting SSL/TLS

If you encounter problems with your certificates, try these steps where appropriate.
  • If certificates were manually inserted into the Java Keystore, verify the correct KeyStore was updated.

    By default, a KeyStore is found in JRE_HOME/lib/security or in the user’s home directory. The default file name (when not using the FSAL Certificate Importer) is cacerts. Verify that the file modified date/time is the same as when the import command was executed.

    When using the FSAL Certificate Importer the TrustStore name is formstruststore.

  • Verify that all certificates in the chain have been imported.

    In many cases, only the root certificate is needed. If it is believed that there is a certificate chain, all the certificates can be listed for review using this Java command:

    keytool -list -keystore "C:\java\jdk\jre\lib\security\cacerts"
  • If the KeyStore or TrustStore updated is not in the JRE_HOME or user home directory, copy it to the JRE_HOME. Be sure to create backup files of any files before overwriting.
  • Enable Java SSL/TLS debugging.

    To enable debugging mode, run FSAL and the desired form as follows:

    java -Djavax.net.debug=all –jar frmsal.jar -url https://<server>:<port>/forms/frmservlet?config=standaloneapp

    The output can also be redirected to a text file as follows (assumes Microsoft Windows):

    java -Djavax.net.debug=all –jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp" > C:/existing_directory/output.txt
  • If the KeyStore or TrustStore that contains the needed certificate(s) is not the default (in the default location), the keystore or truststore switch can be used to explicitly reference the desired file.
    java -Djavax.net.ssl.keystore=C:/somewhere/mycacerts -jar frmsal.jar -url "https://server:port/forms/frmservlet?config=standaloneapp"

    or

    java -Djavax.net.ssl.truststore=C:/somewhere/mycacerts -jar frmsal.jar -url "https://server:port/forms/frmservlet?config=standaloneapp"

Signed Code

For Oracle Forms, a digital signature certificate is added to the Oracle-provided Forms Java JAR files. This digital signature helps to ensure that the application owner is known and trusted by the user.

Forms, Java Plug-in, and Java Web Start

To run a Java application from a browser with the Java Plug-in or Java Web Start, the user would likely click a hyperlink or bookmark or manually type a URL into a browser. This can potentially put the user's system at risk. To protect against a link opening a malicious Java application on the user’s machine, the Java Plug-in and Java Web Start have special security features, including a requirement to only permit signed (and trusted) applications to run. Unsigned applications are not permitted and are blocked.

All Java JAR files provided by Oracle Forms that run on the user’s machine are signed in order to comply with Java’s security requirements. This allows Forms applications to run safely with Java Web Start. It is further required that custom JAR files (those not provided by Oracle) also be properly signed with a trusted certificate. Signing JARs not provided by Oracle is the customer’s responsibility.

Note:

Using self-generated certificates is not recommended and should be avoided. Although using self-generated certificates may seem to function, support for this functionality may be removed from Java in the future.

Refer to the jarsigner utility and its documentation for details on how to add a certificate to your own JAR files.

FSAL and Signed JARs

JAR signing is recommended for all deployments, including when using FSAL. Since the inherent risk associated with using a browser is mostly avoided when using FSAL, this client configuration is quickly becoming the preferred approach. That said, you should still carefully consider all security aspects when planning application deployment.

Although running native Java applications like FSAL do not have the same level of built-in security checks found in the Java Plug-in and Java Web Start, limited levels of signed code verification can be enabled.

Note:

The following has been deprecated in Java versions newer than version 11. Warnings may appear if enabling this functionality using Java 17 to Java 23. As of Oracle Java 24 or newer, this functionality will be desupported and the ability to execute the functionality will be removed. These instructions are provided for legacy purposes only.

To enable signed code awareness for FSAL and specifically your application:

  1. Obtain the public keys associated with all JAR files used in the application.

    Oracle provided JARs are signed when delivered and this certificate is included in the KeyStore by default. If the signer’s public key for the JAR files used is not available, use the following Java command for each of the JARs to obtain their certificates:

    keytool -printcert -rfc -jarfile <yourJarFile>.jar

    You should see output like this in response:

    -----BEGIN CERTIFICATE-----
    MIIG7zCCBNegAwIBAgIQCl39nB4pDWNpkID7lx+kLjANBgkqhkiG9w0BAQsFADBp
    MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMT
    ...
    2ROzDhwQmGHIbDXUo8jXX7NGHdpyZovPm//IO/zp9d6Anka/B3viZlii4eAz6Xbv
    yIafqfh5fS9ZLb4kSHKgf87f4Zlm8YElQF+ZJ+rGVT5xArbEjxcoLyzpmmLWCPeI
    yTifK4P1GgeEhdWol7/R25bAKyPr9OrySnQx9vnUbmKa120i13/mhJm2gXp7qG+P
    uxx1l3SL/yU8gbmOdRno6CcANWLUvQ5FjMVppV8FVPf+7gyhsKrAYP2SMNy2F0qi
    1OIF
    -----END CERTIFICATE-----

    Note:

    The first certificate returned should be the "signer" certificate and the one needed for the steps that follow.
  2. Copy the contents of the first certificate into a text file (foo.pem in this example). The copied contents should begin with "-----BEGIN CERTIFICATE-----" and end with "-----END CERTIFICATE-----".
  3. On the user’s machine, import each public key into the Java KeyStore that will be used at runtime:

    keytool -importcert -alias foo -file C:\foo.pem

    The above alias can be any alphanumeric string, however be sure to remember it as it will be needed in a coming step. Also, because the –keystore switch was not included, a KeyStore in the user’s home directory is used (or created if one does not exist). The file will be named “.keystore”. To use a different KeyStore and/or KeyStore name, add the –keystore switch as desired.

  4. Repeat the above step for each certificate.
  5. Create a .java.policy file in the user’s home directory if one does not exist or if you want a fully customized file. Otherwise, use the default file. <JAVA_HOME>\jre\lib\security\java.policy

    Add the following to it:

    keystore ".keystore";
    grant signedBy "foo" {
       permission java.security.AllPermission;
    };

    The “foo” reference is a pointer to the alias used in step 2. Add additional grant signedBy sections for each key that was imported in step 2. The value of keystore is a pointer to the KeyStore file you expect to use.

  6. Run your Forms application using FSAL with this slightly modified command entry:

    java -Djava.security.manager -jar frmsal.jar -url "https://yourserver:port/forms/frmservlet?config=standaloneapp"

When running the application, JAR certificates are matched with those in the KeyStore. If they do not match, the app will not run. In the above example, it is assumed that the default java.policy is used or a .java.policy was created in the user’s home directory.

java -Djava.security.manager -Djava.security.policy=${user.home}/foo.policy -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

You can also access a custom policy file from another directory on the user’s machine or a remote location (URL).

java -Djava.security.manager -Djava.security.policy=https://<server>:<port>/foo.policy -jar frmsal.jar -url "https://<server>:<port>/forms/frmservlet?config=standaloneapp"

Note:

To ensure users are taking advantage of this validation, a startup script or similar should be used. Using a script will help prevent the possibility of typographical errors or the possibility of not using the security manager.

Single Sign-on

Single Sign-on is an authentication concept that offers many valuable advantages to web applications. The idea of integrating Forms with Single Sign-on (SSO) is often believed to have a significant benefit over using the Forms database login functionality because database credentials for running Forms applications can be hidden from the user.

To use SSO with FSAL you must perform the same configuration steps needed for using SSO with Forms in any other case. For information about how SSO is configured with Forms and how it works, see Using Forms Services with Oracle Access Manager.

To enable SSO for a specific application, set ssoMode=true in the desired application configuration of the Forms Web Configuration settings associated with the application to be protected.

FSAL Reference

Refer to this section for information on FSAL parameters and command line arguments. You'll also find links to related documentation.

FSAL Web Configuration Parameters

Refer to this topic for details about FSAL servlet and applet parameters.

Table -8 FSAL Web Configuration Parameters

Servlet/Applet Parameter Description
ignoreSaaCache

Specifies whether to ignore the existing cache and download fresh files from the server.

Valid values: TRUE, FALSE

Default: FALSE

ignoreMissingSaaArchives

Specifies whether to ignore configured but missing JAR files at startup. When set to TRUE, any occurrence of a missing archive results in an error but the session tries to continue. This is the default behavior. When set to FALSE, FSAL tries to continue, if possible, but fails if not.

Note:

This should generally only be used for testing and debugging.

Valid values: TRUE, FALSE

Default: FALSE

fsalEnableAutoUpdate

Specifies whether FSAL should automatically update itself if it does not match the server version. Auto update is only supported for patch updates.

Valid values: TRUE, FALSE

Default: TRUE

fsalJavaVersion Specifies the required Java version to run the application. See fsalJavaVersion in Web Configuration Parameters for possible value combinations.
fsalUpdateDialogText

Specifies the text to display in the AutoUpdate dialog when it is presented.

Valid value: A string with maximum length less than 128 characters

ssoSaaBrowserLaunchTimeout

Specifies, in seconds, how long the Forms servlet will wait for the initial request from the browser that was launched by FSAL for SSO authentication. If the interval expires, a fatal error FRM-93249 is reported.

Valid values: Integers in the range 1-300.

Default: 15

ssoSaaBrowserPageTimeout

Specifies, in seconds, how long the Forms servlet will wait for the user to enter data into a browser page during SSO authentication for an FSAL application. If the interval expires, a fatal error FRM-93382 or FRM-93383 is reported.

Valid values: Integer >= 15, or 0 (wait indefinitely).

Default: 0

ssoSaaWaitInterval

Specified the interval, in seconds, after which FSAL reissues requests to the Forms servlet while SSO authentication is proceeding in the launched browser. Larger values reduce network traffic but increase the chances of a timing out, producing a fatal error FRM-93248).

Valid values: Integer >= 5, or 0 (do not reissue requests).

Default: 25

ssoSuccessLogonURL The URL to redirect to if SSO authentication completes successfully for an FSAL application.

FSAL Command Line Arguments

Refer to this topic for details about FSAL command line arguments.

Table -9 FSAL Command Line Arguments

Argument Description
-url

Specifies the fully qualified URL needed to run the Forms application. The URL should include the necessary configuration reference that includes the needed FSAL settings (for example, config=standaloneapp).

The URL must be surrounded by quotation marks.

Note:

When not using SSL/TLS, the protocol http:// can be omitted from the URL entry.
-t

Specifies, in milliseconds, the amount of time the launcher should wait for the server to provide its initial response before timing out.

Valid values: Positive integers (>= 1)

Default: 60000 (ms)

-showConfig

Specifies if the Forms web configuration parameters should be display on command line when the application is loaded.

Valid values: TRUE, FALSE

Default: FALSE

-showDetails

Specifies whether to display additional details on application loading and startup.

Valid values: 0, 1, 2, 99

Value descriptions:

  • 0: No additional information should be displayed.
  • 1: Show location from where resources are loaded.
  • 2: Show SSL/TLS related information when certificate information is not in the FSAL TrustStore.
  • 99: Shows all the details.

Note:

Other values are reserved for future use.

Default: 0

-changeFSALStorePass

Specifies whether to change the password of FSAL custom TrustStore. A default password is set at creation time. That password is: changeit

In most cases, there is little reason to set a password for the truststore on a user’s machine unless it contains private key/certificate information.

Valid values: TRUE, FALSE

Default: FALSE

-autoImportCert

Specifies whether the SSL/TLS certificates should be imported without any user interaction. This argument is ignored if cert_truststore is set.

Valid values: TRUE, FALSE

Default: FALSE

-cert_truststore

Specifies whether to use the Forms TrustStore or a custom KeyStore for storing SSL/TLS certificates. A value of "forms" or unset will result in using a Forms generated Java TrustStore.

A value of "java" will cause FSAL to look in the Java default KeyStore for storing and verifying SSL/TLS certificates.

Note:

When using the Java default store, you must manually import needed certificates into it before running any SSL/TLS application.

Valid values: forms, java

Default: forms

-bypassHostnameVerification

Specifies whether hostname verification failures are ignored when validating SSL/TLS certificates. Setting this to TRUE allows the application to run even though the connection cannot be verified. This is inherently insecure and is strongly discouraged. This option is ignored if the cert_truststore option is set to "java".

Valid values: TRUE, FALSE

Default: FALSE

-clearcache

Specifies whether to clear the FSAL cache. The -url argument is ignored if used with -clearcache.

Valid values: TRUE, FALSE

Default: FALSE