This Blog is discontinued, its only read-only

Showing posts with label Oracle Reports 12c. Show all posts
Showing posts with label Oracle Reports 12c. Show all posts

Monday, October 26, 2020

Oracle Forms & Reports 12.2.1.4.0 certified with ATP

Since a few days, the current release of Oracle Forms & Reports 12.2.1.4.0 is officially certified with the use of Oracle Autonomous Transaction Processing (ATP) Database.

You can use the ATP Database for the Metadata Repository for Oracle Forms & Reports 12.2.1.4.0 and/or as application Database.

The certification you can see in the What's new Guide https://docs.oracle.com/en/middleware/developer-tools/forms/12.2.1.4/releasenotes-fnr/whats-new-this-release.html#GUID-5D5D50BB-9358-4009-A324-024EF97CA3D8

In the Oracle Fusion Middleware 12c Certification Excel Sheet for 12.2.1.4.0, https://www.oracle.com/technetwork/middleware/fmw-122140-certmatrix-5763476.xlsx you can see the certification for the usage of ATP databases as well:



Friday, September 4, 2020

In-Process Reports Server

From time to time I am receiving questions concerning the Oracle In-Process Reports Server which come by default with the configuration of Oracle Forms & Reports.

Mainly the questions are, how can start or stop the In-Process Reports Server or how to disable the default In-Process Reports Server completely?


Start and Stop of the In-Process Reports Server

To start, simple open a Browser and point to http://<your_server_name>:<Port_of_ManagedServerReports>/reports/rwservlet/startserver

To stop just use http://<your_server_name>:<Port_of_ManagedServerReports>/reports/rwservlet/stopserver


Disable the In-Process Reports Server

In order to completely disable the default In-Process Reports Server, you have to edit the rwservlet.properties file, which is located under $DOMAIN_HOME/config/fmwconfig/servers/<Name_ManagedServerReports>/applications/reports_12.2.1/configuration

#
# Align the line from
<inprocess>yes</inprocess>
# to
<inprocess>no</inprocess>

After that restart the ManagedServer for Reports and you are done.

In Oracle Reports 11.x Releases, you can disable the default In-Process Reports Server via the Enterprise Manager Fusion Middleware Control under the Reports Menu. 

But in Oracle Reports 12.x the management of Reports is no longer available within the Enterprise Manager Fusion Middleware Control, so you will have to do it manually directly in the rwservlet.properties file.


Thursday, February 6, 2020

Huge Number of component_event.xlf* and pki_data*.tmp files in /tmp in Oracle Forms & Reports 12c

If you are running an Oracle Forms and Reports 12c (12.2.1.+) environment over quite some time, you might discover that under the /tmp directory are a quite huge number of files named component_event.xlf* and pki_data*.tmp are generated and filling up your /tmp space.

The pki_data*.tmp files are usually 0 Bytes, but the component_event.xlf* files are between some Bytes up to some 100 Bytes. Over some time, these files are really fill up your /tmp.

These files are generated by the Oracle Platform Security for Java component and they are holding temporarily cache data.

In order to get rid of the component_event.xlf* files, you will just to have modify two configuration files of your WebLogic Domain.

In the configuration file $DOMAIN_HOME/config/fmwconfig/jps-config.xml find the following line and comment this line out.

#
# Original line
<serviceInstanceRef ref="audit.db"/>

# Modified line
<!-- serviceInstanceRef ref="audit.db"/ -->

The second configuration file is the $DOMAIN_HOME/config/fmwconfig/jps-config-jse.xml. Find the following line and comment this line out.

#
# Original line
<serviceInstanceRef ref="audit.db"/>

# Modified line
<!-- serviceInstanceRef ref="audit.db"/ -->

After the above modifications are done, you will have to restart your WebLogic Domain and you can see that no more component_event.xlf* are generated.
There are just the pki_data*.tmp files, but these files are usually 0 Bytes. For this files you can use a normal housekeeping job to clean them up regulary.


Monday, September 30, 2019

Oracle Reports 12.2.1.4.0 - Create a Standalone Reports Server

