Oracle forms and reports se ha convertido en una herramienta de la que muchas empresas a nivel mundial todavía dependen, apesar de que su última actualización ya tiene varios años en el mercado, se continúan creando ambientes y nuevos desarrollos para trabajar con Oracle forms and Reports, sin embargo, hay buenas noticias, Oracle acaba de anunciar que este año llegará una nueva versión de Oracle Fusion Middleware Infrastructure 14.1.2 la cual vendrá con importantes mejoras para Oracle forms and Reports, puedes leer más información sobre esta noticia en el siguiente link: Noticia
En esta entrada les brindaré una documentación detallada sobre como realizar la instalación de un ambiente de Oracle forms and reports 12c en un clúster de 3 nodos, este cluster constará de un nodo específicamente para el AdminServer y 3 nodos para ejecutar las instancias de forms and reports; todo esto será instalado en Oracle Linux.
Prerequisitos:
- Instalador Full ISO de Oracle linux 7.9 en su último release – Descargar
- Instaldor de la última versión del jdk de java 8 – Descargar
- Instalador de Oracle Fusion Middleware Infrastructure 12.2.1.2 – Descargar
- Instalador de Oracle Forms and Reports 12.2.1.2 – Descargar
- Instalador de jacob 1.18 – Descargar
- Instalador de webutil demo – Descargar
- Se debe tener instalada y configurada una instancia de base de datos Oracle, puede ser en el mismo servidor o en otro servidor preferiblemente y tener el string de conexión y acceso sysadmin al schema donde se instalará forms and reports.
Nota 1: La instalación fue completamente probada e instalada usando la versión 12.2.1.2 de Oracle forms and reports, si descarga una versión más reciente, es probable que se presente algún error extra que no venga solucionado en esta documentación.
Nota 2: Para esta instalación, el admin server quedará configurado en un nodo y las instancias de forms and reports se ejecutarán en los otros 3 nodos, si lo desea, puede balancear el admin server entre los 3 nodos donde se ejecute forms and reports utilizando una tarjeta de red virtual y almacenamiento compartido, sin embargo, eso no viene explicado en esta documentación, pero si se requiere, antes de leer esta documentación, puede leer la siguiente, donde explico como se hace: Cómo configurar un AdminServer de Weblogic 12c en Alta Disponibilidad
Pasos de instalación:
Cada paso estará anclado, entonces puede tocarlo para que lo lleve a la sección donde comienza:
- Preparación del ambiente
- Configuración de paquetes
- Configuración de hosts
- Instalación de Java 8
- Instalación de Oracle Fusion Middleware Infrastructure 12c
- Instalación de Oracle Forms and Reports 12c
- Creación del RCU
- Creación y configuración del dominio de Weblogic
- Pack y unpack del nodo 1 al nodo 2 y 3
- Configuraciones posteriores a la instalación
- Configuración para resolución de nombres de DNS en setDomain.env
- Configuración del nodemanager
- Primer inicio de todo
- Configuración de boot.properties
- Configuración de jacob 1.18
- Instalación y configuración de webutil_demo
- Creación de cluster de reptools y reports server
- Configuración de cluster de servidores de reportes en los 3 nodos usando un clustername
- Configuración de repositorio de jobs en la base de datos para el cluster de reports
- Configuración de OHS
- Tips y configuraciones extras
Preparación del ambiente
Antes de realizar la instalación del sistema operativo, primero debemos tener 4 máquinas virtuales o servidores físicos con al menos las siguientes características, recordemos que una será solo para el admin server y las otras 3 correrán las instancias de forms and reports:
Requerimientos mínimos:
- 8 gb de RAM
- 2 cpus
- 100 gb de almacenamiento
El almacenamiento podría ser mayor dependiendo la cantidad de formas que desee guardar en los servidores, es necesario usar una ruta o carpeta compartida entre los 3 nodos para que cuando se utilice la aplicación de forms, las formas se llamen siempre desde la misma ruta.
Ahora bien, teniendo las 4 máquinas, vamos a realizar la instalación del sistema operativo Oracle Linux 7.9 para ello, puede seguir la siguiente documentación donde explico como realizar la instalación a detalle Cómo instalar Oracle Linux tome en cuenta que las particiones del disco deberán quedar de la siguiente forma en todas las máquinas virtuales durante la instalación.
- /home 20 GB
- /oracle 25 GB
- / 50 GB
- /boot 1024 MB
- swap 3.96 GB
Luego de la instalación del sistema operativo, es recomendable aplicar los siguientes comandos:
Se debe configurar la política de selinux en permissive
- cat /etc/selinux/config
- SELINUX=permissive
Se debe detener el firewalld para la instalación, luego de la instalación, se debe volver a iniciar y habilitar los puertos necesarios para el funcionamiento de forms:
- systemctl stop firewalld
- systemctl disable firewalld
Configuración de paquetes
Antes de comenzar con la instalación de Oracle Fusion Middleware Infrastructure 12.2.1.2 se deben instalar los siguientes paquetes en el sistema opertivo, todo utilizando el usuario root:
yum install binutils -y yum install compat-libcap1 -y yum install compat-libstdc++-33 -y yum install compat-libstdc++-33.i686 -y yum install gcc -y yum install gcc-c++ -y yum install glibc -y yum install glibc.i686 -y yum install glibc-devel -y yum install glibc-devel.i686 -y yum install libaio -y yum install libaio-devel -y yum install libgcc -y yum install libgcc.i686 -y yum install libstdc++ -y yum install libstdc++.i686 -y yum install libstdc++-devel -y yum install ksh -y yum install make -y yum install sysstat -y yum install tigervnc* yum install ocfs2-tools -y yum install motif -y yum install motif-devel -y yum install numactl -y yum install numactl-devel -y
Y crearemos el usuario oracle y el grupo oinstall ejecutando los siguientes comandos:
groupadd oinstall useradd oracle usermod -g oinstall oracle
Configuración de hosts
Como vamos a instalar un ambiente Cluster, cada máquina deberá ver a la otras máquina, de modo que den ping y se puedan comunicar, para ello y para reconocerlas mejor, se debe configurar el hostname de cada máquina en el archivo /etc/hosts de manera que quede así:
Nodo1:
192.168.1.251 SA-CAPWLA-01 192.168.1.252 SA-CAPWLA-02 192.168.1.253 SA-CAPWLA-03 192.168.1.254 SA-CAPWLA-04
Nodo2:
192.168.1.251 SA-CAPWLA-01 192.168.1.252 SA-CAPWLA-02 192.168.1.253 SA-CAPWLA-03 192.168.1.254 SA-CAPWLA-04
Nodo3:
192.168.1.251 SA-CAPWLA-01 192.168.1.252 SA-CAPWLA-02 192.168.1.253 SA-CAPWLA-03 192.168.1.254 SA-CAPWLA-04
Nodo4:
192.168.1.251 SA-CAPWLA-01 192.168.1.252 SA-CAPWLA-02 192.168.1.253 SA-CAPWLA-03 192.168.1.254 SA-CAPWLA-04
De esta manera podremos llamar a cada máquina por un nombre definido y no una ip, esto nos ayudará a reconocerlos más fácilmente durante la instalación.
Instalación de Java 8
Debemos descargar el último release del jdk de java 8, el que tiene la extension tar.gz:

Cuando lo tengamos descargado, debemos pasarlo a cada máquina virtual, crearemos un folder en la ruta /oracle llamado java de manera que quede así:
mkdir /oracle/java -p
Pasaremos el instalador a esa ruta y luego lo debemos descomprimir usando el siguiente comando:
tar -xzvf jdk-8u401-linux-x64.tar.gz
De manera que quede así:

Ahora exportaremos algunas variables de entorno, para ello, abriremos el siguiente archivo /home/oracle/.bash_profile y le añadiremos lo siguiente:
export JAVA_HOME=/oracle/java/jdk1.8.0_281 export PATH=JAVA_HOME/bin:$PATH
Guardamos el archivo y luego ejecutaremos el siguiente comando para cargar las variables de entorno:
source /home/oracle/.bash_profile
Luego ejecutaremos java -version y nos deberá aparecer la siguiente información:

Nota: Recuerde que esto lo debe realizar en todos los nodos.
Instalación de Oracle Fusion Middleware Infrastructure 12c
La instalación de Oracle Fusion Middleware Infrastructure 12c se debe instalar en todos los nodos, para ello vamos a iniciar el instalador utilizando el siguiente comando:
java -jar /oracle /installers/wls/fmw_12.2.1.3.0_infrastructure.jar
Definiremos donde guardar el oraInventory:



Crearemos la ruta donde se instalará el Oracle Home:







Recuerde que la instalación de Oracle Fusion Middleware Infrastructure se debe instalar en todos los nodos antes de poder continuar con el siguiente paso, luego de tenerlo instalado, continúe.
Instalación de Oracle Forms and Reports 12c
Ahora procederemos a instalar Oracle forms and Reports 12c, esta instalación también se debe realizar en los 3 nodos:
cd unpacked_archive_directory/Disk1 ./runInstaller








Creación del RCU
En este paso, vamos a crear el RCU (Repository Creation Utility), esto únicamente lo ejecutaremos en el nodo1 donde estará el AdminServer los demás nodos no necesitan realizar este paso.
./oracle/Middleware/oracle_common/bin/rcu.sh


En la siguiente imagen colocaremos la información para conectarnos a nuestra base de datos, recuerde que debe tener un usuario con acceso sysdba para crear estos schemas:


Debemos colocar el nombre del nuevo schema, este se creará en la base de datos juntos con todos los componentes que seleccionemos, en este caso se llamará CAP, este nombre se solicitará más adelante así que guardalo:


Ahora le asignaremos una contraseña a todos los schemas, esta debe guardarse muy bien:







Recuerde que este paso únicamente se debe realizar en el nodo1 del AdminServer.
Creación y configuración del dominio de Weblogic
Este paso únicamente se debe ejecutar en el nodo1 del AdminServer también.
./oracle/Middleware/oracle_common/common/bin/config.sh
En este paso, debemos definir el nombre del dominio, este será el nombre de la última carpeta, en este caso promeapps:

En este siguiente paso, debemos definir cuales componentes tendrá nuestro dominio, marca los mismos que señalo en las siguientes 2 imágenes:


Aquí ya nos aparece el nombre del dominio como el de la última carpeta que creamos hace unos pasos:

Definiremos el usuario para acceder a la consola de administración de Weblogic y su contraseña:

En este paso, si elegimos ambiente de desarrollo, la diferencia será que al levantar la consola de administración, en el modo desarrollo no nos solicitará la contraseña del administrador, mientras que si lo ponemos en modo producción sí nos la solicitará:

Ahora, indicaremos el nombre del hostname de la máquina donde está la base de datos, el usuario, puerto y el schema CAP_STB junto con su contraseña, luego presionamos Get RCU Configuration y debemos verificar que la conexión diga «Successfully done»:


La revisión de los schemas debe salir en verde:

Acá elegiremos los componentes que necesitemos, en mi caso marqué los siguientes, y la verdad son los necesarios para una instalación productiva:

Indicaremos el nombre de nuestro AdminServer, el hostname por el cuál escuchará y el puerto por el que se desplegará el AdminServer:

Definimos la contraseña del Node Manager, esta será necesaria para el monitoreo de los servidores y para levantar los servicios usando el node manager:

Ahora en esta parte definiremos la cantidad de nodos que necesitemos ya sean 2, 3, 4, notese que cada WLS_FORMS y WLS_REPORTS llevan el mismo puerto, sin embargo, están en diferentes Listen Address ya que cada uno escucha por su propio hostname, además en la columna Server Groups debe elegir si es FORMS o REPORTS.

Debemos tener o crear los siguientes clusters:



Aquí, haremos la asignación de cada WLS_FORMS y cada WLS_REPORTS a su respectivo cluster:


Le colocaremos un nombre a cada Machine creada para cada cluster:

Asignaremos cada Machine a su respectivo nodo, en el nodo uno estará el AdminServer, para el caso de tener un tercer o cuarto nodo, solamente añadimos el nodo a otra máquina, cada una debe tener una máquina, un cluster y sus respectivos managed servers.



Aquí crearemos los componentes de forms y ohs, debemos tener uno por cada nodo:

Asegurese que cada uno apunte al hostname correcto:



Asignaremos cada forms y cada ohs a su respectivo nodo:



Presionamos Create y ahora a esperar:



Pack y unpack del nodo del AdminServer al nodo 1, 2 y 3
Ahora bien, debido a que las últimas configuraciones las hicimos en el nodo del AdminServer, ahora vamos a hacer un pack y unpack, esto es para copiar toda la configuración creada en Oracle forms and reports del nodo del AdminServer al nodo 1, 2 y 3, si tuvieramos más nodos, haríamos el mismo proceso para los demás.
Primero debemos ingresar al nodo del AdminServer y ejecutar los siguientes comandos, esto nos creará un jar que luego pasaremos al nodo 1, 2 y 3, en él vendrá toda la información de configuración del dominio que necesitamos:
cd /oracle/Middleware/oracle_common/common/bin ./pack.sh -managed=true -domain=/oracle/Middleware/user_projects/domains/promeapps -template=/oracle/frsdomain.jar -template_name=frsdomainTemplate

Movemos el jar hacía el nodo 1, 2 y 3, lo podemos mover usando scp como en la siguiente imagen:

Ahora procederemos a hacer el unpack en todos los nodos, para ello ejecutaremos los siguientes comandos:
cd /oracle/Middleware/oracle_common/common/bin ./unpack.sh -domain=/oracle/Middleware/user_projects/domains/promeapps -template=/oracle/frsdomain.jar -log_priority=DEBUG -log=/oracle/unpack.log -app_dir=/oracle/Middleware/user_projects/domains/promeapps
Opcional: overwrite_domain=true (Si añade este parámetro al comando anterior, permitirá sobreescribir un dominio ya existente)
Nodo1 de forms and reports:

Nodo2 de forms and reports:

Nodo3 de forms and reports:

Configuraciones posteriores a la instalación
Debemos ir a la siguiente ruta:
$DOMAIN_HOME/config
Debemos revisar si existe el archivo config.xml, en caso de que no exista, para se que cree, debemos levantar manualmente el WLS_FORMS1, 2 y 3 y WLS_REPORTS1, 2 y 3 en los nodos de forms respectivamente.
Vamos a $DOMAIN_HOME/bin en el nodo1:
./startManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-01:7003 ./startManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-01:7003
Luego vamos a $DOMAIN_HOME/bin en el nodo2:
./startManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-01:7003 ./startManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-01:7003
Y por último vamos a $DOMAIN_HOME/bin en el nodo3:
./startManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-01:7003 ./startManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-01:7003
Configuración para resolución de nombres de DNS en setDomain.env
Debemos ir a la siguiente ruta en el servidor del AdminServer:
$DOMAIN_HOME/bin
Dentro debemos hacer un back up del archivo setDomain.env.
Luego abriremos el archivo setDomain.env y añadiremos la siguiente línea en la línea 519:
export JAVA_OPTIONS=-Dweblogic.ResolveDNSName=true:$JAVA_OPTIONS

Configuración del nodemanager
En cada nodo debemos ir a la siguiente ruta:
$DOMAIN_HOME/nodemanager
Dentro debemos verificar el archivo nodemanager.properties, hay que asegurarse que el parámetro SecureListener este en true y que el parámetro ListenAddress tenga el nombre del hostname del nodo en el que esté.

