domingo, 19 de enero de 2025

Instalación de Forms 14.1.2.0.0 en Windows 11 (64 bits)

Introducción

En diciembre de 2024 Oracle liberó después de mucha espera la versión 14 de Oracle Forms. Con esta guía quiero mostrar los pasos para instalarlo en un equipo Windows 11 para disponer de un entorno de desarrollo. Mi recomendación es usar Linux para desplegar Forms en producción.

Preparar Sistema Operativo

Todos los scripts de esta guía los hay que ejecutar con PowerShell. Yo utilizo la última versión en vez de la que trae Windows por defecto. Para instalar la última versión, desde una línea de comandos hay que ejecutar:

winget install --id Microsoft.PowerShell

Luego en la aplicación "Terminal" se puede lanzar una sesión con este shell.


Yo lo configuro para que se inicie por defecto con Terminal, en Configuración -> Perfil Predeterminado -> PowerShell

El directorio home de Middleware 14.1.2.0.0 va ser C:\Oracle\Middleware\Oracle_Home141200 y el directorio del domino va a ser: C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP

IMPORTANTE: El directorio del dominio debe de estar dentro del directorio home del Middleware.

Software necesario

Para realizar la instalación lo primero que se necesita es disponer del software necesario y para ello se puede obtener directamente de Oracle, para ello habrá que tener una cuenta de Oracle.
Los archivos que hemos de tener son:
  • fmw_14.1.2.0.0_infrastructure.jar (SHA1: 5586183560EE69EAEF59572ADCC9F54DDA08D1CB)
  • setup_fmw_14.1.2.0.0_fr_win64.exe (SHA1: 0BC43EB91D40276AA9BF2524FD37CCCD69676A6F)

Ejecutar Instalación

Configurar Java

Descomprimir paquete zip de Java 21 en C:\Oracle\jdk21:

mkdir c:\Oracle
cd c:\Oracle
curl -o jdk21.zip https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.zip
Expand-Archive -Path .\jdk21.zip -DestinationPath .\
rm jdk21.zip
mv jdk* jdk21
cd C:\Oracle\jdk21\bin
.\java -version

java version "21.0.5" 2024-10-15 LTS
Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)

Instalar Fusion Middleware Infrastructure 14.1.2.0.0

Ejecutar la instalación desde un terminal como administrador:

c:\oracle\jdk21\bin\java -jar fmw_14.1.2.0.0_infrastructure.jar

Proceso de instalación:
  • Bienvenido: Si todo va bien, nos arrancará el instalador, donde pulsaremos "Siguiente"
  • Actualizaciones Automáticas: Dejar marcado "Omitir Actualizaciones Automáticas", pulsar "Siguiente".
  • Ubicación de Instalación: En "Directorio Raíz de Oracle" meter "C:\Oracle\Middleware\Oracle_Home141200". Pulsar "Siguiente".
  • Tipo de Instalación: Dejar seleccionado "Infraestructura de Fusion Middleware" y pulsar "Siguiente".
  • Comprobación de Requisitos: Realiza una verificación de Sistema Operativo y Java, si todo va bien pulsar "Siguiente".
  • Resumen de la Instalación: Nos muestra un resumen de lo que se va a instalar, pulsamos "Instalar".
  • Progreso de Instalación: Va indicando por los pasos de instalación e indicando si ha ido correcto. Si todos han ido correctos, pulsar "Siguiente". Instalación Terminada: Nos muestra un resumen, pulsar "Terminar".

Instalar Forms 14.1.2.0.0 para Windows

Ejecutar setup_fmw_14.1.2.0.0_fr_win64.exe

Proceso de instalación:

  • Pantalla de Bienvenida: Pulsar "Siguiente".
  • Actualizaciones Automáticas: Seleccionar "Omitir Actualizaciones Automáticas" y pulsar "Siguiente".
  • Ubicación de Instalación: en "Directorio Raíz de Oracle" seleccionamos "C:\Oracle\Middleware\Oracle_Home141200" y pulsamos "Siguiente"
  • Tipo de Instalación: Seleccionar "Forms and Reports Deployment" y pulsamos "Siguiente".
  • JDK Home: Seleccionar "C:\Oracle\jdk21" y pulsar "Siguiente".
  • Comprobación de Requisitos: Si todo aparece correcto pulsar "Siguiente".
  • Resumen de Instalación: Pulsar "Instalar".
  • Progreso de Instalación: Va mostrando los pasos que va realizando de instalación, si todo aparece correcto, pulsamos "Siguiente"
  • Instalación Terminada: Pulsar "Terminar".

Configurar Repositorio en la Base de Datos

Antes de configurar el repositorio, asegurarse de haber modificado la base de datos el perfil por defecto para que las contraseñas de la base de datos no caduquen: Con un usuario que sea DBA:

alter profile default limit password_life_time unlimited;

La versión mínima de base de datos es Oracle 19.23. "Oracle Fusion Middleware 14c requires Oracle Database 19c (19.23) or higher".

Ejecutar el configurador de RCU (Ejemplo para ejecutarlo desde una consola de PowerShell):

$env:JAVA_HOME = "C:\Oracle\jdk21"
C:\Oracle\Middleware\Oracle_Home141200\oracle_common\bin\rcu.bat