On Friday, 27th September 2019, Oracle released the latest Version of Oracle Forms & Reports 12.2.1.4.0 (see my blog post http://dirknachbar.blogspot.com/2019/09/oracle-forms-reports-122140-available.html).

As I already created an Oracle Forms & Reports 12.2.1.4.0 environment, it's now time to have a look on the Oracle Reports 12.2.1.4.0 environment.

As usual, after you have successfully installed and configured your Oracle Forms & Reports 12.2.1.4.0 environment, the Oracle Reports Component is NOT configured completely.

Following steps you will have to perform:
  • Create the required Reports Tools Instance
  • Create the required Reports Server Instances
  • Optionally, if you don't any kind of security for accessing the Reports, disable the security settings and activate the Webcommands for the rwservlet
What you don't need anymore in Oracle Reports 12.2.1.4.0 are following steps:
  • No more symbolic link from /usr/lib/libXm.so.4 to libXm.so.3
  • No more modification on the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files on your JDK and the JDK under your $MW_HOME/oracle/common/jdk

Just perform following steps:

#
# At first we are creating the required Oracle Reports Tools Instance
cd $MW_HOME/oracle_common/common/bin
./wlst.sh
# replace the password with your password and verify if port 7001 is your Admin Server Port
wls:/offline> connect('weblogic','password','localhost:7001')
wls:/fr_domain/serverConfig/> createReportsToolsInstance(instanceName='reptools1',machine='AdminServerMachine')
wls:/fr_domain/serverConfig/> exit()

# Next we are creating our required Oracle Standalone Reports Server
cd $MW_HOME/oracle_common/common/bin
./wlst.sh
wls:/offline> connect('weblogic','password','localhost:7001')
wls:/fr_domain/serverConfig/> createReportsServerInstance(instanceName='rep_server1',machine='AdminServerMachine')
wls:/fr_domain/serverConfig/> exit()

Now we have to align the rwserver.conf configuration file for the above created Oracle Standalone Reports Server, called in my example rep_server1.

#
# Open the rwserver.conf with an editor
# located under $DOMAIN_HOME/config/fmwconfig/components/ReportsServerComponent/<Reports Server Name>/rwserver.conf
# Align the following section from :

   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <!--property name="cacheDir" value="your cache directory"/-->
      <!--property name="maxCacheFileNumber" value="max number of cache files"/-->
   </cache>
   <!--Please do not change the id for reports engine.-->
   <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.-->
   <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="1" minEngine="1" engLife="50" >
      <!--property name="sourceDir" value="your reports source directory"/-->
      <!--property name="tempDir" value="your reports temp directory"/-->
      <!--property name="keepConnection" value="yes"/-->
   </engine>

# To (align the provided directories for cacheDir, sourceDir and tempDir to your settings)

   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <property name="cacheDir" value="/u00/app/oracle/demo_app/cache"/>
      <property name="maxCacheFileNumber" value="50"/>
   </cache>
   <!--Please do not change the id for reports engine.-->
   <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.-->
   <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="1" minEngine="1" engLife="50" >
      <property name="sourceDir" value="/u00/app/oracle/demo_app/rdf"/>
      <property name="tempDir" value="/u00/app/oracle/demo_app/temp"/>
      <property name="keepConnection" value="yes"/>
   </engine>

# In case you don't need any kind of security for your Oracle Reports align the following section as follows:

   <job jobType="report" engineId="rwEng" securityId="rwJaznSec"/>

# To, remove the part securityId="rwJaznSec":

   <job jobType="report" engineId="rwEng"/>

To enable the Webcommands in the rwservlet just modify the rwservlet.properties file under $DOMAIN_HOME/config/fmwconfig/servers/<Name of Managed Server for Reports>/applications/reports_12.2.1/configuration

#
# Add the line <webcommandacess>L2</webaccesscommand>

<?xml version="1.0" encoding="UTF-8"?>
<rwservlet xmlns="http://xmlns.oracle.com/reports/rwservlet" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <server>rep_wls_reports_greenfield</server>
   <singlesignon>no</singlesignon>
   <inprocess>yes</inprocess>
   <webcommandaccess>L2</webcommandaccess>
</rwservlet>

Now start your Managed Server for Oracle Reports, normally WLS_REPORTS and after that start your newly created Oracle Standalone Reports Server

#
cd $DOMAIN_HOME/bin
# if you don't want to be prompted in future for the Nodemanager Password
# use the option storeUserConfig, it will store the password
./startComponent rep_server1 storeUserConfig

Starting system Component rep_server1 ...

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Reading domain from /u00/app/oracle/user_projects/domains/demo_domain
 
 
Please enter Node Manager password:
Creating the key file can reduce the security of your system if it is not kept in a secured location after it is created. Creating new key...
The username and password that were used for this WebLogic NodeManager connection are stored in /home/oracle/.wlst/nm-cfg-demo_domain.props and /home/oracle/.wlst/nm-key-demo_domain.props.
Connecting to Node Manager ...
<Sep 30, 2019 1:28:41 PM CEST> <Info> <Security> <BEA-090905> <Disabling the CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true.> 
<Sep 30, 2019 1:28:41 PM CEST> <Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG128 to HMACDRBG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true.> 
<Sep 30, 2019 1:28:41 PM CEST> <Info> <Security> <BEA-090909> <Using the configured custom SSL Hostname Verifier implementation: weblogic.security.utils.SSLWLSHostnameVerifier$NullHostnameVerifier.> 
Successfully Connected to Node Manager.
Starting server rep_server1 ...
Successfully started server rep_server1 ...
Successfully disconnected from Node Manager.


Exiting WebLogic Scripting Tool.

Done

Now you can access the Reports rwservlet commands under http://<Your ServerName>:9002/reports/rwservlet


In order to see the environment/configuration for our newly created Oracle Standalone Reports Server rep_server1 just use following URL: http://<Your ServerName>:9002/reports/rwservlet/showenv?server=rep_server1


Summing up, Oracle Reports 12.2.1.4.0 is still the same as the previous release, but 2 positive topics are that you don't need anymore to create the symbolic link for the libXm.so.3 and you don't need any more the modification on the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.


Saturday, September 28, 2019

Oracle Forms & Reports 12.2.1.4.0 - First Look

Yesterday I was blogging about the new Oracle Forms & Reports 12.2.1.4.0 Release.

Today I got some spare time to install and configure the latest Oracle Forms & Reports 12.2.1.4.0 Release on one of my test VM's.

My configuration is as follows:
The installation and configuration is the same as under the previous Oracle Forms & Reports 12.2.1.3.0 Release.
At first install and configure your Oracle Database, I have created an Oracle 19c Instance with one PDB, which will be my target Database for the required Metadata Repository for Oracle Forms & Reports 12.2.1.4.0.
Next step is to install the JDK (or better to say unzip your Oracle Server JRE 8u221, you can even use a full JDK).
After that, install your Oracle WebLogic Server Infrastructure 12.2.1.4.0 and when this is done, install into the same MW_HOME your Oracle Forms & Reports 12.2.1.4.0 software.

Now, we can start to configure the required stuff. At first you need to run the Repository Creation Utility ($MW_HOME/oracle_common/bin/rcu), when this is done, we can configure the Oracle WebLogic Domain for Forms & Reports with the config.sh script located under $MW_HOME/oracle_common/common/bin).

When the configuration part is done, just startup your Node Manager with $DOMAIN_HOME/bin/startNodeManager.sh and after that your AdminServer with $DOMAIN_HOME/startWebLogic.sh

Now you can either start the Managed Servers (WLS_FORMS and WLS_REPORTS) from the WebLogic Console http://:7001/console or with the script $DOMAIN_HOME/bin/startManagedWebLogic.sh

Just to test, if your Forms Environment is working, get the frmsal.jar (located under $MW_HOME/forms/java) to your Desktop and execute following command:

#
# java -jar frmsal.jar -url "Full Qualified Server including the Configuration" [-t <timeout in milliseconds>] [-showConfig false|true]
java -jar frmsal.jar -url "http://<Your_ServerName>:9001/forms/frmservlet?config=standalone" -showConfig true

Config parameters from server are:
    CODEBASE=/forms/java
    ARCHIVE=frmall.jar
    WIDTH=750
    HEIGHT=600
    NAME=
    serverURL=/forms/lservlet?ifcfs=/forms/frmservlet?config=standaloneapp&standaloneapp=1&ifsessid=WLS_FORMS.formsapp.2&acceptLanguage=en-us
    networkRetries=0
    splashScreen=
    background=
    lookAndFeel=Oracle
    colorScheme=swan
    customColorScheme=
    serverApp=
    logo=
    imageBase=codebase
    formsMessageListener=
    recordFileName=
    EndUserMonitoringEnabled=false
    EndUserMonitoringURL=
    heartBeat=
    MaxEventWait=
    disableValidateClipboard=false
    allowAlertClipboard=true
    digitSubstitution=context
    highContrast=false
    disableMDIScrollbars=
    clientDPI=
    applet_stop_timeout=800
    guiMode=0
    idleTimeout=
    isResizable=
    centerOnStartup=
    alwaysOnTop=
    mediaBase=codebase
    webFormsTitle=Oracle Fusion Middleware Forms Services
Inspecting archive files in cache directory /var/folders/b_/ldw8b91n7h7dp58hd3xf2qmc0000gn/T/frmsal/greenfield/12.2.1.4
Downloading archive file frmall.jar to cache subdirectory ermz9mn700rz58gniz4ftx8un
Forms Session ID is WLS_FORMS.formsapp.2
The proxy host is null, and the proxy port is 0.
Native HTTP implementation is being used for the connection.
The connection mode is HTTP.
Forms Applet version is 12.2.1.4

With the optional option "-showConfig true" your java call on the frmsal.jar will display you the Forms Configuration in your shell or Command Prompt.

Now you should see following:


Enjoy the new Oracle Forms & Reports 12.2.1.4.0 Release, I will post in the next days more blog posts about the latest Oracle Forms & Reports 12.2.1.4.0 Release ...


Friday, September 27, 2019

Oracle Forms & Reports 12.2.1.4.0 available

Since today the new long awaited Oracle Forms & Reports Release 12.2.1.4.0 is available, this is after 2 years now the next release of Oracle Forms & Reports.

The software can be found under: https://www.oracle.com/middleware/technologies/forms/downloads.html



The corresponding documentation can be found under https://docs.oracle.com/en/middleware/developer-tools/forms/12.2.1.4/index.html


As expected the new features are as follows:

  • SSO Support for Forms Standalone Launcher (FSAL)
  • Forms Standalone Launcher (FSAL) is compatible with Java 11.0.2 (LTS)
  • Increased Text Length for Text or Display Items, from 65534 to 2097151
  • The Oracle Database Client Software within the Middleware Home is now updated to 12.1.0.2190716

Also Oracle added a new System Requirements and Supported Platforms for Oracle Fusion Middleware 12c (12.2.1.4.0) Excel Sheet under https://www.oracle.com/technetwork/middleware/fmw-122140-certmatrix-5763476.xlsx

Enjoy the new Oracle Forms & Reports 12.2.1.4.0 Release :-)


Friday, June 28, 2019

Oracle 19c Certified for Oracle Fusion Middleware 12.2.1.2.0 and 12.2.1.3.0

Since a few days Oracle updated the Certified Matrix for the Oracle Fusion Middleware Products concerning certified Oracle Databases.

Now Oracle 19c (19.3+) is certified with Oracle Fusion Middleware 12.2.1.2.0 and 12.2.1.3.0.

For example Oracle WebLogic Server 12.2.1.3.0 / 12.2.1.2.0 can use an Oracle 19c Database as target database for AppData, Repository Creation Utility (RCU) and WLS Features.



The same applies to Oracle Forms & Repors 12.2.1.3.0 / 12.2.1.2.0.



As well for Oracle SOA Suite 12.2.1.3.0 / 12.2.1.2.0



The complete certification matrix can be retrieved either in My Oracle Support https://support.oracle.com under the tab "Certifications" or on the Oracle Technical Resources (formerly Oracle Technology Network) website https://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html



Wednesday, May 23, 2018

Oracle Reports 12c and DESTYPE=blobdestination

Last week a colleague of mine contacted me to support him for a problem to configure and use Oracle Reports 12c (12.2.1.2.0 and 12.2.1.3.0) with DESTYPE=blobdestination, which means instead of displaying a rendered Report like PDF or XLS or HTML in the Browser to store the generated Report in a LOB into an underlying table in an Oracle Database.

At first you will need to download the BLOBDestination11g.jar (even when its compiled for Oracle Reports 11g, you can use it with Oracle Reports 12c) from My Oracle Support Note 11514155.1 https://support.oracle.com/epmos/faces/DocContentDisplay?id=1151455.1

Transfer the BLOBDestination11g.jar to your Server hosting your Oracle Forms & Reports 12c (e.g. /tmp) and copy it as BLOBDestination.jar to $ORACLE_HOME/reports/jlib

# Copy BLOBDestination11g.jar to $ORACLE_HOME/reports/jlib
cd /tmp
cp BLOBDestination11g.jar $ORACLE_HOME/reports/jlib/BLOBDestination.jar

As next we need to create a table which should receive our generated Reports PDF document.

# connect to your application schema and create following table
sqlplus test/Oracle12c@frrepo
SQL> create table executed_reports ( 
 ID            NUMBER NOT NULL
,CREATED_DATE TIMESTAMP DEFAULT SYSDATE
,CREATED_BY   VARCHAR2(20) DEFAULT USER
,REPORT_DOC   BLOB
,FILE_NAME    VARCHAR2(255));

The next part is depending if you are using an Oracle Reports In-Process Server or a Standalone Server.

Configuration for an In-Process Server

Connect to your Server which is hosting your Oracle Forms & Reports 12c environment and navigate to your $DOMAIN_HOME. There you will have to modify your eventually already existing setUserOverrides.sh or create a new setUserOverrides.sh in $DOMAIN_HOME/bin and modify the rwserver.conf configuration file for your In-Process Server

# add following block or 
# create a new setUserOverrides.sh with following block
# and align the Name of the Managed Server for Reports
# and align the ORACLE_HOME_PATH to your ORACLE_HOME

if [ "${SERVER_NAME}" = "<Name_ManagedServer_Reports>" ]; then
   export POST_CLASSPATH=<ORACLE_HOME_PATH>/reports/jlib/BLOBDestination.jar:$POST_CLASSPATH
fi

# e.g.

if [ "${SERVER_NAME}" = "MS_REPORTS" ]; then
   export POST_CLASSPATH=/u00/app/oracle/product/fmw-fr-12.2.1.2.0/reports/jlib/BLOBDestination.jar:$POST_CLASSPATH
fi

Then you will have to modify the rwserver.conf for your In-Process Server and add a new destination type. The rwserver.conf you can find under $DOMAIN_HOME/config/fmwconfig/components/<Name_ManagedServer_Reports>/applications/reports_12.2.1/configuration

# find the line with 
# <destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWebDAV"/>
# and add following line with the new destination type=BLOBDestination

<destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWebDAV"/>
<destination destype="BLOBDestination" class="oracle.reports.plugin.destination.blob.BLOBDestination"/>

Now restart your Managed Server for Reports and you are ready.

To test, just execute a Reports Call directly in your Browser:

http://<Your_Server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=<Your_Test_Report>.rdf&userid=<App_User>/<Password>@<TNS_ALIAS>&DESTYPE=blobdestination&DESFORMAT=PDF&DESNAME=http://<App_User>:<Pasword>@<Your_Server>:<Listener_Port>/<ORACLE_SID>/<target_table>/<BLOB_Column>/<ID_Column>/<ID_Value>/<FileName_Column>

e.g.:

http://forms12:9002/reports/rwservlet?report=test.rdf&userid=test/Oracle12c@frrepo&DESTYPE=blobdestination&DESFORMAT=PDF&DESNAME=http://test:Oracle12c@forms12:1521/FRREPO/executed_reports/report_doc/ID/1/file_name

After that you will see in your target table for the Reports a row with your generated Reports PDF Document.

Configuration for a Standalone Reports Server

Connect to your Server which is hosting your Oracle Forms & Reports 12c environment and navigate to your $DOMAIN_HOME/reports/bin. There you will have to modify the reports.sh and modify the rwserver.conf configuration file for your In-Process Server

# Search for REPORTS_CLASSPATH in reports.sh
# and add the BLOBDestination.jar

REPORTS_CLASSPATH=${ORACLE_HOME}/reports/jlib/BLOBDestination.jar:${ORACLE_HOME}/reports/jlib/rwbuilder.jar:${ORACLE_HOME}/reports/jlib/rwrun.jar:${ORACLE_HOME}/jlib/zrclient.jar; export REPORTS_CLASSPATH

