Sunday, April 18, 2021

Instalar Oracle APEX , ORDS y Tomcat en Google Cloud Platform – Compute Engine – CentOS 8 – DB 18c Express Edición Parte 4

Video de Instalación

Continuando con la creación de un entorno de trabajo para Oracle APEX.

Ahora configuraremos Oracle APEX junto con Ords 20.4 y Tomcat 8.5.

Presentacion4

Puedes seguir estos videos/post si no instalaste algo.

Los pre-requisitos son:

  • Instalar Oracle Databa Base 18c XE.
  • Instalar Oracle APEX (Puede ser cualquier versión de APEX, ahora usaremos APEX 20.2).

Video de Instalación

Instalando TOMCAT

Actualizamos nuestra maquina

sudo yum update

Instalamos Java JDK

sudo yum install java-1.8.0-openjdk-devel

Validamos la versión

java -version

Creamos la carpeta para tomcat

sudo -s
mkdir /opt/tomcat/
cd /opt/tomcat/

Para descargar tomcat, por fines prácticos usare WGET

sudo yum -y install wget

Descargamos Apache Tomcat

wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz_**

Extraemos tomcat

sudo tar xvf apache-tomcat-8.5.65.tar.gz -C /opt/tomcat

Creamos el usuario de tomcat y damos permisos

sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat sudo chown -R tomcat: /opt/tomcat sudo sh -c 'chmod +x /opt/tomcat/apache-tomcat-8.5.65/bin/*.sh'

Ahora necesitamos modificar el archivo para tomcat.service, podemos usar cualquier editor en esta oportunidad usare nano

sudo yum install nano

Y luego para editar

sudo nano /etc/systemd/system/tomcat.service

comandos útiles para nano

copiar y pegar => crtl+c o crtl+v

Salir => crtl+x

guardar y enter para confirmar nombre => crtl+O

Dentro del archivo a editar agregamos

[Unit] Description=Tomcat Server After=syslog.target network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/jre" Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom" Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat-8.5.65" Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat-8.5.65" Environment="CATALINA_PID=/opt/tomcat/apache-tomcat-8.5.65/temp/tomcat.pid" Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC" ExecStart=/opt/tomcat/apache-tomcat-8.5.65/bin/catalina.sh start ExecStop=/opt/tomcat/apache-tomcat-8.5.65/bin/catalina.sh stop [Install] WantedBy=multi-user.target

comandos útiles para inicializar o restart tomcat

sudo systemctl daemon-reload

sudo systemctl enable --now tomcat

sudo systemctl status tomcat

systemctl status tomcat

systemctl stop tomcat

Cambiando puerto de tomcat

Para ello es necesario modificar el archivo "server.xml"

sudo nano /opt/tomcat/apache-tomcat-8.5.65/conf/server.xml

Por ejemplo con el puerto a 20200

<Connector port="20200" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
sudo systemctl restart tomcat.service

Recuerda que necesitamos tener abierto el puerto (20200) en nuestro firewall

Adicionalmente podemos configurar "web management".

sudo nano /opt/tomcat/apache-tomcat-8.5.65/conf/tomcat-users.xml

Agregamos las líneas siguientes al final del archivo

<role rolename="admin-gui"/> <role rolename="manager-gui"/> <user username="admin" password="2345" roles="admin-gui,manager-gui"/> </tomcat-users>

Habilitamos las IP de acceso en los dos archivos siguientes:

sudo nano /opt/tomcat/apache-tomcat-8.5.65/webapps/manager/META-INF/context.xml sudo nano /opt/tomcat/apache-tomcat-8.5.65/webapps/host-manager/META-INF/context.xml

Donde tu es: 41.41.41.41

<Context antiResourceLocking="false" privileged="true" > <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" /> </Context>

También podemos remover esta validación comentando la línea de Valve pero esto no es recomendable.

<Context antiResourceLocking="false" privileged="true" > <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|41.41.41.41" /> --> </Context>

Reiniciamos tomcat

sudo systemctl restart tomcat sudo systemctl restart tomcat.service

Configurando / Instalando ORDS

**Primero debemos configurar APEX **

ALTER SESSION SET CONTAINER = XEPDB1; select DBMS_XDB.GETHTTPPORT from dual; EXEC DBMS_XDB.SETHTTPPORT(0);

Creamos el directorio para ORDS y nos movemos allí

sudo -s mkdir /opt/ords/ cd /opt/ords/

Descargamos Ords