Proceso de instalación:
  • Bienvenido: Pulsar el botón "Siguiente".
  • Crear Repositorio: Seleccionar "Crear Repositorio" y "Carga del Sistema y Carga del Producto" y pulsar Siguiente.
  • Detalles de Conexión a la Base de Datos:
    • Tipo de Base de Datos: Oracle
    • Nombre del Host: Nombre o dirección IP del servidor de base de datos.
    • Puerto: Puerto TCP en donde está configurado el listener de la base de datos, por lo general el puerto 1521.
    • Nombre del Servicio: Servicio de la base de datos.
    • Usuario: Usuario con permisos de DBA o SYSDBA, por ejemplo, SYS.
    • Contraseña: Contraseña del usuario indicado en el punto anterior.
    • Rol: Si el usuario es SYS, hay que seleccionar "SYSDBA", en caso contrario "Normal".
    • Pulsar botón "Siguiente" una vez estén cubiertos todos los campos.
  • Comprobación de Requisitos: Si todo está bien pulsar "Aceptar".
  • Seleccionar Componentes:
    • Seleccionar "Crear Nuevo Prefijo" e indicar el prefijo: F141200WIN
    • Seleccionar los siguientes componentes:
      • Servicios de Infraestructura Común.
      • Servicios de Seguridad de la Plataforma Oracle.
      • Servicio de Auditoría.
      • Anexo de Servicios de Auditoría.
      • Visor de Servicios de Auditoría.
      • Servicios de Weblogic
    • Pulsar botón "Siguiente".
    • Vuelve aparecer una ventana de comprobación de requisitos, si todo está bien pulsar "Aceptar".
  • Contraseñas de Esquemas: Dejar seleccionado "Usar las Mismas Contraseñas para Todos los Esquemas" e introducir la Contraseña deseada en los campos "Contraseña" y "Confirmar Contraseña", una vez introducidas pulsar el botón "Siguiente".
  • Asignar Tablespaces: Pulsar el botón "Siguiente", dejando los valores por defecto.
    • Nos sacará un mensaje indicando que se crearan tablespaces que no existan, pulsamos el botón "Aceptar".
    • Sale una ventana de creación de tablespaces, pulsamos "Aceptar".
  • Resumen: Muestra un resumen de los componentes que se van a instalar. Pulsar el botón "Crear".
    • Aparece una ventana mostrando el progreso de la creación.
  • Resumen de Terminación: En la ventana de resumen de finalización, pulsar el botón "Cerrar".

Configurar Dominio

Ejecutar el configurador:

cd C:\Oracle\Middleware\Oracle_Home141200\oracle_common\common\bin
./config.cmd

Proceso de configuración:
  • Crear Dominio:
    • Seleccionar "Crear Nuevo Dominio".
    • Ubicación de Dominio: C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP
    • Pulsar botón "Siguiente".
  • Plantillas: Seleccionar "Crear Dominio mediante Plantillas de Producto" y seleccionar las siguientes plantillas a mayores de las ya seleccionadas, una vez hecha la selección pulsar "Siguiente".
    • Oracle Forms - 14.1.2.0.0 [forms]
    • Oracle Reports Server - 14.1.2.0.0 [ReportsServerComponent]
    • Oracle Reports Application - 14.1.2.0.0 [reports]



  • Ubicación de la Aplicación: Dejar los valores por defecto y pulsar "Siguiente".
  • Cuenta de administrador: Introducir Contraseña para el usuario "weblogic" y pulsar "Siguiente".
  • Modo de Dominio y JDK:
    • Modo de Dominio: Seleccionar "Desarrollo".
    • Dejar marcado “Activar puertos de recepción (puertos no SSL).
    • JDK: Seleccionar “Oracle HotSpot …”.
    • Pulsar "Siguiente".


  • Tipo de Configuración de Base de Datos:
    • Seleccionar "Datos de RCU".
    • Proveedor: Oracle
    • Controlador: Oracle’s Driver (Thin) for Service connections; Versions: Any.
    • DBMS/Servicio: Nombre del servicio de la base de datos configurada durante la instalación del repositorio.
    • Nombre del Host: Nombre o dirección IP del equipo que contiene los esquemas de repositorio.
    • Puerto: Puerto TCP en el que está escuchando la base de datos de repositorio, por lo general será 1521.
    • Propietario Esqm: F141200WIN_STB
    • Contraseña Esqm: Contraseña del usuario propietario introducida durante la instalación de RCU.
    • Pulsar el botón "Obtener Configuración de RCU".
    • Si todo va bien, pulsar el botón "Siguiente".
  • Orígenes de Datos de Componentes: Dejar los valores por defecto y pulsar “Siguiente”.
  • Prueba de JDBC: Si la prueba es correcta pulsar "Siguiente".
  • Configuración Avanzada: Seleccionar los siguientes elementos y pulsar "Siguiente".
    • Topología.
    • Componentes del Sistema.

  • Servidores Gestionados: Dejar los valores por defecto y pulsar "Siguiente".
  • Clusters: Dejar los valores por defecto y pulsar "Siguiente".
  • Plantillas de Servidor: Dejar valores por defecto y pulsar "Siguiente".
  • Servidores Dinámicos: Dejar valores por defecto y pulsar "Siguiente".
  • Asignar Servidores a Clusters: Dejar los valores por defecto y pulsar "Siguiente".
  • Clusters de Coherence: Dejar los valores por defecto y pulsar "Siguiente".
  • Máquinas: Dejar los valores por defecto y pulsar "Siguiente".
  • Asignar Servidores a Máquinas:
    • Seleccionar en la parte derecha "AdminServerMachine" y mover de la izquierda el servidor "AdminServer" a la derecha a "AdminServerMachine".
    • Pulsar "Siguiente".



  • Componentes del Sistema: Dejar los valores por defecto y pulsar "Siguiente".
  • Asignar Componentes del Sistema a Máquinas: Dejar los valores por defecto y pulsar "Siguiente".
  • Resumen de Configuración: Pulsar el botón "Crear".
  • Progreso de Configuración: Muestra los pasos que está realizando, una vez termine pulsar "Siguiente".
  • Fin de configuración: Muestra los siguientes datos:
    • Ubicación del dominio: C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP
    • URL del servidor de administración: http://equipo:7001/console
    • Pulsar el botón "Terminar".

Preparar arranque

Durante el primer arranque se terminan de realizar los últimos pasos de la instalación. Lo primero que vamos a hacer es configurar el usuario y contraseña para que no los pida cada vez, para ello vamos a crear el archivo boot.properties y lo vamos a poner en la carpeta security de cada servicio. La contraseña la ponemos sin cifrar, en el primer arranque uno de los pasos que hace es la de cifrarla.

Crear el archivo C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\servers\boot.properties con el siguiente contenido:

username=weblogic
password=<contraseña introducida en el proceso en el Paso “Cuenta de administrador” de la configuración de Forms y Reports>