Then you will have to modify the rwserver.conf for your Standalone Reports Server and add a new destination type. The rwserver.conf you can find under $DOMAIN_HOME/config/fmwconfig/components/ReportsServerComponent/<Reports_Server_Name>

# find the line with 
# <destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWebDAV"/>
# and add following line with the new destination type=BLOBDestination

<destination destype="WebDav" class="oracle.reports.plugin.destination.webdav.DesWebDAV"/>
<destination destype="BLOBDestination" class="oracle.reports.plugin.destination.blob.BLOBDestination"/>

After that restart your Standalone Reports Server and thats all.

To test, just execute a Reports Call directly in your Browser:

http://<Your_Server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=<Your_Test_Report>.rdf&userid=<App_User>/<Password>@<TNS_ALIAS>&DESTYPE=blobdestination&DESFORMAT=PDF&DESNAME=http://<App_User>:<Pasword>@<Your_Server>:<Listener_Port>/<ORACLE_SID>/<target_table>/<BLOB_Column>/<ID_Column>/<ID_Value>/<FileName_Column>

e.g.:

http://forms12:9002/reports/rwservlet?report=test.rdf&userid=test/Oracle12c@frrepo&DESTYPE=blobdestination&DESFORMAT=PDF&DESNAME=http://test:Oracle12c@forms12:1521/FRREPO/executed_reports/report_doc/ID/1/file_name

After that you will see in your target table for the Reports a row with your generated Reports PDF Document.


Thursday, December 7, 2017

Oracle Forms & Reports on Docker - The Concept and Technique behind

In the last days I was working on my Oracle Forms & Reports in Docker solution and I already published it via my blog and in my personal GitHub Repository.

With this blog post, I want to explain the Concept and Technique behind my solution and the motivation.

Lets start with the motivation :-) With the Oracle Forms & Reports 12.2.x releases, Oracle has decided to remove the option to create script-based the WebLogic Domain for Oracle Forms & Reports. In case, I just have to install and configure one server with Oracle Forms & Reports, its quite fine to click through the Domain Configuration Wizard, but normally you don't have to configure just one environment, mostly 3 or more environments. Questions directed to Oracle, if the script-based configuration will be enabled again, were just answered with "you have to use the graphical Domain Configuration Wizard" ...
So, Jan-Peter Timmermann (https://jan-peter.me), Robert Crames (http://robertcrames.blogspot.ch) and I, were developing together a script set for installation and configuration of a complete Oracle Forms & Reports 12.2.x environment on Unix (Linux and so on) Servers, because we couldn't accept the fact, that we should start the Domain Configuration Wizard and click through several times just to create multiple Oracle Forms & Reports 12.2.x environments. 
The blog posts including the source code with the above mentioned solution can be found here:
We used this solution in our own test labs and also in real-life for customers, which reduced the efforts in installing and configuring Oracle Forms & Reports 12.2.x environments dramatically.

As I am a Docker fan and using heavily the by Oracle provided Docker solutions on https://github.com/oracle/docker-images, the next step was for me, to convert/integrate our script based solution for Oracle Forms & Reports into a Docker Image and here we are ...

The concept and technique behind the Oracle Forms & Reports in Docker solution is quite straight forward and simple.

Assuming you have a server with Docker (I personally prefer an Oracle Enterprise Linux 7.4 with Docker Engine from the Oracle Repos), you just have to decide if your Oracle Database for the required Metadata Repository for Oracle Forms & Reports should be also residing in your Docker or you have somewhere else (native) an Oracle Database (I am using an Oracle Database inside Docker on the same Docker server).
So at first you will pull your Oracle Linux 7 Image, which will be used as Base Image for your Oracle Database Image. For this I highly recommend the Oracle provided solution on GitHub (https://github.com/oracle/docker-images/tree/master/OracleDatabase) mainly maintained by Gerald Venzl (https://twitter.com/GeraldVenzl). After you got your Oracle DB Image installed, you just have to create your Oracle Database by following the instructions on https://github.com/oracle/docker-images/tree/master/OracleDatabase#running-oracle-database-in-a-docker-container.

The next step is to build up your Oracle Forms & Reports Stack, just get a copy of my GitHub Repository https://github.com/DirkNachbar/Docker. Download all the required Software binaries (JDK, Oracle WebLogic Server Infrastructure, Oracle Forms & Reports, optionally SQL Developer if you want to use Forms Application Deployment Services) for your desired Release (currently I am supporting Forms & Reports 12.2.1.2.0 and 12.2.1.3.0 ).

The first step is to create your JDK Image (I am using a full JDK and not a server-side version), based on Oracle Linux 7 Base Image (will be automatically pulled if not present).
As next you will need to create your WebLogic Server Infrastructure Image based on the prior created JDK Image. Within the creation of the WebLogic Server Infrastructure Image, I am also installing all required RPM's for Oracle Forms & Reports and fixing the libXm.so bug (without this fix Oracle Reports will not work).
After that you will need to create the Forms & Reports Image, based on the prior created WebLogic Server Infrastructure Image. During the build of the Oracle Forms & Reports Image, all required scripts for the Domain creation will be copied into the Image. These scripts will be used in the final step by the docker-compose file. In case you are using Forms & Reports 12.2.1.3.0, you have also the option to use Forms Application Deployment Services (FADS). For this, if the variable DC_FADS12C is set to true in the OracleFormsReports/setenv.sh, the Image will transfer the required SQL Developer binary file and replace the old version of the SQL Developer under the Oracle Forms & Reports ORACLE_HOME directory.

Before you proceed with the final step to create your Forms & Reports Domain, you need to align the script OracleFormsReports/setenv.sh. This is the most important step before you start with the Domain creation. 
Most of the variables, which will be declared within the setenv.sh script are self-explained, like DC_ADM_USER, DC_ADM_PWD and so on). Some variables you need to take care very well, like the DC_DB%. In case you don't align them to your environment, the creation of the Metadata Repository will fail and finally your Domain creation will fail. 
Another important variable is DC_USERHOME, this one configures the to be used volume on your Docker host, which will be mapped from your Docker Container. I am using volumes within the Forms & Reports Docker Container, which will contain the complete DOMAIN_HOME, because this allows you later on, to configure directly from your Docker host on the defined volume various settings, eg. formsweb.cfg, rwserver.conf, httpd.conf and so on. The defined DC_USERHOME you will have to create before you are starting with the Domain creation.

Finally (make sure that your target Database for the Metadata Repository is up and running) you can start the Domain Creation with the provided docker-compose file, which will create you a base domain, extend this with Forms & Reports, configure an Oracle HTTP Server (OHS) and creates you a Reports Server and finally it will configure port-forwarding from your Docker Container to your Docker Host of the most important ports, e.g. WebLogic Admin Server, Managed Servers and Oracle HTTP Server. The provided docker-compose script will take all the defined variables from the setenv.sh script and push them into to the to-be created Container, so that at the beginning mentioned script-set for creating the Domain for Forms & Reports can use them.
For fans of the new feature Forms Application Deployment Services (FADS), which is available from release 12.2.1.3.0 going. I have also implemented a pre-configuration task within the Domain creation for FADS, so that you just need later on, when your Container is running, to execute the fads_config.py script to get your FADS functionality. 

In case something goes wrong during the Domain creation, you can easily wipe out your half-Docker Container with "docker rm frfmw" and dont forget to cleanup below your defined volume ($DC_USERHOME/user_projects) potentially created directories like domains or applications. And then you can restart with the docker-compose your creation of the Docker Container.

The last step is, after a successful build of the Docker Container, to start the Container. For this you can use the command "docker start frfmw" and thats all ...

I will regularly update or enhance my Docker solution for Oracle Forms & Reports, so check out my GitHub Repository (https://github.com/DirkNachbar/Docker) from time to time. Or if you have some specific needs, just drop me a message here or give me a message in Twitter (https://twitter.com/DirkNachbar) or create a Issue on the GitHub Repository.

Last words: even when Oracle tells you, something is not possible, mostly it is ;-)

I hope you will enjoy and use my Docker solution for Oracle Forms & Reports ;-) 