curl -o ords-20.zip https://download.oracle.com/otn/java/ords/ords-20.4.3.050.1904.zip?AuthParam=1618286235_54c6a887c8245303794735a30fc35f7c

Extraemos ORDS

unzip ords-20.zip -d ords

Creamos el una carpeta para guardar ORDS

mkdir config cd ords

Configuramos ORDS

java -jar ords.war install advanced /opt/ords/config

JuveYell

Copiamos el archivo generado ords.war en la carpeta webapps de tomcat

cp ords.war /opt/tomcat/apache-tomcat-8.5.65/webapps/

Dentro de webapps craemos una carpeta i.

cd /opt/tomcat/apache-tomcat-8.5.65/webapps/ mkdir i

Desde la carpeta donde fue extraido APEX, Copiamos el contenido de la carpeta imágenes en webapps/i.

cd /opt/apex/images cp -rf * /opt/tomcat/apache-tomcat-8.5.65/webapps/i/ cd /opt/tomcat/apache-tomcat-8.5.65/webapps/i

Damos permisos

chown -R tomcat:tomcat /opt/tomcat/apache-tomcat-8.5.65/webapps/i/ chown -R tomcat: /opt/tomcat/apache-tomcat-8.5.65/webapps/i

Reiniciamos el servicio de Tomcat

sudo systemctl restart tomcat.service
Share:

Monday, March 8, 2021

REST Enabled SQL Configuración y consumo - parte 2/5

En esta serie de blogs iré mostrando como poder consumir servicios REST a través de REST Enabled SQL.

REST Enabled SQL esta a partir de APEX 5.2 y ORDS 17.4.

REST Enabled SQL, Configuración y consumo


Para esta configuración creamos un esquema desde cero, daremos permisos y creamos una tabla de empleados como prueba.



Para ello necesitamos un servidor con ORDS, previamente enseñe como crearlo en otro blog.

Los scripts usados en esta demo lo pueden encontrar dentro mi repositorio de Git.

Video Configuración:






Habilitando REST Enabled SQL a través de SQL Developer



Habilitando REST Enabled SQL a través de comandos sql



Uso en Oracle APEX



Share:

Sunday, February 28, 2021

Configurando REST Enabled SQL - Instalación de ORDS - parte 1/5

 En esta serie de blogs iré mostrando como poder consumir servicios REST a través de REST Enabled SQL.

REST Enabled SQL esta a partir de APEX 5.2 y ORDS 17.4.

Instalación de ORDS


Entendamos primero que ORDS va ser nuestro interprete de las consultas que enviemos hacia el servidor y estas seran retornadas en formato JSON.



Para ello necesitamos descargar ORDS.
Y tener instalado Java JDK

Creamos dos directorios , en uno de ellos descomprimimosel archivo y en el otro será para almacenar nuestra configuración,

Luego abrimos una ventana de comandos, nos ubicamos en nuestro directorio. Y ejecutamos lo siguiente:

java -jar ords.war install


En caso de querer desinstalar:


Luego nos pedirá el directorio donde guardar la configuración.
Y finalmente ingresaremos los datos solicitados dependiendo de la información de nuestro servidor de base de datos:



Les dejo el video donde explico paso a paso esta configuración.







Share:

Thursday, December 10, 2020

Región de Alerta (Alert Region) de forma dinámica con Clasic Report

 Recientemente tuve la necesidad de mostrar varias regiones tipo "Alter", con el fin de indicar al usuario errores, información o información correcta. Pero no me gusto lo forma de crear 3 o N regiones para ello.


App Demo

Para ello encontré que es posible usar un "Classic Report", el cual puede mostrar la misma región tipo alert cambiando de forma dinámica.

Veamos como:

Tomemos en consideración que podemos usar 4 tipos de mensaje.

  • Success => success
  • Danger => danger
  • Information => info
  • Waning => warning

Como ejemplo, he creado una región tipo "Classic Report"



Aquí lo importante será definir el alert_type, alert_title, alert_desc, alert_action


Modificamos el template del reporte:


Y los atributos de la región, cambiamos el template a tipo "Alerts":



Ejemplo:



Share:

Saturday, September 26, 2020

Solucionar error ORACLE TNS:error del adaptador de protocolo ORACLE 18c XE

Fix error TNS:error del adaptador de protocolo



Recientemente tuve este error de TNS:error del adaptador de protocolo al intentar conectarme por SqlPlus.


Para solucionar este problema existen dos opciones.

Opción 1