Copiar el archivo de arranque para WLS_FORMS y WLS_REPORTS

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\servers
md .\WLS_FORMS\security
md .\WLS_REPORTS\security
copy .\boot.properties .\WLS_FORMS\security
move .\boot.properties .\WLS_REPORTS\security

Arrancar NodeManager, AdminServer, WLS_FORMS y WLS_REPORTS

Ejecutar en un PowerShell con permisos de administrador

Arrancar Node Manager

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
Start-Process 
.\startNodeManager.cmd

Una vez arrancado mostrará en consola algo como esto:

<18 ene 2025 15:39:34 (hora estándar de Europa central)> <INFO> <Secure socket listener started on port 5556, host localhost/127.0.0.1>

Arrancar WebLogic

Start-Process .\startWebLogic.cmd

Una vez arrancado mostrará en consola algo como esto:

<18 ene 2025, 15:45:31,519 (hora estándar de Europa central)> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>

Preparar Reports

Antes de arrancar reports por primera vez, hay que crear la instancia. En los siguientes comandos cambiar <weblogic_password> por la contraseña del usuario “weblogic”.

cd C:\Oracle\Middleware\Oracle_Home141200\oracle_common\common\bin
.\wlst.cmd
connect("weblogic","<weblogic_password>","localhost:7001")
createReportsToolsInstance(instanceName='reports1',machine='AdminServerMachine')
exit()

Después de forzar la creación de la instancia “reports1”, ya podemos arrancar WLS_FORMS y WLS_REPORTS.

Arrancar Forms  

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
Start-Process .\startManagedWebLogic.cmd WLS_FORMS

Una vez arrancado mostrará en consola algo como esto:

<18 ene 2025, 15:52:52,386 (hora estándar de Europa central)> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>

Arrancar Reports

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
Start-Process .\startManagedWebLogic.cmd WLS_REPORTS

Una vez arrancado mostrará en consola algo como esto:

<18 ene 2025, 15:55:28,182 (hora estándar de Europa central)> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>

Prueba de funcionamiento de Forms

En este punto se puede hacer una prueba de ejecución de Forms:

cd C:\Oracle
curl -o frmsal.jar http://localhost:9001/forms/java/frmsal.jar
c:\Oracle\jdk21\bin\java -jar frmsal.jar -url "http://localhost:9001/forms/frmservlet?config=standaloneapp"

Si todo va bien, se ejecutará forms y se mostrará:


Las opciones de frmsal.jar se podrán consultar en: http://localhost:9001/forms/html/fsal.htm 

Parar Procesos

Se pueden cerrar las consolas que tenemos abiertas para abortar los procesos, pero se puede hacer de una forma más elegante con estos comandos:

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
.\stopManagedWebLogic.cmd WLS_REPORTS
.\stopManagedWebLogic.cmd WLS_FORMS
.\stopWebLogic.cmd
.\stopNodeManager.cmd

Arrancar Procesos

Una vez arrancados se pueden parar con los comandos que indico en el punto anterior "Parar Procesos". Desde una consola de PowerShell ejecutar:

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
Start-Process .\startWebLogic.cmd
Start-Process .\startManagedWebLogic.cmd WLS_FORMS
Start-Process .\startManagedWebLogic.cmd WLS_REPORTS

NOTA: Parar ejecutar simplemente programas en Forms no hace falta arrancar Weblogic ni WLS_REPORTS, es decir con ejecutar startManagedWeblogic.cmd WLS_FORMS es suficiente. Hará 3 intentos para conectar con el servidor de administración, pero luego arranca.

Otra alternativa es hacer el arranque usando el Node Manager y Admin Server, para ello lo primero que hay que hacer es arrancar NodeManager y luego arrancar Weblogic.

cd C:\Oracle\Middleware\Oracle_Home141200\user_projects\domains\APP\bin
Start-Process .\startNodeManager.cmd
cd C:\Oracle\Middleware\Oracle_Home141200\oracle_common\common\bin
.\wlst.cmd
nmConnect("weblogic", "<weblogic_password>", "localhost", 5556, "APP");
nmStart('AdminServer')
nmDisconnect()
exit()

Una vez está arrancado el AdminServer, arrancamos Forms y Reports.

cd C:\Oracle\Middleware\Oracle_Home141200\oracle_common\common\bin
.\wlst.cmd
connect("weblogic","<weblogic_password>","localhost:7001")
start('WLS_FORMS')
start('WLS_REPORTS')
disconnect()
exit()

Para parar los servicios se puede hacer a la inversa.

cd C:\Oracle\Middleware\Oracle_Home141200\oracle_common\common\bin
.\wlst.cmd
connect("weblogic","<weblogic_password>","localhost:7001")
shutdown('WLS_REPORTS', force='true')
shutdown('WLS_FORMS', force='true')
disconnect()
nmConnect("weblogic", "<weblogic_password>", "localhost", 5556, "APP");
nmKill('AdminServer');
nmDisconnect()
exit()

lunes, 5 de julio de 2021

Añadir componente personalizado en la zona derecha de Forms

ADVERTENCIA: Lo que voy a comentar en esta entrada utiliza funciones no documentadas de Forms. Funciona con la versión actual 12.2.1.4.0, pero no puedo ofrecer ninguna garantía de que en futuras versiones funcione o lo haga de esta forma.

Oracle Forms utiliza Java para ejecutarse en el cliente y proporciona herramientas para poder integrar componentes Java personalizados (Bean Area), precisamente estos componentes son los que voy a mostrar como a través de ellos alterar el comportamiento nativo de Forms.

Lo primero es conocer que el tipo de layout Java que usa Forms.

BorderLayout: https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html


Donde:

  • North: Menú superior y botonera horizontal.
  • West: Botonera vertical.
  • South: Barra de estado.
  • Center: Ventana del programa Forms.
Del BorderLayout no han usado la zona East. Veamos cómo podemos utilizarla para lo que nos interese.

Una vez inicialicemos la zona "East" quedará visible para todos los programas Forms que tengamos abiertos, por lo que va a ser una zona común a toda la aplicación.

Para inicializarla vamos a utilizar un Bean Area que estará oculto en un programa, para ello añadimos al lienzo un ITEM de tipo "Bean Area", en "Implementation Class" indicaremos una clase de implementación que más adelante veremos en detalle y ponemos el item en el lienzo con tamaño 0, 0 para que no sea visible para el usuario.


