lunes, 9 de septiembre de 2019

TIBCO BW Reiniciar engines en modo fault tolerance con AppManage

TIBCO BW Cómo reiniciar engines en modo fault tolerance con AppManage


Hola.


En esta ocasión voy a escribir acerca de la manera en como detener e iniciar un engine de TIBCO BusinessWorks en modo fault tolerance usando la AppManage utility.

Resulta que hay un job programado que reinicia algunos engines fault tolerant pero sucede que, en algunas ocasiones, el engine primario se queda colgado al intentar apagarlo. El secundario si reinicia pero se queda en estatus "Standing by" y nunca toma el rol principal.

Esto ha ocasionado algunos problemas ya que los engines no son reiniciados correctamente y las transacciones se quedan atoradas hasta que por alguna otra alerta se sabe que los engines no están procesando.

Investigando un poco en la página de soporte, me encontré que los engines en modo fault tolerance deben ser detenidos e iniciados de manera especial, es decir que el orden de start y stop debe ser considerado.

Solución.

Les dejo aquí abajo la manera correcta de reiniciar los engines en modo fault tolerance.
Lo estoy replicando en mi job programado para analizar los resultados.

Para detener engines.

Stop - Primero el binding secundario y luego el primario

./AppManage -stop -app midominio/AppFolder/AppName -service AppName.par -binding AppName-1 -domain midominio -cred /path/to/credenciales.txt 

./AppManage -stop -app midominio/AppFolder/AppName -service AppName.par -binding AppName -domain midominio -cred /path/to/credenciales.txt 


Para iniciar engines

Start - Primero el binding primario y luego el secundario

./AppManage -start -app midominio/AppFolder/AppName -service AppName.par -binding AppName -domain midominio -cred /path/to/credenciales.txt 

./AppManage -start -app midominio/AppFolder/AppName -service AppName.par -binding AppName-1 -domain midominio -cred /path/to/credenciales.txt 


Pueden encontrar el artículo original de soporte en este link: 



Espero les sirva.









viernes, 6 de septiembre de 2019

Instalar PostgreSQL 9.3 en Oracle Linux

Cómo instalar PostgreSQL 9.3 en Oracle Linux Server 7.5



Hola.

Estoy haciendo un training sobre contenedores y en una unidad de estudio se necesita tener instalado PostgresSQL para hacer uno de los laboratorios del curso.

Para este curso estoy usando una máquina virtual de Oracle Linux corriendo en VirtualBox así que he necesitado conocer los pasos para instalar PostgreSQL en este ambiente.

Aquí abajo les dejo las instrucciones de cómo lo hice y que me funcionó bien.

1.- Descargar e instalar las librerías requeridas para PostgreSQL - SDL (Simple DirectMedia Layer)

  • Abrir la dirección: https://www.libsdl.org/download-1.2.php
  • Ir a la sección Runtime Libraries > Linux
  • Seleccionar con click derecho y "Save as" en SDL-1.2.15-1.x86_64.rpm
  • Una vez descargado este archivo cambiar a usuario root e instalar 
[oracle@localhost Downloads]$ sudo su
[root@localhost Downloads]# yum localinstall -y SDL-1.2.15-1.x86_64.rpm
.
.
.
Running transaction
  Installing : SDL-1.2.15-1.x86_64                                                                                                                         
  Verifying  : SDL-1.2.15-1.x86_64                                                                                                                       

Installed:
  SDL.x86_64 0:1.2.15-1                                                                                                                                        

Complete!

2.-Descargar e instalar Postgresql 9.3

  • Abrir la dirección: https://yum.postgresql.org/repopackages.php
  • Ir a la sección PostgreSQL 9.3
  • Seleccionar con click derecho y "Save as" en Red Hat Enterprise Linux 7 - x86_64
  • Una vez descargado el archivo hay que instalarlo
[root@localhost Downloads]# yum localinstall pgdg-redhat93-9.3-3.noarch.rpm 
.
.
Running transaction
  Installing : pgdg-redhat93-9.3-3.noarch                                                                                                                  1/1 
  Verifying  : pgdg-redhat93-9.3-3.noarch                                                                                                                  1/1 

Installed:
  pgdg-redhat93.noarch 0:9.3-3                                                                                                                                 

Complete!
[root@localhost Downloads]# 

3.- Instalar Postgresql server

[root@localhost Downloads]# yum -y install postgresql93-server postgresql93
.
.
Installed:
  postgresql93.x86_64 0:9.3.25-1PGDG.rhel7                                   postgresql93-server.x86_64 0:9.3.25-1PGDG.rhel7                                  