La primera será reiniciando el listener para ello abrimos una ventana CMD como administrador y ejecutaremos:

lsnrctl stop

luego:

lsnrctl start

podremos comprobar el estado de con el comando:

lsnrctl status




Opción 2

Si esto no funciona, Posiblemente en erro de la instalación la variable de entorno no se ha creado y procederemos a crearla; ORACLE_SID con el valor XE.



Y finalmente ya podras conectarte normalmente.




Share:

Thursday, September 24, 2020

Instalar Oracle APEX 20.1 en español o multilenguaje / Oracle REST Data Services ORDS + Tomcat + Windows

Install Oracle APEX 20.1 / Ords 20 + Apache Tomcat + Windows + Oracle 18c Express
Instalar Oracle APEX 20.1 en español / Ords + Apache Tomcat + Windows 
En esta oportunidad hare una guía completa de:
  •     Instalación Oracle APEX 20.1 en español o multilenguaje
  •     Instalación y configuración de Apache Tomcat.
  •     Instalación y configuración de ORDS.



Video Instalación paso a paso.



Para ello usaremos la base de datos Oracle 18c express.
Primero descargamos la versión multilenguaje de APEX



Pasamos a descomprimir y abrimos una ventana cmd y nos situamos en la ruta donde está descomprimida nuestra carpeta APEX






Nos conectamos a sqlplus como sys as sysdba


Lo primero es desbloquear anonymous:

ALTER USER ANONYMOUS ACCOUNT UNLOCK;



Luego cambiamos el contenedor donde instalaremos APEX.

ALTER SESSION SET CONTAINER = XEPDB1;



Luego creamos el tablespace:

En mi caso lo he creado en 'E:\Instaladores/apex_201/db/apex20100.dbf' , pueden colocar la ruta de su preferencia.

CREATE TABLESPACE apex20100 DATAFILE 'E:\Instaladores/apex_201/db/apex20100.dbf' SIZE 300M AUTOEXTEND ON NEXT 1M; 


Luego procedemos con instalar APEX

@apexins.sql apex20100 apex20100 TEMP /i/


Configuramos rest
@apex_rest_config.sql

Cambiamos el puerto de acceso para usar Ords correctamente.

EXEC DBMS_XDB.sethttpport(0);  


Configuramos la contraseña del workspace internal, ejecutamos

@apxchpwd

Ahora instalaremos Tomcat

https://tomcat.apache.org/download-90.cgi

Todo será next, next hasta el punto de la imagen donde cambiaremos el puerto por el cual nos conectaremos a APEX

Nota: Más adelante si lo dejaron con 8080 este se puede cambiar manualmente.

Nota2: Para instalar Tomcat necesitaremos Java JDK o JRE

Luego finalizamos la instalación normalmente.

Ahora instalaremos ORDS

Descargamos y descomprimimos ORDS

Abrimos una ventana de CMD y nos dirigimos al directorio donde hemos descomprimido ORDS en mi caso "E:\Instaladores\ords-20.2.0.178.1804"




Luego creamos una carpeta donde se guardara la configuración de ORDS, en mi ejemplo le puse  "E:\Instaladores\ords_config"

Luego ejecutamos

java -jar ords.war install advanced


Una vez finalizada la configuración de ORDS necesitamos copiar el archivo ords.war del directorio donde ejecutamos java -jar xxxx Y lo pegamos en la carpeta web apps de Tomcat usualmente en esta dirección "C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps"


Ahora necesitamos las imagenes, para ello copiamos del directorio de APEX , la carpeta imágenes y la pegamos en webapps de tomcat, asi mismo renombramos la carpeta a solo "i"


Ahora reiniciamos el servicio de tomcat-

Con todo esto ya tendremos APEX instalado y corriendo en ORDS, en la url localhost:20100/ords/apex

Cambiando el lenguaje

Para tener el lenguaje de APEX en español o cualquier necesitamos ejecutar @load_TULANG.sql

Este archivo lo pueden encontrar en la carpeta de APEX => Builder => y seleccionan la carpeta con el lenguaje que desean instalar.

En mi caso será español, carpeta ES.



De preferencia abrimos una nueva ventana de CMD, cambiamos nuestro directorio a donde esta la carpeta builder con el lenguaje que deseamos instalar en mi ejemplo, es "E:\Instaladores\apex_201\apex\builder\es" y nos conectamos como sys dba y ejecutamos:

Nota @load_es.sql en vez de ES deberíamos cambiar con el prefijo de nuestro lenguaje a instalar.