Lo importante de esto es lo que se hace en la clase de implementación. Para que según se inicialice el bean area también inicialice la zona "East" del BorderLayout haremos lo siguiente:

package com.test.efm;

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JLabel;
import oracle.forms.handler.IHandler;
import oracle.forms.ui.VBean;

public class BeanExample extends VBean {
  transient IHandler handler = null;
  private java.awt.Frame frame = null;

  public void init(IHandler handler) {
    super.init(handler);
    this.handler = handler;
    this.frame = this.handler.getApplet().getFrame();
    JLabel eastLabel = new JLabel("EAST", JLabel.CENTER);
    eastLabel.setOpaque(true);
    eastLabel.setBackground(Color.YELLOW);
    eastLabel.setPreferredSize(new Dimension(190,768));
    this.frame.add("East", eastLabel);
    frame.validate();
  }
}


Con handler.getApplet().getFrame() hacemos referencia al frame con el BorderLayout y luego con frame.add("East", xxxx); añadimos el componente.

Resultado:

Video ejemplo:




viernes, 2 de julio de 2021

NAME_IN y COPY con vitaminas

Para acceder a los valores de los campos del registro en el que se encuentra el cursor se puede hacer simplemente usando :bloque.campo.

Si se hace desde una unidad de programa de una PLL habría que usar el Bult-in NAME_IN que se usa de de la siguiente forma: NAME_IN('BLOQUE.CAMPO'). Además de permitir usarse en desde una librería también nos permite hacer código genérico en tiempo de ejecución.

De forma similar, para asignar un valor habría que usar COPY. Se usaría de la siguiente forma: COPY('VALOR A ASIGNAR', 'BLOQUE.CAMPO');

Cuando se quiere acceder a valores de campos de otros registros distintos al actual es donde entra en juego la propiedad DATA_VALUE de Get_Item_Instance_Property y Set_Item_Instance_Property.

Para acceder al valor de un campo del registro anterior al actual se haría con:

Get_Item_Instance_Property('BL.CAMPO', TO_NUMBER(:system.cursor_record) - 1, DATA_VALUE);

Para cambiar el valor de un campo del registro anterior: 

Set_Item_Instance_Property('BL.CAMPO', TO_NUMBER(:system.cursor_record) - 1, DATA_VALUE, 'VALOR A ASIGNAR');

Por ejemplo, si queremos colorear un registro basándonos en registros anteriores, se podría hacer de la siguiente forma. POST-QUERY:

DECLARE
  PROCEDURE pinta_campo(p_campo VARCHAR2) IS
  BEGIN
   Set_Item_Instance_Property(p_campo,
                              CURRENT_RECORD, 
                              VISUAL_ATTRIBUTE, 'AMARILLO');
  END;
BEGIN
  IF :system.trigger_record = 1 OR
    Get_Item_Instance_Property('USER_TAB_COLUMNS.TABLE_NAME',
       TO_NUMBER(:system.trigger_record) - 1,
       DATA_VALUE) != :user_tab_columns.table_name THEN
    pinta_campo('USER_TAB_COLUMNS.TABLE_NAME');
    pinta_campo('USER_TAB_COLUMNS.COLUMN_NAME');
    pinta_campo('USER_TAB_COLUMNS.DATA_TYPE');
  END IF;
END;



FMB de ejemplo: giip_data_value.fmb

jueves, 21 de mayo de 2015

Extraer contenido de contenedores OLE

Una funcionalidad muy útil en versiones de Forms 6i o anteriores, era la de almacenar archivos en contenedores OLE, para ello bastaba con tener un campo en el bloque asociado a un campo BLOB de la base de datos y ya era posible guardar en él archivos mediante la aplicaciones con soporte OLE2, por ejemplo WORD, EXCEL, PDF, ...

El problema es que desde Forms 9i esta funcionalidad ya no existe, por lo que hay que buscar alternativas, lo normal es a través de implementar la carga / descarga de archivos usando la librería WEBUTIL.

Aparte de tener que cambiar la implementación, el principal problema con el que me he encontrado ha sido la necesidad de migrar de un sistema a otro debido a que los archivos almacenados en un contenedor OLE tienen un envoltorio que hace imposible que se abran directamente, es necesario abrirlos a través de ese contenedor, por lo que había que hacerlo de forma manual uno a uno desde el programa.

La solución que he encontrado a este problema es mediante la aplicación 7zip para Windows que es capaz de separar el envoltorio del contenido (con la de Linux no funciona).


El PDF se encuentra en el archivo CONTENTS dentro de la carpeta "Tenant Object", como se puede observar, en este caso el envoltorio ocupa mucho más que el propio PDF. En algunos casos, puede llamarse "[1]Ole10Native", en ese caso hay que modificar el script que descomprime con 7zip.

IMPORTANTE: El código que voy a poner a continuación, debes usarlo bajo tú responsabilidad y después de haber hecho una copia de seguridad de los datos que vas a procesar, no me hago responsable de ninguna pérdida de datos por la utilización de este código.

Vamos a ver como extraer los archivos de un campo BLOB a un directorio de Oracle. Vamos a crear un directorio llamado BLOB_TEMP (en el propio servidor de base de datos) y lo mapeamos a una ruta:

CREATE DIRECTORY BLOB_TEMP as 'c:\temp\pdfs';
GRANT READ, WRITE ON DIRECTORY BLOB_TEMP TO USUARIO;

Exportamos a ese directorio el contenido del campo BLOB de la tabla

DECLARE
  CURSOR cur_pdfs IS
     SELECT i. archivo campo_blob, i.rowid || '.pdf.7z' nombre_archivo
       FROM tabla i
      WHERE DBMS_LOB.GETLENGTH(i.archivo) > 0
        AND DBMS_LOB.INSTR(i.archivo, HEXTORAW('25504446')) > 0;

  blob_length     INTEGER;
  out_file        UTL_FILE.file_type;
  v_buffer        RAW(32767);
  chunk_size      PLS_INTEGER;
  blob_position   PLS_INTEGER;