Con esto configurado, ya será posible iniciar el NodeManager en cada nodo.
Primer inicio de todo
Para poder crear las instancias para posteriormente configurarlas, es necesario iniciar todo primeramente por consola de comandos.
Para ello nos iremos primeramente al nodo del AdminServer a $DOMAIN_HOME/bin y ejecutaremos lo siguiente:
./startWebLogic.sh nohup ./startNodeManager.sh > node.log 2>&1 & tail -f node.log
Ahora en todos los nodos de forms and reports, debemos iniciar el Node Manager, este permitirá la comunicación con el AdminServer para administrar todas las instancias desde la máquina del AdminServer, para ello, ejecutaremos el siguiente comando en cada nodo de forms and reports en $DOMAIN_HOME/bin:
nohup ./startNodeManager.sh > node.log 2>&1 & tail -f node.log
Luego debemos volver al nodo del AdminServer y ejecutaremos los siguientes comandos individualmente cada uno, en cada ejecución se solicitará el usuario y la contraseña de la consola de Weblogic, cuando la ejecución llegue al estado RUNNING, continuaremos con el siguiente comando, se pueden ejecutar en diferentes tabs.
Estos nos ayudará a crear las instancias de forms and reports en cada nodo:
./startManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-02:8001 ./startManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-02:8002 ./startManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-03:8001 ./startManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-03:8002 ./startManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-04:8001 ./startManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-04:8002
Para iniciar los ohs, es necesario irnos al enterprise manager:
http://SA-CAPWLA-01:7001/em

OHS1



OHS2



Ahora que ya iniciamos todo es necesario bajar todo forms and reports.
Para ello nos iremos al nodo del AdminServer a $DOMAIN_HOME/bin y ejecutaremos lo siguiente:
./stopManagedWebLogic.sh WLS_FORMS1 t3://SA-CAPWLA-02:8001 ./stopManagedWebLogic.sh WLS_REPORTS1 t3://SA-CAPWLA-02:8002 ./stopManagedWebLogic.sh WLS_FORMS2 t3://SA-CAPWLA-03:8001 ./stopManagedWebLogic.sh WLS_REPORTS2 t3://SA-CAPWLA-03:8002 ./stopManagedWebLogic.sh WLS_FORMS3 t3://SA-CAPWLA-04:8001 ./stopManagedWebLogic.sh WLS_REPORTS3 t3://SA-CAPWLA-04:8002
Luego iremos a cada nodo y bajaremos el node manager:
./stopNodeManager.sh
Y para bajar los ohs en el enterprise manager presionamos el botón de shut down en ohs1, ohs2 y ohs3.
Configuración de boot.properties
Ahora que tenemos las instancias creadas debemos crear el archivo boot.properties en cada manage server, para ello debemos hacerlo en cada nodo.
En el nodo01 iremos a la siguiente ruta:
$DOMAIN_HOME/servers/WLS_FORMS1/security
En caso de que no exista la carpeta security, simplemente la creamos y luego dentro de la carpeta security crearemos el archivo boot.properties y le agregaremos lo siguiente:
vi WLS_FORMS1/security/boot.properties username=weblogic password=pruebas123
Guardamos y luego aplicamos lo mismo en la ruta de REPORTS1
$DOMAIN_HOME/servers/WLS_REPORTS1/security
Luego nos iremos al nodo02 y nodo03 y haremos lo mismo solo que para FORMS2, REPORTS2 y FORMS3 y REPORTS3:
$DOMAIN_HOME/servers/WLS_FORMS2/security
$DOMAIN_HOME/servers/WLS_REPORTS2/security
$DOMAIN_HOME/servers/WLS_FORMS3/security
$DOMAIN_HOME/servers/WLS_REPORTS3/security
Esto debe realizarse también en el AdminServer.
Ahora debemos bajar la consola de weblogic para asegurarnos que al iniciarlo se encripten los archivos boot.properties, para ello vamos al nodo del AdminServer y ejecutaremos el siguiente comando:
cd $DOMAIN_HOME/bin ./stopWebLogic.sh
De esta manera con todos los servicios abajo, podemos hacer un inicio limpio, con la diferencia de que solo es necesario iniciar el servidor de weblogic desde el AdminServer, el NodeManager y los NodeManager de las 3 instancias de forms and reports.
Para iniciar el resto de servicios ya se podrá realizar desde la consola de Weblogic:

Configuración de jacob 1.18
Esta configuración se deberá realizar en todos los nodos de forms and reports, no es necesario hacerlo en el nodo del AdminServer.

- Pasar el archivo jacob.jar a /oracle/Middleware/Oracle_Home/forms/java/
- Copiamos el archivo Jacob.ddl que se encuentra en el directorio que descomprimimos. Dependiendo de la versión de Forms utilizada:
a. Place jacob-1.18-M2-x86.dll in the ORACLE_HOME/forms/webutil/win32 directory.
b. Place jacob-1.14-M2-x64.dll in the ORACLE_HOME/forms/webutil/win64 directory.
Ir a la ruta:
/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config/
Hacer un backup del archivo default.env
Ahora abrir el archive default.env y agregar al CLASSPATH las siguientes rutas:
- /oracle/Middleware/forms/java/frmall.jar
- /oracle/Middleware/forms/java/jacob.jar

Verificar que los archivos webutil.pll y webutil.olb estén en el directorio ORACLE_HOME/forms.
Debemos ir a la siguiente ruta /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1/bin
Realizar un backup de sign_webutil.sh
Editar el archivo sign_webuitl.sh y en la variables KEYSTORE_PASSWORD y JAR_KEY_PASSWORD colocar una clave personalizada.
Luego debemos cambiar las rutas que utiliza sign_webutil.jar para firmar los jars y crear el keystore, las cuales serías las siguientes:
/oracle/Middleware/oracle_common/jdk/bin/keytool /oracle/Middleware/oracle_common/jdk/bin/jarsigner
Y validar que la condición de if test “$error_text” sea == y no != para corregir un error del script
Verifique la siguiente imagen para que encuentra la ubicación de las líneas dentro del archivo:

Luego procedermos a firmar el jacob.jar utilizaremos el siguiente comando:
./sign_webutil.sh /oracle/Middleware/forms/java/jacob.jar

Instalación y configuración de webutil_demo
Al igual que la instalación del jacob, no es necesario instalar webutil demo en el nodo con el AdminServer, solamente será necesario hacerlo en los nodos de forms and reports.

Copiamos el archivo webutil_demo.fmb al directorio:
ORACLE_HOME/forms
Copiamos el archivo ffisamp.dll al directorio
ORACLE_HOME/forms/webutil
Copiamos el archivo wu_fileupload_db_demo.sql al directorio
ORACLE_HOME/forms

cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1/server/
Hacer un backup de webutil.cfg y luego editar el original:
Nos aseguramos de tener las siguientes líneas de la siguiente manera:


Guardamos y salimos del archivo, ahora es necesario compilar las formas de webutil demo, para ello, vamos a configurar primeramente el string de conexión de nuestra base de datos:
Iremos a la siguiente ruta:
cd /oracle/Middleware/network/admin/tnsnames.ora
- Dentro configuraremos el acceso a la Base de Datos, para ello debemos tener a mano el string de conexión el cual pondremos dentro del archivo de tnsnames.ora:
PROD =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = BASEPROD)
(PORT = 1529)
)
(CONNECT_DATA =
(SERVICE_NAME = PROD)
(INSTANCE_NAME = PROD)
)
)Luego se debe copiar el archivo tnsnames.ora a la siguiente ruta:
cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig1
Ahora procederemos a establecer algunas variables de entorno, para ello, iremos al siguiente archivo:
vi /home/orapro/.bash_profile
Dentro colocaremos las siguientes líneas:
export JAVA_HOME=/oracle/java/jdk1.8.0_281 export PATH=JAVA_HOME/bin:$PATH export ORACLE_BASE=/oracle export MW_HOME=/oracle/Middleware export WLS_HOME=/oracle/Middleware/Oracle_Home/wlserver export WL_HOME=$WLS_HOME export DOMAIN_HOME=/oracle/Middleware/user_projects/domains/promeapps export OHS_INSTANCE=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1 export ORACLE_HOME=/oracle/Middleware export ORACLE_INSTANCE=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/FORMS/instances/forms1 export ORACLE_REPORTS=/oracle/Middleware/user_projects/domains/promeapps/reports export ORACLE_PATH=/oracle/Middleware/oracle_common/common/sql export ORACLE_TERM=xterm export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 export LANG=en_US.UTF-8 export TNS_ADMIN=$ORACLE_HOME/network/admin export DISPLAY=:0.0 export ORA_NLS11=$ORACLE_HOME/nls/data export PATH=$ORACLE_HOME/bin:$ORACLE_REPORTS/bin:$ORACLE_INSTANCE/bin:/usr/bin:/bin:/usr/local/bin/:$PATH export WL_DOMAIN=promeapps export DEFAULTENV=/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/oracle_common/jdk/jre/lib/amd64/native_threads:$ORACLE_HOME/oracle_common/jdk/jre/lib/amd64/server:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH export CLASSPATH=$ORACLE_HOME/oracle_common/jdk/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib:$CLASSPATH export THREADS_FLAGS=native export TEMP=/tmp export TMPDIR=/tmp export USER=orapro
Ahora nos dirigiremos a la siguiente ruta:
/oracle/Middleware/bin/
Dentro nos debemos conectar a la base de datos:
sqlplus /nolog

Una vez logueado como system corremos los siguientes comandos:
CREATE USER webutil identified by Password1 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp01; GRANT CONNECT, CREATE PROCEDURE, CREATE PUBLIC SYNONYM TO webutil; GRANT RESOURCE, CONNECT TO webutil;
Posterior de haber creado el usuario debemos desloguearnos y loguearnos a la base de datos con el usuario webutil.
sqlplus /nolog connect webutil/Password1@PROD
Y procedermos a ejecutar el siguiente script:
@/oracle/Middleware/forms/create_webutil_db.sql

Ahora nos volveremos a conectar a la BD con el usuario y contraseña webutil y correremos:
@/oracle/Middleware/forms/wu_fileupload_db_demo.sql

Ahora salimos y nos dirigiremos a la siguiente ruta:
/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_FORMS/applications/formsapp_12.2.1/config
Ahí vamos a configurar el archivo formsweb.cfg, pero antes de configurarlo, sacarle un backup
Ahora lo abrimos y debemos agregar los archivos frmwebutil.jar y jacob.jar al parámetro WebUtilArchive en caso de que no se encuentren.

2. En este mismo documento formsweb.cfg especificaremos la forma webutil_demo.fmx al parámetro form:

3. Ahora procederemos a exportar la variable DISPLAY
export DISPLAY=:0.0
Luego nos logueamos como usuario root
Ejecutaremos los siguientes comandos:
export DISPLAY=:0.0 xhost +
Inmediatamente después de esto nos logueamos como usuario Oracle
- Posterior a ello vamos a compilar los siguientes archivos, en la siguiente ruta:
/oracle/Middleware/forms
Colocaremos los siguientes commandos:
frmcmp module=webutil.pll module_type=library userid=webutil/Passwordcoope1@desabd_n compile_all=yes
Y también compilaremos:
frmcmp module=webutil_demo.fmb module_type=form userid=webutil/Passwordcoope1@desabd_n compile_all=yes
De esta manera Webutil_demo quedará configurado.
Creación de cluster de reptools y reports servers
Primeramente antes de crear la configuración de los servidores de reportes, es necesario corregir un problema de librerías que sucede en Oracle Linxu 7, para ello únicamente es necesario ejecutar los siguientes comandos:
[root@server] cd /usr/lib64 [root@server] ls libXm.so* libXm.so.4 libXm.so.4.0.4 [root@server] ln -s /usr/lib64/libXm.so.4 libXm.so.3

