jueves, 18 de febrero de 2021

Encapsulación microservicio Spring Boot en un servicio Linux

Vamos a desplegar un microservicio Spring Boot dentro de un servicio de Linux, para permitir su ejecución de manera independiente como un proceso. Para ello, partimos de que ya tenemos el código listo en su respectivo jar (en otra entrada explicaremos como hacer esta tarea apoyándonos en nuestro IDE con Maven):

1.) Accedemos a la máquina Linux con el usuario que tendrá permisos para lanzar el servicio.
 
2.) Subimos el fichero jar a nuestra máquina Linux, a un directorio donde tengamos permisos de escritura, por ejemplo en nuestro caso /var/microservice.
 
3.) Otorgamos permiso de ejecución al fichero jar:
    chmod 500 /var/microservice/app-microservice.jar 
 
4.) Creamos un script que creará el service para la máquina Linux:

        echo '[Unit]' >> /tmp/app-monitor.service
    echo 'Description=App monitoring Microservice' >> /tmp/app-monitor.service
    echo 'After=syslog.target' >> /tmp/app-monitor.service
    echo '' >> /tmp/app-monitor.service
    echo '[Service]' >> /tmp/app-monitor.service
    echo 'User=oracle' >> /tmp/app-monitor.service
    echo 'ExecStart=/usr/lib64/jvm/jre-1.8/jre1.8.0_281/bin/java -jar      /var/microservice/app-monitoring.jar' >> /tmp/app-monitor.service
    echo 'SuccessExitStatus=143' >> /tmp/app-monitor.service
    echo 'StandardOutput=syslog' >> /tmp/app-monitor.service
    echo 'StandardError=syslog' >> /tmp/app-monitor.service
    echo 'SyslogIdentifier=app-monitor' >> /tmp/app-monitor.service
    echo '' >> /tmp/app-monitor.service
    echo '[Install]' >> /tmp/app-monitor.service
    echo 'WantedBy=multi-user.target' >> /tmp/app-monitor.service
   
 
Viendo un poco el script en detalle, los puntos importantes son que creará un fichero service llamado app-monitor que dejará en la carpeta /tmp, y la línea de ejecucción del servicio usa la jre 1.8 ya que es la mínima necesaria para ejecutar Spring Boot y apunta a la ruta donde hemos dejado nuestro fichero jar. 
 
5.) Ejecutamos el script, que creará el fichero app-monitor.service en la carpeta /tmp.
 
6.) Copiamos el service a la ruta /etc/systemd/system, que es donde residen los servicios de nuestro servidor Linux.
 
7.) A partir de aquí manejaremos el servicio como otro cualquiera de Linux, apoyándonos en el comando systemctl.
     
    a) Habilitar el servicio => sudo systemctl enable app-monitor.service
    b) Arrancar/Parar el servicio => sudo systemctl start/stop app-monitor.service
    c) Estado/log => sudo systemctl -l status app-monitor.service
 
   
 
 


martes, 6 de octubre de 2020

Trick - Get top n values in JavaScript

Partiendo de la base de que disponemos de un array o un JSON con n resultados con k variables cada objeto del tipo [{variable1:value1, variable2:value2, ...variablek:valuek}... n-data] se puede obtener sólo los n objetos que tengan el máximo valor en alguna de las variables de la siguiente manera apoyándonos en las funciones sort y slice:

 

Si los datos provienen de un JSON, parseamos antes:

var data = JSON.parse(json);

sino directamente:

var topn = data.sort(function(a, b) { return a.variable1 < b.variable1 ? 1 : -1; })
                .slice(0, n);
 

donde n es el número que queremos obtener como máximo, y variable1 la variable con el
valor que queremos comparar. 


Hope its usefull!

jueves, 27 de febrero de 2020

jQuery en ADF

Ejemplo práctico de como usar jQuery en ADF, en este caso como cambiar el type de un inputText para el caso de querer mostrar los caracteres de un campo contraseña.

<af:resource type="javascript"
                     source="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"/>
        <af:resource type="javascript">

          function showPasswordMethod(e) {
              var inputPassword1 = $("input[id*=it2]")[0];
              if (inputPassword1.type == "text") {
                  inputPassword1.type = "password";
                  $("img[id*=imgShowPassword]")[0].src = "/webcenter/../wcstatic/img/genericas/eye_black.png";
              }
              else {
                  inputPassword1.type = "text";
                  $("img[id*=imgShowPassword]")[0].src = "/webcenter/../wcstatic/img/genericas/eye_red.png";
              }
          }
        </af:resource>


<af:inputText label="Contraseña actual" id="it2" required="true"                                     styleClass="resetPasswordField oldpwd" value="#{resetPasswordBean.oldpassword}"
 secret="true" autoComplete="off"/>

<af:image source="/../wcstatic/img/genericas/eye_black.png"                                  id="imgShowPassword" inlineStyle="position: absolute;bottom: 190px; right: 14px; cursor: pointer;">
      <af:clientListener method="showPasswordMethod" type="click"/>
</af:image>


lunes, 10 de febrero de 2020

Almacenamiento por defecto de ficheros en base de datos en WebCenter Content

Cuando se usa el gestor documental WebCenter Content, por defecto los ficheros nativos se almacenan en el filesystem bajo la ruta /Oracle_domain/ucm/cs/vault, así como las transformaciones y renderizaciones web bajo /Oracle_domain/ucm/cs/weblayout. Pues bien, WebCenter Content permite almacenar los ficheros en base de datos. Hay una serie de ventajas a la hora de almacenar los ficheros en base de datos:
  • Seguridad, frente al filesystem que ofrece menos seguridad.
  • Transacciones (ACID), con la consiguiente seguridad de que recae en la base de datos.
  • Relación PK - fichero, que no ofrece el filesystem.
  • Backups, mucho más fácil de hacer en base de datos.
  • Duplicidad de datos, en base de datos esto no está permitido con la relación PK - fichero.
Para configurar el almacenamiento por defecto, debemos realizar dos acciones: modificar el provider de almacenamiento y modificar la regla de almacenamiento en el metadato.

Provider almacenamiento

Entramos con usuario administrador al sistema, y mediante el menú Administration seleccionamos Providers. Una vez dentro, seleccionamos la opción Info del DefaultFileStore, y lo editamos:



Ahora pulsamos en Edit rule... y nos aparecerá un popup, donde debemos selecionar la opción JDBC Storage. Las renditions también se almacenarán en la base de datos, a menos que indiquemos en esta sección si queremos almacenar algunas en el filesystem. Y esta parte está concluida.

Regla almacenamiento metadato

Abrimos los applets de administración (Administration, Admin applets) y abrimos el Configuration Manager. Navegamos al metadato StorageRule, y lo editamos. Tenemos que seleccionar en Default Value la storage rule que seleccionamos en el Provider, que es la Default Storage, por lo que seleccionamos la opción default.
 

Una vez hechos los cambios, debemos reiniciar el managed server de WCC, y la configuración habrá terminado. A partir de entonces los ficheros se almacenarán en la base de datos (bajo la tabla Filestorage).