BEGIN
  FOR reg IN cur_pdfs LOOP
    blob_position := 1;
    chunk_size := 32767;
    blob_length := DBMS_LOB.getlength(reg.campo_blob);
    out_file := UTL_FILE.fopen('BLOB_TEMP', reg.nombre_archivo, 'wb', chunk_size);

    WHILE blob_position <= blob_length LOOP
      IF blob_position + chunk_size - 1 > blob_length THEN
        chunk_size := blob_length - blob_position + 1;
      END IF;

      DBMS_LOB.READ(reg.campo_blob, chunk_size, blob_position, v_buffer);
      UTL_FILE.put_raw(out_file, v_buffer, TRUE);
      blob_position := blob_position + chunk_size;
    END LOOP;

    UTL_FILE.fclose(out_file);
  END LOOP;
END;
/

Una vez tenemos los archivos, extraemos el contenido con un script, por ejemplo, le llamamos extraepdf.cmd con el siguiente contenido.

for %%f in (*.7z) do (
"C:\Program Files\7-Zip\7z.exe" e "%%f" "Tenant Object\CONTENTS"
rename CONTENTS %%f.pdf
del %%f
)?

Luego, los volvemos a cargar, sobreescribiendo el archivo en el mismo campo de la tabla.

DECLARE
  CURSOR cur_pdfs IS
     SELECT i.rowid, i.rowid || '.pdf.7z.pdf' nombre_archivo, i.archivo
       FROM tabla i
      WHERE DBMS_LOB.GETLENGTH(i.archivo) > 0
        AND DBMS_LOB.INSTR(i.archivo, HEXTORAW('25504446')) > 0;

  l_bfile       BFILE;
  v_resultado   VARCHAR2(30) := 'OK';
  v_archivo     BLOB;
BEGIN
  FOR reg IN cur_pdfs LOOP
    l_bfile := BFILENAME('BLOB_TEMP', reg.nombre_archivo);

    IF DBMS_LOB.fileexists(l_bfile) = 1 AND NVL(DBMS_LOB.getlength(l_bfile), 0) != 0 THEN
      DBMS_LOB.createtemporary(v_archivo, TRUE);
      DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly);
      DBMS_LOB.loadfromfile(v_archivo, l_bfile, DBMS_LOB.getlength(l_bfile));
      DBMS_LOB.fileclose(l_bfile);
      
      UPDATE tabla i
         SET archivo = v_archivo
       WHERE rowid = reg.rowid;
       
      COMMIT;
      UTL_FILE.fremove('BLOB_TEMP', reg.nombre_archivo);
    END IF;
  END LOOP;
END;
/

domingo, 8 de febrero de 2015

Reports Builder 11g en Windows 64 bits

Por lo general, al intentar arranca Reports Builder en un Windows de 64 bits nos dará el siguiente error: "REP-50125: rwbuilder.conf:java.lang.NullPointerException"



Vamos a ver como solucionarlo suponiendo que el directorio base de Oracle es C:\Oracle (si fuese otro las rutas cambian).

Editar el archivo: C:\Oracle\Middleware\asinst_1\config\reports\bin\reports.bat

Borrar la línea: set TNS_ADMIN=%ORACLE_INSTANCE%\config

Editar el archivo: C:\Oracle\Middleware\Oracle_FRHome1\bin\rwbuilder.bat

Cambiar: $$Instance.directory$$ por: C:\Oracle\Middleware\asinst_1
Cambiar: $$Instance.oracle_home$$ por: C:\Oracle\Middleware\Oracle_FRHome1

Para arrancar el Report Builder ejecutaremos un archivo de comandos con código similar al siguiente: ReportsBuilderF11g.cmd. (Las rutas pueden variar según donde estén las plls o instalado Oracle):

SET CLASSPATH=C:\Oracle\Middleware\Oracle_FRHome1\forms\j2ee\frmsrv.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\ldapjclnt11.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\debugger.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\ewt3.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\share.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\utj.jar;C:\Oracle\Middleware\Oracle_FRHome1\jlib\zrclient.jar;C:\Oracle\Middleware\Oracle_FRHome1\reports\jlib\rwrun.jar;C:\Oracle\Middleware\Oracle_FRHome1\forms\java\frmwebutil.jar;C:\Oracle\Middleware\Oracle_FRHome1/jlib/start_dejvm.jar;C:\Oracle\Middleware\Oracle_FRHome1\opmn\lib\optic.jar
SET PATH=C:\Oracle\Middleware\Oracle_FRHome1\bin;C:\Oracle\Middleware\Oracle_FRHome1\jdk\jre\bin\client;C:\Oracle\Middleware\Oracle_FRHome1\jdk\bin
SET REPORTS_PATH=Z:\plls
SET NLS_DATE_FORMAT=DD/MM/YYYY
SET NLS_NUMERIC_CHARACTERS=,.
SET UI_ICON=Z:\iconos
SET NLS_SORT=BINARY
SET TNS_ADMIN=C:\Oracle
SET NLS_LANG=SPANISH_SPAIN.UTF8
start rwbuilder.bat USERID=USUARIO/PASSWORD@CADENA_CONEXION

martes, 25 de marzo de 2014

Generación incorrecta de PDF en Reports 6 en Windows 7 y 8

Al generar archivos desde Reports 6 en PDF en sistemas operativos Windows 7 y Windows 8 está metiendo mal la etiqueta "CreatorDate", abre el paréntesis y sin meter la fecha no lo llega a cerrar. Esto produce que alguna versión de Adobe Reader y de otros visores de PDF no sean capaces de leer el archivo.


Ese mismo PDF generado con el mismo parche de Forms & Reports en un Windows 2003 lo genera correctamente:


Para solucionarlo podemos hacer que no intente meter la línea /CreatorDate modificando la librería RWLIB60.DLL. Para ello necesitaremos un editor Hexadecimal para poder editarla, yo utilizo "HxD - Editor Hexadecimal", que se puede descargar de su página web: http://www.mh-nexus.de.

Abrimos la librería y buscamos (Ctrol + F) el texto CreatorDate


Seleccionamos desde /CreatorDate hasta el punto que está antes de /Author, tal y como se muestra en la siguiente imagen:


Luego hay que ir a Edición -> Rellenar Selección



En la ventana que abre, dejamos 00 en Valores hexadecimales y pulsamos "Aceptar".


Grabamos la librería, y ahora el resultado de la generación con este cambio será el siguiente:




viernes, 17 de enero de 2014

Conexión a webs con Applets de Java sin MANIFEST.MF correcto

Ya ha llegado la actualización 1.7.0_45 de Java. Esta actualización bloquea por defecto todas las aplicaciones que se despliegan desde un navegador que no tengan las últimas directivas de seguridad definidas en el archivo MANIFEST.MF

Para salir del paso, es posible, en el equipo donde corre el navegador añadir excepciones a esa validación. Para ello (en Windows) vamos a Panel de Control -> Programas (Si tenemos activado "Ver por: Categoría) -> Java

En la pestaña "Seguridad" en la sección "Lista de excepciones de sitios" pulsamos sobre el botón "Editar lista de sitios" y añadimos el sitio en que confiamos de que no nos vaya a ejecutar nada peligroso en nuestro equipo.


He puesto como ejemplo "https://www.bbva.es", ya que a día de hoy para validarse con el DNI electrónico usa un applet Java que no tiene el MANIFEST.MF correcto, y lo peor de todo, cuando vas a validar una operación da un error de error de firma del archivo.

viernes, 15 de noviembre de 2013

Almacenar la contraseña de Weblogic de forma persistente

Por defecto, cada vez que se arranca Weblogic y los servidores manejados WLS_FORMS y WLS_REPORTS nos solicita la contraseña de weblogic:


La forma de guardar la contraseña en un archivo y evitar que la pida en cada arranque es muy simple: hay que crear un archivo con el nombre "boot.properties" en las siguientes carpetas:


  • $DOMAIN_HOME/servers/AdminServer/security
  • $DOMAIN_HOME/servers/WLS_FORMS/security
  • $DOMAIN_HOME/servers/WLS_REPORTS/security


El archivo tiene que contener únicamente dos líneas:

username=weblogic
password=

En el archivo metemos la contraseña en texto plano, pero en el primer arranque la encripta.

viernes, 18 de octubre de 2013

Problemas para Forms 11g en próximas actualizaciones de Java

Al actualizar a la última actualización de Java 7, el parche 45 (1.7.0_45), al mostrar la advertencia de seguridad sobre los JAR firmados acompaña el siguiente texto: "Esta aplicación estará bloqueada en una futura actualización de seguridad de Java porque el archivo MANIFEST de JAR no contiene el atributo de permisos. Póngase en contacto con el publicador para obtener más información".


¿Qué significa esto?, pues que a partir de ahora y cuando Oracle quiera, sacará una actualización de Java (no necesariamente en el próximo parche) que dejará a nuestros Forms KO.

Ya hace unos cuantos parches que en la consola de Java ya lo estaba advirtiendo al cargar los archivos, pero la mayoría hizo caso omiso a ello.

Los archivos JAR dentro de la carpeta META-INF tienen que tener el archivo MANIFEST.MF con las siguientes líneas (puede haber más):

Codebase: *
Permissions: all-permissions

¿Cómo solucionarlo?, en mi caso tengo 3 tipo de JARS, los propios de Oracle, JARS propios y JARS de terceros.

  • Los propios de Oracle (frmall.jar, frmgeneric_laf.jar, frmmain.jar, frmoracle_laf.jar, frmresources.jar, frmwebutil.jar): Para estos Oracle ha publicado un parche que incluye el MANIFEST correcto, el parche es el 16837591 que se puede bajar del Metalink. Si no tienes acceso al Metalink puedes hacer lo mismo que explico con JARS de terceros.
  • JARS Propios. Estos los voy a dividir en 2 grupos (los de iconos y los generados con JDeveloper).
    • Iconos: Creamos un archivo MANIFEST.TXT en cualquier ubicación de nuestro disco, por ejemplo, C:\Temp\MANIFEST.TXT con el siguiente contenido:
Manifest-Version: 1.0
Codebase: * 
Created-By: 1.6.0_35 (Sun Microsystems Inc.)
Permissions: all-permissions
      • Generar el archivo JAR con el siguiente comando (suponemos que los iconos están en C:\Temp\iconos): jar cvfm c:\temp\archivoiconos.jar c:\MANIFEST.TXT C:\temp\iconos\*.gif

    • Jars desplegados con JDeveloper. Creamos un archivo dentro del proyecto de JDeveloper de texto plano con el siguiente contenido (NOTA: Hay que dejar un retorno de carro al final para que al hacer el despliegue meta las 2 líneas):
Codebase: *
Permissions: all-permissions
        • Al configurar el despliegue del archivo JAR, marcamos la check "Include Manifest File (META-INF/MANIFEST.MF) he indicamos en "Additional Manifest Files to Merge into MANIFEST.MF" la ruta al archivo que hemos creado anteriormente.

  • JARS de Terceros: Lo que hice en este caso, es descomprimirlos, modificar el MANIFEST.MF, borrar la firma que estaba en la carpeta META-INF, volver a comprimirlos en formato ZIP y luego cambiar la extensión a ".jar". Luego los volví a firmar con mi certificado de firma de código.

Una vez tenemos los JAR con el MANIFEST correcto y perfectamente firmados, los volvemos a colocar en $ORACLE_HOME/forms/java y reiniciamos el servicio de WLS_FORMS:

$DOMAIN_HOME/bin/stopManagedWebLogic.sh WLS_FORMS
$DOMAIN_HOME/bin/startManagedWebLogic.sh WLS_FORMS&

miércoles, 14 de agosto de 2013

Problema de arranque de Forms en Forms 11g

En algunos equipos me he encontrado el caso de que al intentar iniciar la aplicación desarrollada en Forms 11g, la pantalla del navegador se quedaba en blanco y no llegaba a cargar nunca. En estos casos lo primero que hay que hacer es borrar los "Archivos Temporales de Internet" de Java (Panel de Control -> Programas -> Java -> Botón Configuración -> Suprimir Archivos -> Marcar todas las checks y aceptar)


De paso que estamos ahí, comprobamos en la pestaña "Seguridad" que está marcada la check "Activar el contenido Java en el explorador".


Luego cerramos el navegador de Internet y lo volvemos a iniciar. Si aún así no funciona, hay que borrar la carpeta C:\Users\xxxxx\AppData\LocalLow\Sun\Java (cambiando xxxxx por el usuario correspondiente) y reiniciar el equipo completo.

miércoles, 10 de julio de 2013

Forms 6 en Oracle 12c

Al conectar Forms 6 con un Oracle 12c nos dará el siguiente mensaje de error y no nos dejará conectar:

ORA-28040: No coincide ningún protocolo de autenticación

El problema es que Oracle 12c por defecto bloquea los clientes de la versión 8 de Oracle, para habilitarlo hay que añadir en el archivo sqlnet.ora de la base de datos las siguientes líneas:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8

Una vez añadidas ya podemos conectar y usar cualquier producto de Oracle 8.



No he detectado ningún tipo de problema, pero hay que aclarar que esta configuración no está certificada por Oracle.

Las pruebas las he realizado con el parche 17 de Forms (6.0.8.26.0) en su versión Cliente / Servidor.

martes, 7 de mayo de 2013

Error instalando Forms 11: Aplicando Plantilla JRF de Oracle

Instalando Forms 11g Release 2 - 11.1.2.1.0 sobre un Oracle Enterprise Linux 6.4 de 64 bits y Oracle JRockit 6 - R28.2.7 parche 45, el proceso de creación del dominio falla en el punto "Aplicando Plantilla JRF de Oracle" - "Applying  Oracle JRF Template"



El mismo error también se produce con Oracle Enterprise Linux 5.6. 

En los logs no ayuda mucho los mensajes mensaje de error, en concreto falla al no encontrar un archivo Phyton en /tmp.

Después de múltiples pruebas encontré que el motivo del error era la versión de JRockit, en concreto el parche 45, con el parche 37 instala perfectamente sin problemas, es decir, en vez de usar "jrockit-jdk1.6.0_45-R28.2.7-4.1.0-linux-x64.bin" para la instalación hay que usar "jrockit-jdk1.6.0_37-R28.2.5-4.1.0-linux-x64.bin"

Desconozco si los parches entre el 38 y el 44 funcionan bien, sólo probé el 37 ya que es el que tenía disponible.


miércoles, 9 de enero de 2013

Problema en la instalación de Forms 11 en Windows

Me he encontrado con el problema de que durante la instalación de Forms 11g Release 2 en un Windows 8 de 64 bits la instalación se quedaba colgada en el punto "Reiniciando AdminServer", el problema estaba en el nombre del equipo que tenía un _ (guión bajo), para solucionarlo hay que cambiar el nombre del equipo para que no tenga guiones y reiniciar la instalación.

miércoles, 5 de diciembre de 2012

REP-0065 + REP-0200

En una instalación en Forms 6 en cliente / servidor al ejecutar un informe, en a veces se producía el siguiente error:

REP-0065: Error del Sistema de Memoria Virtual
REP-0200: No se puede asignar suficiente memoria. cavaa 16



El problema residía en dos marcos repetitivos anidados y que tenían el mismo grupo de origen, con lo que según los datos que sacase el informe entraba en un bucle recursivo que hacía romper el informe por falta de memoria.

miércoles, 26 de septiembre de 2012

Instalación de Forms 11 en Windows con tarjeta gráfica NVIDIA

En la última instalación que hice sobre un Windows de 64 bits se quedaba el proceso colgado creando el dominio, después de muchas pruebas encontré que el problema era que el driver de la tarjeta gráfica  NVIDIA  había metido en el PATH del sistema operativo la ruta "C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;" al quitar esa ruta y volver a instalar Forms 11 el proceso se completó correctamente.

domingo, 17 de junio de 2012

Instalación de Forms 11 R2 en Windows 8 de 64 bits

En esta entrada voy a explicar como instalar un entorno de desarrollo y de pruebas de Forms 11 sobre un Windows 8 de 64bits, los pasos son idénticos a la instalación sobre Windows 7 de 64 bits.

Mi intención es hacer una guía paso a paso sin entrar en demasiados detalles en cada uno de los pasos de la instalación.

Antes de nada tenemos que tener instalado el JDK de 64 bits, para verificar que lo tenemos correctamente configurado abrimos una consola "CMD" y ejecutamos "java -versión", nos debería de salir un mensaje similar a este:



En primer lugar hay que instalar Weblogic 10.3, que se puede descargar del OTN de la siguiente dirección (simplemente hay que tener una cuenta de OTN, que se puede obtener sencillamente y totalmente gratuita): http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.html. La versión que se necesita para hacer la instalación en 64 bits es la genérica, es decir, el archivo, wls1036_generic.jar.

Para arrancar la instalación, desde una consola de comandos, una vez que nos hemos situado en la carpeta en donde se encuentra el archivo wls1036_generic.jar ejecutamos: java -jar wls1036_generic.jar


Aparecerá la siguiente pantalla de bienvenida


Pulsamos "Siguiente" y aparecerá la pantalla para indicar el directorio raíz de la instalación. Propone C:\Oracle\Middledware, particularmente me parece una buena ubicación para la instalación.



Una vez pulsamos "Siguiente", nos aparece la pantalla para solicitar la cuenta de Oracle Support para obtener las actualizaciones de seguridad, esta pantalla va aparecer repetidamente durante el proceso de instalación. Para un equipo de desarrollo y pruebas no lo veo necesario, pero si fuese una instalación en un entorno de producción sería muy recomendable cubrirlos.



Luego nos pregunta el tipo de instalación, para el caso concreto de la instalación para albergar Forms 11, con la instalación Típica va perfectamente.


En la siguiente pantalla se solicita que se indique el directorio de la máquina virtual de Java que queremos usar:



Es importante seleccionar el directorio donde está el JDK de 64bits, normalmente la ruta será similar a : C:\Program Files\Java\jdk1.6.0_33


A continuación se nos solicita que concretemos las rutas para "WebLogic Server" y "Oracle Coherence", lo normal es dejar las rutas que nos propone por defecto:



Antes de comenzar la instalación se muestra un resumen de lo que va a ser instalado:



Una vez terminada la instalación muestra una pantalla indicando que la instalación ha finalizado. En esta pantalla desactivamos la check "Ejecutar Quickstart" y pulsamos "Listo".



El primer paso de la instalación ya está realizado, ahora sobre la instalación de Weblogic que se acaba de realizar, hay que instalar Forms 11R2. La versión de Forms11R2 también se puede obtener del OTN, en la siguiente dirección: http://www.oracle.com/technetwork/developer-tools/forms/downloads/index.html, el archivo que se necesita es el de la versión de 64 bits "ofm_frmrpts_win_11.1.2.0.0_64_disk1_1of1.zip", una vez descomprimido nos generará 3 carpetas (Disk1, Disk2 y Disk3), en la carpeta Disk1 ejecutamos el archivo "setup.exe" y aparecerá la pantalla de bienvenida en la que pulsamos "Siguiente":


Nos vuelve a solicitar los datos para las actualizaciones de Software, al igual que hicimos al instalar Weblogic las omitimos y pulsamos "Siguiente".


A continuación nos indica si queremos únicamente instalar el software o aparte de instalar el software queremos realizar la configuración. Yo soy partidario de instalar únicamente el software y luego arrancar manualmente el proceso de configuración (en caso de producirse algún error lo tenemos más localizado, si es en la instalación del software o es un problema en la configuración).


En la siguiente pantalla hace una comprobación de requisitos, al estar haciendo la instalación en Windows 8, que no es un sistema operativo certificado da un error, pero podemos seguir la instalación pulsando el botón "Continuar" y luego en "Siguiente".

A continuación nos pide la ubicación para la instalación de los programas de Forms, en este caso también podemos dejar los valores que propone por defecto:



Otra vez nos solicita los datos de Oracle Support para las actualizaciones de seguridad, también las omitimos:


Por último muestra una pantalla con el resumen de la instalación que se va a realizar:


Pulsamos el botón de "Instalar", la instalación comienza mostrando una pantalla con el progreso, una vez finalizado pulsamos el botón "Siguiente".


Al final nos muestra la pantalla informando de que la instalación ha terminado:


Una vez instalado el software de Forms11R2 hay que proceder a realizar la configuración del dominio de Weblogic. Para ello ejecutamos el archivo "config.bat" que se encontrará en la ruta "C:\Oracle\Middleware\Oracle_FRHome1\bin". Una vez ejecutado aparecerá la siguiente pantalla en la que pulsamos "Siguiente"


En la siguiente pantalla se nos pregunta si la instalación la queremos hacer para despliegue de aplicación o para desarrollo. La mejor opción es indicar que es para despliegue ya que vamos a disponer de igual manera las herramientas de desarrollo, pero además podremos ejecutarlas.


Por última vez nos pregunta sobre introducir los datos de Oracle Support que volvemos a omitir.



En la siguiente pantalla nos solicita la ubicación del directorio del servidor de Weblogic y en donde queremos instalar la Instancia de Oracle, dejamos los valores que propone por defecto:


A continuación crearemos un dominio en el servidor de Weblogic, en usuario dejamos "weblogic", introducimos una contraseña y un nombre para el Dominio, en este caso le he llamado LIBRA, pero se le puede dar el nombre que quiera cada uno.


Luego nos pide los componentes a configurar. Para disponer de un entorno de desarrollo activaremos todas las checks:



En las siguientes dos pantallas dejamos los valores por defecto:





Al pulsar siguiente nos solicita el "Almacén de identidades", desmarcamos la check "Usar Almacén de Identidades de Aplicación".


Pulsamos "Siguiente" y nos mostrará un resumen de la configuración que va a realizarse:




Al pulsar "Siguiente" comienza el proceso de configuración:



En la siguiente pantalla ya indica que la configuración ha finalizado:



Para comprobar el funcionamiento de forms abrimos la siguiente dirección en el navegador: http://nombreequipo:9001/forms/frmservlet



Para comprobar el funcionamiento de reports abrimos la siguiente dirección en el navegador: http://nombreequipo:9002/reports/rwservlet


Para entrar en la consola de Weblogic accedemos mediante la dirección: http://localhost:7001/console con el usuario weblogic y la contraseña indicada durante la instalación.

Al terminar la instalación estas páginas funcionan correctamente ya que durante el proceso de instalación se arrancan todos los servicios, pero una vez reiniciamos el ordenador debemos de arrancar manualmente, tanto Weblogic, Forms y Reports.

Para arrancar Weblogic ejecutamos el archivo: startWebLogic.cmd que se encontrará en la ruta C:\Oracle\Middleware\user_projects\domains\NOMBRE_DOMINIO\bin, en el caso de la instalación realizada la ruta es: C:\Oracle\Middleware\user_projects\domains\LIBRA\bin

Al arrancar solicita usuario y contraseña, meteremos el usuario "weblogic" y la contraseña indicada durante la instalación (en futuras entradas mostraré como almacenar ese usuario y contraseña en archivos para que no sea necesario introducirla en cada arranque).


Sabremos que ha finalizado el proceso de arranque cuando aparezca "Server started in RUNNING mode". Esta ventana es importante que la dejemos abierta, ya que si se cierra estaremos parando los servicios de WebLogic.



Para arrancar Forms, desde una línea de comandos "CMD", ejecutamos (cambiar LIBRA por el nombre del dominio indicado durante la instalación).

  • cd C:\Oracle\Middleware\user_projects\domains\LIBRA\bin
  • startManagedWebLogic.cmd WLS_FORMS
También nos pedirá el usuario y contraseña, introducimos las mismas credenciales que durante el arranque de WebLogic.

Para arrancar Reports, también, desde una línea de comandos ejecutamos (cambiar LIBRA por el nombre del dominio indicado durante la instalación).
  • cd C:\Oracle\Middleware\user_projects\domains\LIBRA\bin
  • startManagedWebLogic.cmd WLS_REPORTS
Al igual que al arrancar Forms y Weblogic solicita usuario y contraseña.