Tuesday, December 5, 2017

Oracle Forms & Reports 12.2.1.3.0 with FADS in Docker

The next release of my Oracle Forms & Reports 12.2.1.3.0 Docker solution is now containing an option on running the Oracle Forms Application Deployment Services (FADS) within the Docker container.

The source code can be found under my personal GitHub Repository: https://github.com/DirkNachbar/Docker

Feel free to get a copy and enjoy playing around with Oracle Forms Application Deployment Services (FADS) under a Docker container.





Friday, December 1, 2017

Oracle Forms & Reports 12.2.1.3.0 in Docker

After I published yesterday my Docker solution for Oracle Forms & Reports 12.2.1.2.0, I received several question, if and when there will be a Docker solution for Oracle Forms & Reports 12.2.1.3.0.

Here we go, I spent once again some time and created the necessary Docker files and uploaded them to my GitHub Repository https://github.com/DirkNachbar/Docker

Now the above referenced Repository contains the necessary Docker files and docker-compose files for building Oracle Forms & Reports 12.2.1.2.0 and Oracle Forms & Reports 12.2.1.3.0.



In the README.md you will find two main sections, "How to build Oracle Forms & Reports 12.2.1.2.0" https://github.com/DirkNachbar/Docker#how-to-build-oracle-forms--reports-122120 and "How to build Oracle Forms & Reports 12.2.1.3.0" https://github.com/DirkNachbar/Docker#how-to-build-oracle-forms--reports-122130

Feel free to grab a copy of my Repository and enjoy Oracle Forms & Reports under Docker ;-)

Thursday, November 30, 2017

Oracle Forms & Reports 12.2.1.2.0 in Docker

As Robert Crames and me has developed some times ago a script set to install and configure Oracle Forms & Reports 12.2.1.2.0 completely silent and unattended, the next step was for me to port this all to Docker ;-)


Oracle has a really good GitHub Repository (https://github.com/oracle/docker-images) with several Oracle Products, but no Docker Image for Oracle Forms & Reports :-(

So I spent some time and managed to port our above mentioned script set for Oracle Forms & Reports 12.2.1.2.0 to build a Docker image for Oracle Forms & Reports.

The complete set of Docker build files and a docker-compose sample can be found under my GitHub Repository https://github.com/DirkNachbar/Docker

My solution is mainly based on Oracle Images, but very modified:

  • OracleJava:
    • instead of pulling an oraclelinux:7-slim, I am using an oraclelinux:latest.
    • instead of using an Oracle Server JRE, I am using an Oracle JDK 
  • OracleFMWInfrastructure:
    • within this Image, which is based on the above OracleJava Image, I am installing all required RPM's for Oracle Forms & Reports, eg. motif, compat-libstdc++-33 and so on and implementing the libXm.so fix directly for Oracle Reports
  • OracleFormsReports:
    • this is completely new developed by me. This installs on top of the OracleFMWInfrastructure Image the Oracle Forms & Reports 12.2.1.2.0 Software
    • with a sample docker-compose file you can create a required Oracle Database based on the Oracle Database Image https://github.com/oracle/docker-images/tree/master/OracleDatabase for the Metadata Repository and you can create the Oracle Forms & Reports 12.2.1.2.0 Domain including configuration of an Oracle HTTP Server and an Oracle Reports Server
    • The storage location for the Oracle Database Files will be a volume on your Docker host and also the storage location for the $DOMAIN_HOME of the Oracle Forms & Reports 12.2.1.2.0 Domain will be a volume on your Docker host.
      • With the usage of the volume on your Docker host, you are able to modify all Oracle Forms & Reports configuration files. E.g. formsweb.cfg, rwserver.conf and so on directly on your Docker host
I will regularly update my Repository, next ToDo is to provide Docker Images for Oracle Forms & Reports 12.2.1.3.0


So, feel free to pull my GitHub Repository and play around with my solution ;-) any comments, feature requests are welcome, just drop me a comment here ...

Update 1st December 2017: As I received several questions, if and when Oracle Forms & Reports 12.2.1.3.0 in Docker will be available in my GitHub Repository, I spent some time on it and here we go http://dirknachbar.blogspot.ch/2017/12/oracle-forms-reports-122130-in-docker.html


Friday, September 29, 2017

Configure Oracle Reports 12c (12.2.x) for destype=file

I currently had in a project a request, that Oracle Reports should be generated with the option destype=file to a specific location on the server which is hosting the Oracle Forms & Reports 12c environment.

Since Oracle Forms & Reports 12c, the so called "File System Access Control" is enabled by default, so any request like http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 will fail:

When you check the corresponding log files for your Reports Server you will find following:

cd $DOMAIN_HOME/servers/<ReportsServerName>/logs
vi rwEng-0_diagnostic.log

[2017-09-29T10:27:14.058+02:00] [reports] [INCIDENT_ERROR] [REP-69] [oracle.reports.engine] [tid: 12] [ecid: 0000LvCjcD33n3WjLxjO8A1PnW5h000008,0:1:100000001] [EngineName: rwEng-0] REP-69 : An internal error occurred[[
REP-56133: Access is denied to write to the specified location.

oracle.reports.RWException: IDL:oracle/reports/RWException:1.0
        at oracle.reports.engine.EngineImpl.run(EngineImpl.java:553)
        at oracle.reports.engine.EngineClassPOA._invoke(EngineClassPOA.java:104)
        at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:654)
        at com.sun.corba.se.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:205)
        at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1700)
        at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1558)
        at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:940)
        at com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:198)
        at com.sun.corba.se.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:712)
        at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:471)
        at com.sun.corba.se.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1230)
        at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:490)
        at com.sun.corba.se.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:519)

]]
[2017-09-29T10:27:14.058+02:00] [reports] [NOTIFICATION] [] [oracle.reports.engine] [tid: 12] [ecid: 0000LvCjcD33n3WjLxjO8A1PnW5h000008,0:1:100000001] [EngineName: rwEng-0] EngineImpl:run  oracle.reports.RWException: IDL:oracle/reports/RWException:1.0