Ahora, procederemos a ir a la máquina del adminserver a la siguiente ruta:
/oracle/Middleware/oracle_common/common/bin
Dentro ejecutaremos el script ./wlst.sh, esto nos abrirá la herramienta llamada Weblogic Scripting Tool, una interfaz para administrar por línea de comandos el servidor de Weblogic.
Dentro nos conectaremos al weblogic con el siguiente comando:
connect('weblogic','pruebas123','SA-CAPWLA-01:7003')Luego de conectado iremos ejecutando uno a uno los siguientes comandos:
createReportsToolsInstance(instanceName='reptoolpromeapps1',machine='SA-CAPWLA-02') createReportsServerInstance(instanceName='rep_SACAPWLA02_01',machine='SA-CAPWLA-02') createReportsToolsInstance(instanceName='reptoolpromeapps2',machine='SA-CAPWLA-03') createReportsServerInstance(instanceName='rep_SACAPWLA03_01',machine='SA-CAPWLA-03') createReportsToolsInstance(instanceName='reptoolpromeapps3',machine='SA-CAPWLA-04') createReportsServerInstance(instanceName='rep_SACAPWLA04_01',machine='SA-CAPWLA-04')
De esta manera crearemos un reptools y un servidor de reportes para cada instancia de forms and reports:
- rep_SACAPWLA02_01 para la máquina SA-CAPWLA-02
- rep_SACAPWLA03_01 para la máquina SA-CAPWLA-03
- rep_SACAPWLA04_01 para la máquina SA-CAPWLA-04
Como en la siguiente imagen:

Posterior a esto, realizaremos algunas configuración antes de iniciar los servidores de reportes, iremos a la siguiente ruta:
/oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_REPORTS1/applications/reports_12.2.1/configuration
Respaldamos el archivo rwservlet.properties y luego lo editamos:
vi rwservlet.properties
Agregamos la siguiente línea:

Luego iremos a esta siguiente ruta:
cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/ReportsServerComponent/rep_SACAPWLA02_01
Respaldamos rwserver.conf y luego lo editamos:
Comentaremos la siguiente línea:

De manera que quede así:

Luego sustituya: <!–job jobType=»report» engineId=»rwEng» securityId=»rwJaznSec»/–> por <job jobType=»report» engineId=»rwEng»/> de modo que quede así:

Luego de esto debemos reiniciar los WLS_REPORTS de todos los nodos y luego iniciarlos nuevamente, cada node manager deberá estar arriba y desde el nodo del AdminServer deberemos ejecutar los siguientes comandos, esto nos solicitará la constraseña del NodeManager y la almacenará en la configuración para que ya no la solicite.
cd $DOMAIN_HOME/bin ./startComponente.sh rep_SACAPWLA02_01 storeUserConfig ./startComponente.sh rep_SACAPWLA03_01 storeUserConfig ./startComponente.sh rep_SACAPWLA04_01 storeUserConfig
Luego probaremos el acceso a cada servidor de reportes:

Configuración de cluster de servidores de reportes en los 3 nodos usando un clustername
Después de haber creado los servidores de reportes debemos ir a la siguiente ruta para crear el cluster:
cd /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/servers/WLS_REPORTS1/applications/reports_12.2.1/configuration
Dentro debemos realizar un backup del archivo rwservlet.properties y luego abrir el archivo para trabajar en él, se hará en todos los nodos menos en el admin server, debemos agregar y modificar lo siguiente:
Debemos tener en cuenta que en la configuración del cluster solo se colocan los nodos de los demás reports server que no existan en el servidor localmente:
El nombre del cluster debe ser el mismo para todos.
Nodo 1:

Nodo 2:

Nodo 3:

Configuración de repositorio de jobs en la base de datos para el cluster de reports
Para la configuración de los archivos siguientes, se siguió la nota Doc ID 2098657.1 donde se específica como habilitar la base de datos como repositorio de jobs para el cluster de reports:
Primeramente debemos crear un nuevo usuario en la base de datos:
create user weblogrep12 identified by "wl11$prod" default tablespace users quota unlimited on users; grant create table to weblogrep12; grant create view to weblogrep12; grant create trigger to weblogrep12; grant create procedure to weblogrep12; grant create sequence to weblogrep12;
Luego debemos ir a la siguiente ruta y conectarnos con este usuario a la base de datos y ejecutar el siguiente script:
cd $ORACLE_HOME\reports\admin\sql
Ingresamos por sql plus y ejecutamos el script rw_server.sql
Ahora debemos ingresar al Enterprise Manager, luego en el menú desplegable elegir seguridad y credenciales.


Crearemos un Map llamado reports:

Luego de creado seleccionamos crear clave:

Lo llenaremos con los siguientes datos:

Colocamos los datos del usuario weblogrep12 que creamos en la base de datos con su respectiva contraseña.
Ahora iremos a configurar los 2 tipos de report server que tenemos, en el menú desplegable debemos ir a Explorador de MBean del sistema:
Nota: Existen 2 tipos de servidores de reportes, los Standalone que son los que iniciamos usando el nodemanager y los in-process, estos se iniciarán automáticamente al iniciarl el WLS_REPORTS.
Standalone:
En el menú lateral debemos ir a Mbeans de Configuración -> oracle.reports.serverconfig -> ReportsServer -> rwserver-[REPORTS SERVER NAME].
Para agregar el área de folderaccess, jobRepository y jobStatusRepository debemos tocar solo el archivo e ir a la sección de operaciones:

Elegir las secciones que necesitamos en nuestro archivo, seleccionarla y luego en la siguiente pantalla presionar el botón de call.
Luego de tener las secciones que necesitamos debemos refrescar la página y desplegar la flecha al costado del rwserver de nuestro rwserver:
Debemos ir a la carpeta JobRepository y JobStatusRepository, vamos al apartado de operaciones y tocamos addProperty para agregar los parámetros, agregaremos los siguientes en ambos jobs:
<property name="dbuser" value="weblogrep12"/> <property name="dbpassword" value="csf:reports:reports_wl"/> <property name="dbconn" value="baseprod:1529/prod"/>
Debemos tener en cuenta que el parámetro dbpassword debe tener el nombre de la carpeta de credenciales y la clave iguales a las que creamos.
Luego de ello podemos continuar con la edición de todo el archivo rwserver, de modo que quedé de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<cache class="oracle.reports.cache.RWCache">
<property name="cacheSize" value="50"/>
<property name="maxCacheFileNumber" value="10"/>
<property name="cacheDir" value="/app/reportes"/>
</cache>
<engine class="oracle.reports.urlengine.URLEngineImpl" engLife="50" id="rwURLEng" maxEngine="1" minEngine="0"/>
<security class="oracle.reports.server.RWJAZNSecurity" id="rwJaznSec"/>
<destination class="oracle.reports.plugin.destination.ftp.DesFTP" destype="ftp"/>
<destination class="oracle.reports.plugin.destination.webdav.DesWebDAV" destype="WebDav"/>
<job engineId="rwEng" jobType="report"/>
<job engineId="rwURLEng" jobType="rwurl"/>
<notification class="oracle.reports.server.MailNotify" id="mailNotify">
<property name="succnotefile" value="succnote.txt"/>
<property name="failnotefile" value="failnote.txt"/>
</notification>
<jobStatusRepository>
<property name="dbuser" value="weblogrep12"/>
<property name="dbconn" value="baseprod:1529/prod"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
</jobStatusRepository>
<jobRepository>
<property name="dbuser" value="weblogrep12"/>
<property name="dbconn" value="baseprod:1529/prod"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
</jobRepository>
<connection idleTimeOut="15" maxConnect="200"/>
<queue maxQueueSize="1000"/>
<folderAccess>
<write>/app/reportes</write>
</folderAccess>
<proxyInfo>
<proxyServers>
<proxyServer name="$$Self.proxyHost$$" port="$$Self.proxyPort$$" protocol="all"/>
</proxyServers>
<bypassProxy>
<domain>$$Self.proxyByPass$$</domain>
</bypassProxy>
</proxyInfo>
<pluginParam value="%MAILSERVER_NAME%" name="mailServer"/>
</server>In-process:
En el menú lateral debemos ir a Mbeans Definidos por la Aplicación ->oracle.reportsApp.config -> Server:WLS_REPORTS -> Application:reports -> ReportsApp -> rwserver
Para agregar el área de folderaccess, jobRepository y jobStatusRepository debemos tocar solo el archivo e ir a la sección de operaciones:

Elegir las secciones que necesitamos en nuestro archivo, seleccionarla y luego en la siguiente pantalla presionar el botón de call.
Luego de tener las secciones que necesitamos debemos refrescar la página y desplegar la flecha al costado del rwserver de nuestro rwserver:
Debemos ir a la carpeta JobRepository y JobStatusRepository, vamos al apartado de operaciones y tocamos addProperty para agregar los parámetros, agregaremos los siguientes en ambos jobs:
<property name="dbuser" value="weblogrep12"/> <property name="dbpassword" value="csf:reports:reports_wl"/> <property name="dbconn" value="baseprod:1529/prod"/>
Debemos tener en cuenta que el parámetro dbpassword debe tener el nombre de la carpeta de credenciales y la clave iguales a las que creamos.
Luego de ello podemos continuar con la edición de todo el archivo rwserver, de modo que quede de la siguiente manera:
<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="http://xmlns.oracle.com/reports/server" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<cache class="oracle.reports.cache.RWCache">
<property name="cacheSize" value="50"/>
<property name="cacheDir" value="/app/reportes"/>
<property name="maxCacheFileNumber" value="10"/>
</cache>
<engine class="oracle.reports.engine.EngineImpl" engLife="50" id="rwEng" initEngine="8" maxEngine="40" maxIdle="60" minEngin
e="8"/>
<engine class="oracle.reports.urlengine.URLEngineImpl" engLife="50" id="rwURLEng" maxEngine="1" minEngine="0"/>
<security class="oracle.reports.server.RWJAZNSecurity" id="rwJaznSec"/>
<destination class="oracle.reports.plugin.destination.ftp.DesFTP" destype="ftp"/>
<destination class="oracle.reports.plugin.destination.webdav.DesWebDAV" destype="WebDav"/>
<job engineId="rwEng" jobType="report"/>
<job engineId="rwURLEng" jobType="rwurl"/>
<notification class="oracle.reports.server.MailNotify" id="mailNotify">
<property name="succnotefile" value="succnote.txt"/>
<property name="failnotefile" value="failnote.txt"/>
</notification>
<jobStatusRepository class="oracle.reports.server.JobRepositoryDB">
<property name="dbuser" value="weblogrep12"/>
<property name="dbconn" value="baseprod:1529/prod"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
</jobStatusRepository>
<jobRepository>
<property name="dbuser" value="weblogrep12"/>
<property name="dbconn" value="baseprod:1529/prod"/>
<property name="dbpassword" value="csf:reports:reports_wl"/>
</jobRepository>
<connection idleTimeOut="15" maxConnect="200"/>
<queue maxQueueSize="1000"/>
<folderAccess>
<read>/app/*</read>
<write>/app/*</write>
</folderAccess>
<proxyInfo>
<proxyServers>
<proxyServer name="$$Self.proxyHost$$" port="$$Self.proxyPort$$" protocol="all"/>
</proxyServers>
<bypassProxy>
<domain>$$Self.proxyByPass$$</domain>
</bypassProxy>
</proxyInfo>
<pluginParam value="%MAILSERVER_NAME%" name="mailServer"/>
</server>
Asegurarse de crear la clase class=»oracle.reports.server.JobRepositoryDB» en el jobStatusRepository ya que en standalone no lo creamos pero en In-process sí.
Ahora debemos reiniciar nuestras instancias de WLS_REPORTS.
Por último para verificar que todo este funcionando podemos ejecutar los siguientes comandos en la base de datos:
SQL> select count(*) from RW_SERVER_JOB_QUEUE; or SQL> select count(*) from RW_SERVER_QUEUE;
En caso de tener algún acceso denegado o problemas con el key al levantar el WLS_REPORTS podemos validar esta nota:
Doc ID 1675769.1
Debemos recordar que ahora al ser un ambiente cluster la instancia de reportes se administra por el WLS_REPORTS y ya no en una instancia separada, esto se logró cuando cambiamos el nombre del server en el rwservlet.properties mientras realizabamos el cluster.
Se puede validar mayor información en la siguiente nota:
Doc ID 2215476.1
Configuración de OHS
Debemos ingresar al Enterprise Manager, en el menú lateral desplegable ingresar al ohs respectivo de cada instancia:



Cambiar los puertos 7777 a 7780:


Aplicar los cambios y reiniciar el ohs usando el Enterprise Manager.
Por último, realizaremos una configuración para que el OHS funcione todo atraves de un mismo puerto, en este caso el 8001 para forms y el 8002 para reports.
Para ello, debemos ir a /oracle/Middleware/forms/templates/config/forms.conf esto en caso nodo de forms and reports.
Dentro del archivo agregaremos lo siguiente:

Cambiaremos el host respectivo dependiendo del servidor.
Y luego nos iremos a la siguiente ruta: /oracle/Middleware/reports/conf/reports_ohs.conf
Agregaremos lo siguiente:

Cambiaremos el host dependiendo el servidor respectivamente.
Luego de hacer esto, debemos copiar los archivos a las siguientes ruta:
cp forms.conf /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1/moduleconf/ cp reports_ohs.conf /oracle/Middleware/user_projects/domains/promeapps/config/fmwconfig/components/OHS/instances/ohs1/moduleconf/
Por último, nos conectamos al Enterprise Manager y reiniciamos los OHS nuevamente.
Tips y configuraciones extras
Al llegar acá usted ya tendrá todo su ambiente de Oracle forms and reports 12c en un cluster de 3 nodos y un nodo con el AdminServer aparte funcionando correctamente, sin embargo, el resto de configuraciones como rutas hacía las formas, menús y reportes, usted deberá configurarlas, es por ello que le dejo algunos tips para hacerlo:
- Los 3 nodos de forms and reports, deben de ver la ruta en donde se encuentren las formas, menús y reportes, es por ello que recomiendo usar una ruta compartida entre todos los nodos para que pueda cambiar o actualizar la forma una vez y ya se aplique para todo el ambiente.
- Toda configuración de inicio o apagado en un ambiente cluster, se recomienda realizarlo desde la consola de Weblogic o bien desde el Enterprise Manager.
- Para configurar la ruta de las formas, lo puede hacer usando la variable FORMS_PATH.
- Recuerde que para iniciar todo el ambiente, solo es necesario ejecutar el script startWebLogic.sh en el nodo del AdminServer y levantar todos los nodemanagers tanto del AdminServer como de los nodos de forms and reports, con eso podrá iniciar todo desde la consola de Weblogic.
Cualquier duda o consulta, déjala en los comentarios y con gusto les responderé.

Very Good guide. I have a Oracle RAC DB on proxmox Cluster VMs. Is there any guide to incorporate load balancer for Weblogic domain and Forms cluster. Because forms cluster makes two separate addresses to access applications. I need a setup with load balancer with a cluster of forms and reports operating on a RAC database in proxmox with ceph environment
When you set up the Forms and Report repository, you must point to the URL of the RAC no to a single node, thus configuring Forms with the database RAC
Also, if you want to unify the addresses of Forms, you can configure a HA Proxy Balance, this will unify the addresses using a virtual IP, if you want I have a document explaining how to implement, Write me to oracle.max.consultor@gmail.com I will share it with you