ALTER SESSION SET CONTAINER = XEPDB1; 

ALTER SESSION SET CURRENT_SCHEMA = APEX_200100;

@load_es.sql

Y listo finalmente solo necesitamos reiniciar el servicio de Tomcat.

Como pueden ver ahora ya tengo para seleccionar el lenguaje español en la parte inferior y a partir de ello todo el builder cambia.


Tip: me ha pasado que la después de ello da un error en ORDS, para ello he vuelto a configurar ORDS, si ello no funciona, pueden probar instalar APEX y seguidamente cambiar el lenguaje antes de instalar ORDS, lo cual seria su ultimo paso.

Share:

Thursday, August 6, 2020

Ordenamiento en reportes Oracle APEX (secuencias)

En determinada ocasión tenemos la necesidad de mostrar los registros al usuario dando prioridad al orden de los elementos listados en un reporte. Para ello podría indicar que hay dos formas no comunes de ordenar, una es usando drag y drop para lo cual les recomiendo el blog de Jorge y la otra seria agregando unos botones de subir o bajar, que es le método que les enseñare a continuación.



Demo en YouTube



Primero creamos un reporte clásico. en mi caso he usado la tabla DEPT para la demo.

Asi mismo he agregado una nueva columna para guardar el orden de los registros.

Lo ordenaremos por nuestra nueva columna,  order by order_dept

Agregaremos dos botones con HTML para mover arriba y abajo.




A este código he agregado el data-id para obtener el ID del registro, clase "arrow_container " para identificar donde esta mi ID, y en los botones un data-move_dir para saber la dirección , y una clase "move_row" para saber cuando se hace click al botón.

<div data-id="#DEPTNO#" class="arrow_container" >
  <button type="button"  data-move_dir="UP" title="Up" aria-label="Up" class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI">
  <span aria-hidden="true" class="t-Icon fa fa-chevron-up"></span></button>

  <button type="button"  data-move_dir="DOWN" title="Down" aria-label="Down" class="move_row t-Button t-Button--noLabel t-Button--icon t-Button--hot t-Button--small t-Button--noUI">
  <span aria-hidden="true" class="t-Icon fa fa-chevron-down"></span></button>
</div>

Luego crearemos una acción dinámica para escuchar el click de los botones y pasaremos el elemento.



move_row(this.triggeringElement);

Mi función la he agregado a nivel de página para tener un mejor orden.



function move_row(element){
  // direcction = up or down
  var direction =   element.dataset.move_dir;
  var row = $(element).parents("tr:first");
  if (direction == "UP" ) {
      row.insertBefore(row.prev());
  } else {
    // down 
      row.insertAfter(row.next());    
  }
  save_order();  
}

La función save_order es la que me permitirá actualizar los registros en la base de datos a través de un llamada AJAX. la agregare también a nivel de la página.

function save_order(){
  
  var rowsOrder = $("#department_report").find(".t-Report-report tbody tr .arrow_container")
  var questionnaireOrder = Array.from(rowsOrder, x => $(x).data('id') );
   console.log(questionnaireOrder);
    
  apex.server.process("UPDATE_ORDER",        
  { 
    f01: questionnaireOrder
  }, 
    { success: function(pData){  
        apex.event.trigger( "#department_report", "apexrefresh" );
      }, 
      error: function(e) {   
           console.log(e);  
      } 
    }
  );
  
}

He creado un proceso AJAX callback y allí tengo lo siguiente.



declare
  l_order number;
begin 

  for i in 1..apex_application.g_f01.count loop 

    l_order := i * 10; 

   update dept
      set order_dept = l_order
    where deptno = to_number(apex_application.g_f01(i))
      and nvl(order_dept,0) != l_order;
      
  end loop;

  apex_json.open_object;
  apex_json.write('success',true);  
  apex_json.close_object;

exception
  when others then
    apex_json.open_object;
    apex_json.write('success',false); 
    apex_json.write('error_msg',sqlerrm); 
    apex_json.close_object;
end;


Y finalmente el resultado


Nota, para los botones he usado el button builder de apex.oracle/ut


Share:
img

Ing. Angel O. Flores Torres, soy Ingeniero de Sistemas e Ingeniero de Aplicaciones Oracle APEX, he trabajado con Oracle APEX desde el 2017, 5x, 18x, 20x En los ultimos años he desarrollado habilidades en CSS, JavaScript, Jquery y PlSql , I specialize in Oracle APEX (Oracle Application Express )

Followers

Popular Posts