You simply have to edit your rwserver.conf of your Reports Server and add the required folderAccess option within your engine. The required folderAccess option looks like that:

# Single Target Directory
      <folderAccess>
          <write>Target_Directory</write>
      </folderAccess>

# Multiple Target Directories are separated with semi-colon
      <folderAccess>
          <write>Target_Directory1;Target_Directory2</write>
      </folderAccess>


Example:

cd $DOMAIN_HOME/config/fmwconfig/components/ReportsServerComponent/<ReportsServerName>
vi rwserver.conf

<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<server  
    xmlns="http://xmlns.oracle.com/reports/server"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    >

   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <property name="cacheDir" value="/u00/app/oracle/demo_app/tmp"/>
      <!--property name="maxCacheFileNumber" value="max number of cache files"/-->
   </cache>
   <!--Please do not change the id for reports engine.-->
   <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.-->
   <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="5" minEngine="2" engLife="50" >
      <property name="sourceDir" value="/u00/app/oracle/demo_app/reports"/>
      <property name="tempDir" value="/u00/app/oracle/demo_app/tmp"/>
      <!--property name="keepConnection" value="yes"/-->
      <folderAccess>
          <write>/u00/app/oracle/demo_app/rep_output</write>
      </folderAccess>
   </engine>
   <engine id="rwURLEng" class="oracle.reports.urlengine.URLEngineImpl" maxEngine="1" minEngine="0" engLife="50" />

   <security id="rwJaznSec" class="oracle.reports.server.RWJAZNSecurity"/>
. . .
. . .

After the above changes, you need to stop and start your Reports Server

cd $DOMAIN_HOME/bin
./stopComponent.sh <ReportsServerName>
./startComponent.sh <ReportsServerName> 

# e.g.:
./stopComponent.sh rep_server1
./startComponent.sh rep_server1

Now you can re-run the URL request http://<server>:<Port_of_ManagedServer_Reports>/reports/rwservlet?report=test.rdf&userid=test/test@db1&destype=file&desformat=pdf&desname=/u00/app/oracle/demo_app/rep_output/test.pdf&server=rep_server1 and your PDF named test.pdf will be generated under your target directory you defined in the URL with parameter desname.


Now, lets take the stuff one level upper :-) in some case you will have different sub directories below in which you want to generate your Reports. To list them all by semi-colon separated under the folderAccess parameter is not really my personal goal, so lets try it with wildcard:

# Target Directory with wildcard for sub directories
      <folderAccess>
          <write>Target_Directory/*</write>
      </folderAccess>

In my corresponding rwserver.conf it would look like that:

<?xml version = '1.0' encoding = 'ISO-8859-1'?>
<server  
    xmlns="http://xmlns.oracle.com/reports/server"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    >

   <cache class="oracle.reports.cache.RWCache">
      <property name="cacheSize" value="50"/>
      <property name="cacheDir" value="/u00/app/oracle/demo_app/tmp"/>
      <!--property name="maxCacheFileNumber" value="max number of cache files"/-->
   </cache>
   <!--Please do not change the id for reports engine.-->
   <!--The class specifies below is subclass of _EngineClassImplBase and implements EngineInterface.-->
   <engine id="rwEng" class="oracle.reports.engine.EngineImpl" maxEngine="5" minEngine="2" engLife="50" >
      <property name="sourceDir" value="/u00/app/oracle/demo_app/reports"/>
      <property name="tempDir" value="/u00/app/oracle/demo_app/tmp"/>
      <!--property name="keepConnection" value="yes"/-->
      <folderAccess>
          <write>/u00/app/oracle/demo_app/rep_output/*</write>
      </folderAccess>
   </engine>
   <engine id="rwURLEng" class="oracle.reports.urlengine.URLEngineImpl" maxEngine="1" minEngine="0" engLife="50" />

   <security id="rwJaznSec" class="oracle.reports.server.RWJAZNSecurity"/>
. . .
. . .

After the above changes, restart your Reports Server once again in order to catch the changed rwserver.conf changes.

Under the target directory /u00/app/oracle/demo_app/rep_output I have 2 sub directories called out1 and out2. So lets try to set the desname parameter in the URL call to desname=/u00/app/oracle/demo_app/rep_output/out1/test.pdf
The result will be:


:-( but no worries, just download the patch 22334822 https://updates.oracle.com/download/22334822.html. The patch is available for following Releases:

  • Oracle Reports 12.2.1.0.0
  • Oracle Reports 12.2.1.1.0
  • Oracle Reports 12.2.1.2.0


Simply apply this patch to your Oracle Forms & Reports installation:

# Stop your complete Oracle Forms & Reports Environment
# All Reports Servers, Oracle HTTP Server (OHS), Managed Servers, Admin Server and Node Manager

# unzip the patch and navigate to the sub directory 22334822
unzip p22334822_122120_Generic.zip
cd 22334822
$ORACLE_HOME/OPatch/opatch apply
Oracle Interim Patch Installer version 13.9.1.0.0
Copyright (c) 2017, Oracle Corporation.  All rights reserved.


Oracle Home       : /u00/app/oracle/product/fmw-fr-12.2.1.2.0
Central Inventory : /u00/app/oraInventory
   from           : /u00/app/oracle/product/fmw-fr-12.2.1.2.0/oraInst.loc
OPatch version    : 13.9.1.0.0
OUI version       : 13.9.1.0.0
Log file location : /u00/app/oracle/product/fmw-fr-12.2.1.2.0/cfgtoollogs/opatch/opatch2017-09-29_14-50-57PM_1.log

OPatch detects the Middleware Home as "/u00/app/oracle/product/fmw-fr-12.2.1.2.0"

Verifying environment and performing prerequisite checks...
OPatch continues with these patches:   22334822  

Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/u00/app/oracle/product/fmw-fr-12.2.1.2.0')

Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '22334822' to OH '/u00/app/oracle/product/fmw-fr-12.2.1.2.0'

Patching component oracle.reports.core, 12.2.1.2.0...
Patch 22334822 successfully applied.
Log file location: /u00/app/oracle/product/fmw-fr-12.2.1.2.0/cfgtoollogs/opatch/opatch2017-09-29_14-50-57PM_1.log

OPatch succeeded.

# Afterwards validate that the patch is applied
$ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 13.9.1.0.0
Copyright (c) 2017, Oracle Corporation.  All rights reserved.

. . .
. . .

Interim patches (9) :

Patch  22334822     : applied on Fri Sep 29 14:51:09 CEST 2017
Unique Patch ID:  20728353
Patch description:  "One-off"
   Created on 1 Nov 2016, 01:05:08 hrs PST8PDT
   Bugs fixed:
     22334822

. . .
. . .

Now, just startup your complete Oracle Forms & Reports Environment and you can even use the wildcard option with the folderAccess parameter.

In case you are already on Oracle Forms & Reports 12.2.1.3.0, you are lucky the patch 22334822 is already included and you can use directly the wildcard option :-)

Wednesday, September 6, 2017

Starting and Stopping Oracle Reports Servers with WLST

Normally people are using to start and stop their Oracle Reports Servers the by Oracle provided scripts startComponent.sh and stopComponent.sh in the $DOMAIN_HOME/bin.

The problem with this set of scripts is, that they really take long time to complete and you need to execute it for each Reports Server:
cd $DOMAIN_HOME/bin
# Lets measure the time
time ./startComponent.sh rep_server1
Starting system Component rep_server1 ...

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Reading domain from /u00/app/oracle/user_projects/domains/demo_domain
 
Connecting to Node Manager ...
<Sep 6, 2017 8:45:02 PM CEST> <Info> <Security> <BEA-090905> <Disabling the CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true.> 
<Sep 6, 2017 8:45:02 PM CEST> <Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG128 to HMACDRBG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true.> 
<Sep 6, 2017 8:45:02 PM CEST> <Info> <Security> <BEA-090909> <Using the configured custom SSL Hostname Verifier implementation: weblogic.security.utils.SSLWLSHostnameVerifier$NullHostnameVerifier.> 
Successfully Connected to Node Manager.
Starting server rep_server1 ...
Successfully started server rep_server1 ...
Successfully disconnected from Node Manager.

Exiting WebLogic Scripting Tool.

Done

real   0m22.784s
user   0m37.029s
sys    0m2.065s

As you can see, the time to startup a single Oracle Reports Server can be up to 22 seconds (depending on your server, might be a bit lesser or more) and on top the execution for the startComponent.sh is only for one Oracle Reports Server, so in case you have multiple Oracle Reports Servers, you need to execute the startComponent.sh for each Reports Server . . .

With a simple Python Script for WLST you can perform the startup task much quicker and you can perform within one execution of my Python Script multiple startups and shutdowns for several Oracle Reports Servers.

You will need files for that:
  • domain.properties: which contains the required connect informations for the Node Manager and a comma separated list of your Oracle Reports Servers
  • start_stop_reports.py: a Python Script with named arguments to start or stop your provided Reports Servers within the domain.properties file
domain.properties:
# Replace with your Port of Node Manager
nm.port=5556
# Replace with your Hostname
nm.host=localhost
# Replace with your Password
nm.password=welcome1
# Replace with your Username
nm.username=nodemanager
# Replace your Domain Name
domain.name=demo_domain
# Replace your Domain Home
domain.home=/u00/app/oracle/user_projects/domains/demo_domain
# Replace with your Reports Server Name
reports.servers=rep_server1,rep_server2,rep_server3

start_stop_reports.py:
# ============================================================
#
# Script: start_stop_reports.py
#
# Author: Dirk Nachbar, http://dirknachbar.blogpost.com
#
# Purpose: Start / Stop Script for a list of Oracle Reports Servers
#
# ============================================================

import sys
import re
import os
from datetime import datetime
from java.io import File
from java.io import FileOutputStream
from java.io import FileInputStream
 
func=''
propfile=''
 
def helpUsage():
   print 'Usage: start_stop_reports.py [-help]'
   print '      [-function] provide function either start or stop'
   print '      [-propfile] provide the property file'
   exit()
 
for i in range(len(sys.argv)):
   if sys.argv[i] in ("-help"):
           helpUsage()
   elif sys.argv[i] in ("-function"):
           if i+1 < len(sys.argv):
                   func = sys.argv[i+1]
   elif sys.argv[i] in ("-propfile"):
           if i+1 < len(sys.argv):
                   propfile = sys.argv[i+1]
 
if len(func)==0 or len(propfile)==0:
   print 'Missing required arguments (-func, -propfile)'
   print ' '
   helpUsage()
 
# Load Connection Properties
propInputStream = FileInputStream(propfile)
configProps = Properties()
configProps.load(propInputStream)
nmPort=configProps.get("nm.port")
nmHost=configProps.get("nm.host")
nmPassword=configProps.get("nm.password")
nmUser=configProps.get("nm.username")
domainName=configProps.get("domain.name")
domainHome=configProps.get("domain.home")
reportsServers=configProps.get("reports.servers")
 
# Connect to Node Manager
nmConnect(nmUser, nmPassword, nmHost, nmPort, domainName, domainHome, 'ssl')
 
# Perform startup of defined Oracle Reports Servers
if func=="start":
   print 'Starting configured Reports Servers'
   for repserver in reportsServers.split(','):
      print 'Starting Reports Server: ' +repserver
      nmStart(serverName=repserver, serverType='ReportsServerComponent')
 
# Perform stop of defined Oracle Reports Servers
if func=="stop":
   print 'Stopping configured Reports Servers'
   for repserver in reportsServers.split(','):
      print 'Stopping Reports Server: ' +repserver
      nmKill(serverName=repserver, serverType='ReportsServerComponent')


The execution of the script is really straight forward:
Usage: start_stop_reports.py [-help]
      [-function] provide function either start or stop
      [-propfile] provide the property file


# Just call the script with wlst and provide the required parameters
# e.g. for starting all defined Reports Servers (rep_server1,rep_server2,rep_server3)

$ORACLE_HOME/oracle_common/common/bin/wlst.sh start_stop_reports.py -func start -propfile domain.properties

# e.g. for stopping all defined Reports Servers (rep_server1,rep_server2,rep_server3)

$ORACLE_HOME/oracle_common/common/bin/wlst.sh start_stop_reports.py -func stop -propfile domain.properties


Now let's see how long it will take to startup 3 Oracle Reports Servers with my above solution:
# Let's measure the time to execute
time $ORACLE_HOME/oracle_common/common/bin/wlst.sh start_stop_reports.py -func start -propfile domain.properties
Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Connecting to Node Manager ...
<Sep 6, 2017 9:15:17 PM CEST> <Info> <Security> <BEA-090905> <Disabling the CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true.> 
<Sep 6, 2017 9:15:17 PM CEST> <Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG128 to HMACDRBG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true.> 
<Sep 6, 2017 9:15:17 PM CEST> <Info> <Security> <BEA-090909> <Using the configured custom SSL Hostname Verifier implementation: weblogic.security.utils.SSLWLSHostnameVerifier$NullHostnameVerifier.> 
Successfully Connected to Node Manager.
Starting configured Reports Servers
Starting Reports Server: rep_server1
Starting server rep_server1 ...
Successfully started server rep_server1 ...
Starting Reports Server: rep_server2
Starting server rep_server2 ...
Successfully started server rep_server2 ...
Starting Reports Server: rep_server3
Starting server rep_server3 ...
Successfully started server rep_server3 ...

real   0m13.602s
user   0m22.066s
sys    0m0.915s

As you can see with my solution, you will need only 13 seconds to startup three Oracle Reports Servers and thats just with one command instead of calling startComponent.sh or stopComponent.sh three times and each execution takes around 22 seconds.


Wednesday, October 19, 2016

Oracle Forms & Reports 12.2.1.2.0 available

Since a few hours the latest Release of the Oracle Forms & Reports 12.2.1.2.0 is available for download in Oracle Technology Network under http://www.oracle.com/technetwork/developer-tools/forms/downloads/index.html



The related documentation can be found under https://docs.oracle.com/middleware/12212/formsandreports/index.html



For all the lovers of Oracle Reports, here is the bad news: It's time to prepare for bye-bye !

The next planned Oracle Reports 12.2.1.3 will be the terminal release for Oracle Reports !

Note can be found here http://tinyurl.com/ReportsDeprecation





Wednesday, October 5, 2016

Configure TNS_ADMIN variable for Oracle Reports 12c

In many case you struggle with the location of the tnsnames.ora file under Oracle Reports 12c. The default location for the tnsnames.ora is placed within your WebLogic Domain Home directory $DOMAIN_HOME/config/fmwconfig/tnsnames.ora

But in many case you have already a defined TNS_ADMIN variable which is pointing to a central location, e.g. $ORACLE_BASE/network/admin and maintaining various copies of a tnsnames.ora is not really useful and will cause various problems.

In order to instruct your Oracle Reports Server to use your central location for the tnsnames.ora simply add the necessary variable TNS_ADMIN in the provided rwserver.sh script under your $DOMAIN_HOME/reports/bin directory:

#!/bin/sh
#
# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
#
# Add Variable TNS_ADMIN and align to your location
TNS_ADMIN=/u00/app/oracle/network/admin
export TNS_ADMIN

DOMAIN_HOME=/u00/app/oracle/user_projects/domains/fr_domain
export DOMAIN_HOME

. ${DOMAIN_HOME}/reports/bin/reports.sh

exec nohup $ORACLE_HOME/bin/rwserver "$@" | tee -a reports.log

After you have done the above changes, restart your Oracle Reports Server with follwoing commands:

cd $DOMAIN_HOME/bin
./stopComponent.sh <your_Reports_Server_Name>
./startComponent.sh <your_Reports_Server_Name> 

Finally validate with the rwservlet command showenv, if the TNS_ADMIN variable is correctly assigned to your Reports Server, http://<servername>:<port>/reports/rwservlet/showenv?server=<Your_Reports_Server_Name>

Under the section "Oracle Reports Services - Server and Engine Environment Variables" you can see the definition of your TNS_ADMIN variable:




Wednesday, September 21, 2016

Configure jobStatusRepository in Oracle Reports 12c

Within this blog post I will show you how to configure the Oracle Reports 12c jobStatusRepository against an Oracle Database.

Within Oracle Reports since release 11.x a major change is, that within the jobStatusRepository configuration, we have now to use an entry in the Credential Store Facility (CSF).

At first create in your target database for the Reports Server Queue a user:

create user rwadmin identified by "Oracle12c" default tablespace users quota unlimited on users;
grant create table to rwadmin;
grant create view to rwadmin;
grant create trigger to rwadmin;
grant create procedure to rwadmin;
grant create sequence to rwadmin;

After you have created your user for the Reports Server Queue, go to the $ORACLE_HOME/reports/admin/sql directory of your Oracle Forms & Reports Installation, open a sqlplus and connect to your target database with the above created user and execute the rw_server.sql. This will create all necessary and required objects for the Reports Server Queue.

SQL> connect rwadmin/Oracle12c@<your tnsnames_entry>
SQL> @rw_server.sql

As next we need to create an entry in the Credential Store Facilty. For this connect to your Enterprise Manager for Fusion Middleware http://server:port/em and select from the WebLogic Menu the Option "Security / Credentials"



Here we need to create a Map


Providing a Map Name, e.g. reports and confirm with OK


After creating the Map, you should see as following and we can now create a Key attached to our Map.


Provide following informations:

  • Select the Map, in this example "reports"
  • Leave Type with "Password"
  • Provide User Name = choose Oracle Database User from above
  • Prove the Password of the Oracle Database User 2 times
  • Optionally you can provide a description



After you have created the Key, you should see following:


The next step would be normally to invoke the System MBean Browser in order to configure your jobStatusRepository, but as there is a small "unexpected feature" (some people call it even a bug :-) ), I will go now directly into the configuration file of the underlying Reports Server and add the necessary elements.

Simply go to the Directory $DOMAIN_HOME/fr_domain/config/fmwconfig/components/ReportsServerComponent/<your_reports_server_name> and open the configuration file rwserver.conf with an editor.

In case you are using the System MBean Browser to configure the below settings, the System MBean Browser will not add the necessary class reference "oracle.reports.server.JobRepositoryDB" and will cause that you can not startup your Reports Server.

For the below configuration provide the following values:

  • dbpassword = csf:<Your_Map_Name>:<Your_Key_Name>
  • dbconn = <Your_DB_Servername>:<LISTENER_PORT>:<ORACLE_SID>
  • dbuser = <Your_DB_Username>

   <jobStatusRepository class="oracle.reports.server.JobRepositoryDB">
      <property name="dbpassword" value="csf:reports:reports_repository"/>
      <property name="dbconn" value="forms12:1521:FRREPO"/>
      <property name="dbuser" value="rwadmin"/>
   </jobStatusRepository/>

Finally restart your Reports Server

cd $DOMAIN_HOME/bin
./stopComponent.sh <Your_Reports_Server_Name>
./startComponent.sh <Your_Reports_Server_Name>

Now you can generate a Report and you should be able to see the executed Reports in your Reports Server Queue in the Database





Sunday, October 25, 2015

Several New Oracle Fusion Middleware Components 12.2.1 available

Oracle has been busy releasing several new Release for various Oracle Fusion Middleware Components on Friday 23rd October 2015

Oracle WebLogic Server is now available as Release 12.2.1
Download can be found here: http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html

  • There are in general 3 options available for the latest Oracle WebLogic Server 12.2.1
    • Quick Installer for Developers for Windows, Linux and MAC OS X
    • Generic Installer
    • Fusion Middleware Infrastructure Installer
Oracle Forms & Reports is now also available in the Release 12.2.1
Download can be found here:

  • The latest Oracle Forms & Reports 12c (12.2.1) is available for following Operating Systems:
    • Windows 64bit
    • Linux x86-64
    • Oracle Solaris on SPARC (64bit)
    • Oracle Solaris on Intel (x86-84)
    • HP UX Itanium
    • IBM AIX on Power Systems (64bit)
Oracle Business Intelligence Enterprise Edition (OBIEE) is also released for 12.2.1.0.0
Download can be found here:

Oracle WebCenter has also been release with 12.2.1.
Oracle SOA Suite comes also along in a new release with 12.2.1


Happy Download :-)