Dependency Installed:
  postgresql93-libs.x86_64 0:9.3.25-1PGDG.rhel7                                                                                                                

Complete!
[root@localhost Downloads]#

4.- Instalar la UI Administration de Postgresql

[root@localhost Downloads]# sudo yum install pgadmin3_93 pgadmin3_93-docs
.
.
Installed:
  pgadmin3_93.x86_64 0:1.22.1-1.rhel7                                         pgadmin3_93-docs.x86_64 0:1.22.1-1.rhel7                                        

Dependency Installed:
  wxBase.x86_64 0:2.8.12-8.el7                                                   wxGTK.x86_64 0:2.8.12-8.el7                                                  

Complete!
[root@localhost Downloads]#

4.- Iniciar la base de datos

[root@localhost bin]$ /usr/pgsql-9.3/bin/postgresql93-setup initdb
Initializing database ... OK

5.- Activar prendido automático para iniciar al arrancar el sistema

[root@localhost bin]$ systemctl enable postgresql-9.3.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.3.service to /usr/lib/systemd/system/postgresql-9.3.service.

6.- Iniciar el servicio

[root@localhost bin]# /sbin/service postgresql-9.3 start
Redirecting to /bin/systemctl start postgresql-9.3.service

7.- Checar el estatus de la base de datos

[root@localhost bin]# /sbin/service postgresql-9.3 status
Redirecting to /bin/systemctl status postgresql-9.3.service
● postgresql-9.3.service - PostgreSQL 9.3 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.3.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-09-06 14:11:47 EDT; 1min 10s ago
  Process: 21118 ExecStart=/usr/pgsql-9.3/bin/pg_ctl start -D ${PGDATA} -s -w -t 300 (code=exited, status=0/SUCCESS)
  Process: 21108 ExecStartPre=/usr/pgsql-9.3/bin/postgresql93-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 21121 (postgres)
   Memory: 14.4M
   CGroup: /system.slice/postgresql-9.3.service
           ├─21121 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data
           ├─21122 postgres: logger process   
           ├─21124 postgres: checkpointer process   
           ├─21125 postgres: writer process   
           ├─21126 postgres: wal writer process   
           ├─21127 postgres: autovacuum launcher process   
           └─21128 postgres: stats collector process   

Sep 06 14:11:46 localhost.localdomain systemd[1]: Starting PostgreSQL 9.3 database server...
Sep 06 14:11:46 localhost.localdomain pg_ctl[21118]: < 2019-09-06 14:11:46.570 EDT >LOG:  redirecting log output to logging collector process
Sep 06 14:11:46 localhost.localdomain pg_ctl[21118]: < 2019-09-06 14:11:46.570 EDT >HINT:  Future log output will appear in directory "pg_log".
Sep 06 14:11:47 localhost.localdomain systemd[1]: Started PostgreSQL 9.3 database server.
[root@localhost bin]# 

Estos pasos me funcionaron para tener la base de datos PostgreSQL 9.3 instalada y lista para operar en Oracle Linux 7.5.

Update: Este método también funciona para Oracle Linux Server 7.6


Espero les sirva.


jueves, 5 de septiembre de 2019

Exception from HRESULT: 0x80131040

The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)


Hola.

En este post voy a escribir acerca de un error que nos encontramos el día de hoy en una aplicación web.

Es importante mencionar que el error ocurrió al momento de reemplazar el archivo dll de la aplicación. Esto fue para liberar algunos cambios en producción que ya habían sido probados en desarrollo.

La liberación de cambios a producción se hace de manera manual (no vamos a hablar acerca de eso). Es decir que el archivo dll de la aplicación es copiado del ambiente de desarrollo a producción. Generalmente lo hacemos reemplazando el archivo dll de tal manera que no hay dos versiones del mismo en el mismo directorio.

El error que se cometió en esta ocasión es que se hizo un backup del archivo dll en la misma carpeta bin. Es decir que se cambió el nombre al archivo dll para respaldarlo y luego se colocó el nuevo dll en la misma carpeta bin.

El error que obtuvimos fue:

Could not load file or assembly '1-www.miaplicacion.com' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040

En realidad el error es bastante descriptivo.

No se debe colocar ambos dlls de la misma aplicación en la carpeta bin. A pesar de tener un nombre diferente hay problema en la aplicación si los archivos dll están duplicados en el mismo folder.

Así que la solución fue borrar el archivo backup de la carpeta bin y con esto el error quedo resuelto.


Espero les sirva.







martes, 3 de septiembre de 2019

Hacer submit a un form con return de una función Javascript

Cómo hacer un submit a un form con el resultado o return de una función Javascript.


Hola.

En este post voy a describir diversas maneras de cómo realizar un submit a un form utilizando el resultado o return de una función Javascript.

Esto se utiliza generalmente cuando se requiere hacer validaciones Javascript en los campos del form antes de decidir si se hacer submit o no. Por ejemplo validar que los campos requeridos estén llenos o en formato correcto.

El control del submit, como he mostrado en otros posts, se puede realizar en diversos momentos usando Javascript y a través de diferentes elementos HTML.

El submit de un form se puede realizar con: botón tipo submit, botón normal con javascript, el evento onsubmit del form, etc.

En este caso se usa el return de una función Javascript en el evento onclick de un submit.

Dejo aquí los ejemplos básicos de cómo usar el return de una función para permitir la ejecución del submit.

Dos botones tipo submit muestran directamente el return false y return true en acción. El tercer submit llama a la función Javascript y valida que la caja de texto tenga una longitud mayor a cero para regresar true, por default regresará falso.


<!DOCTYPE HTML> 
<html lang = "en-us"> 
<head> 
  <title></title> 
  <meta charset = "utf-8" /> 

<script type="text/javascript">

function funcionreturn(){

var resultado=false;
if(document.formnombre.var1.value.length>0) resultado=true;
alert(resultado);
return resultado;

}

</script>

</head> 
<body> 

<form name="formnombre" id="formid" action="http://www.google.com">

<input type="text" name="var1" value="" />

<input type="submit" value="submit return false" onclick="return false;" />
<input type="submit" value="submit return true" onclick="return true;" />
<input type="submit" value="return funcion" onclick="return funcionreturn();"  />

</form>

</body> 
</html> 


Espero les sirva.




domingo, 1 de septiembre de 2019

Obtener el valor de un radio button con Javascript

Como obtener el valor de un radio button con Javascript


Hola.

En este post voy a mostrar cómo obtener el valor de un radio con Javascript y cómo hacer validación para saber si un radio ha sido seleccionado o no. Esto es muy útil cuando se quiere hacer validaciones Javascript en un form antes de hacer submit.

El radio button tiene una función especial dentro de los elementos HTML que se usan dentro de un form. Permite limitar a determinado numero de opciones la elección de un usuario.

Generalmente se usa cuando son pocas las opciones a elegir. Digamos dos o tres opciones. Otros controles se pueden usar cuando se trata de múltiples opciones como por ejemplo los check box o los select con opción múltiple.

El uso más común que le he dado es la opción de género (Masculino y Femenino), dirección (Primaria y Secundaria), etc.

Lo primero que deben tomar en cuenta es que para lograr este comportamiento del radio button, los radio button deben tener el mismo name. Ejemplo:

<input type="radio" name="nombreradio" value="valor1" />
<input type="radio" name="nombreradio" value="valor2" />
<input type="radio" name="nombreradio" value="valor3" />

Colocando los radios con el mismo nombre permite que uno solo de ellos permanezca seleccionado. Si el usuario hace click en otro de ellos, este será el seleccionado y el anterior se limpiará.

Ahora, para obtener el valor seleccionado, basta acceder la propiedad value del radio button. Como todos tienen el mismo nombre se puede usar el name y devolverá un único valor.

Aquí abajo les dejo el ejemplo HTML con Javascript para que lo prueben con cualquier navegador.


<!DOCTYPE HTML> 
<html lang = "en-us"> 
<head> 
  <title></title> 
  <meta charset = "utf-8" /> 

<script type="text/javascript">

function verradiovalue(){
  var radiovalue=document.nombreform.nombreradio.value;
  if(radiovalue.length==0) radiovalue="ninguno";
  alert("Valor seleccionado: " + radiovalue);
}

</script>

</head> 
<body> 

<form name="nombreform" id="idform" action="http://www.google.com">

<input type="radio" name="nombreradio" value="valor1" />
<input type="radio" name="nombreradio" value="valor2" />
<input type="radio" name="nombreradio" value="valor3" />

<input type="button" value="Ver radio value" onclick="verradiovalue();" />

</form>

</body> 
</html> 


Puse una función Javascript en un botón para ver el valor del radio seleccionado. Si no hay selección se imprime "ninguno".

Con esto pueden personalizar su código a placer.

Espero les sirva.