miércoles, 28 de diciembre de 2022

ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier

 ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier

Hola.

Estoy obteniendo el siguiente error al tratar de levantar una base de datos de Oracle 11g en una nueva base de datos Oracle 19c. 

Estoy intentando una migración de base de datos de Oracle 11g a una Oracle 19c pluggable database. Obtengo el siguiente error cuando estoy intentando abrir la base de datos con el comando startup.

ORA-00603: ORACLE server session terminated by fatal error 
ORA-01092: ORACLE instance terminated. Disconnection forced 
ORA-00704: bootstrap process failure 
ORA-00604: error occurred at recursive SQL level 1 
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier Process ID: 92131 
Session ID: 11 Serial number: 25309

Solución

Para poder abrir la base de datos utilizar la opción upgrade del comando startup:

SQL> startup upgrade

Esta instrucción permite iniciar la base de datos en modo upgrade y poder accederla para completar el proceso de migración. 

*Esta solución no es definitiva debido a que se tiene que ejecutar cada que se quiere levantar la base de datos. Se requiere finalizar el proceso de migración completo que incluya la restauración completa de la base de datos en un nuevo servidor.


Espero les sirva.


lunes, 18 de julio de 2022

Error al ejecutar jar "no main manifest attribute"

Error al ejecutar jar "no main manifest attribute"

Hola.

Obtengo el siguiente error al intentar ejecutar un jar desde consola con el comando java -jar

La opción -jar sólo funciona con archivos JAR ejecutables por lo que estos deben tener un manifest con el atributo Main-Class especificado. 

En mi caso es un jar que no contiene un manifest dentro por lo que es necesario especificar los paquetes de la aplicación

Ejecutar jar "no main manifest attribute"

Les dejo aquí la siguiente secuencia de comandos que ejecute para ejecutar el jar y para buscar la estructura de paquetes de la aplicación:

jangel-MBP13:target jhernand$ java -jar myFirstApp-1.0-SNAPSHOT.jar

no main manifest attribute, in myFirstApp-1.0-SNAPSHOT.jar

jangel-MBP13:target jhernand$ 

jangel-MBP13:target jhernand$ java -cp myFirstApp-1.0-SNAPSHOT.jar MyGroup.MyFirstApp

Error: Could not find or load main class MyGroup.MyFirstApp

Caused by: java.lang.ClassNotFoundException: MyGroup.MyFirstApp

jangel-MBP13:target jhernand$ ls ../src/main/

java

jangel-MBP13:target jhernand$ ls ../src/main/java/

MyGroup

jangel-MBP13:target jhernand$ ls ../src/main/java/MyGroup/

App.java

jangel-MBP13:target jhernand$ java -cp myFirstApp-1.0-SNAPSHOT.jar MyGroup.App

Holaaaa mundoooo!

jangel-MBP13:target jhernand$ 


La aplicación es un simple Hola Mundo usado como ejemplo.

Referencias:

https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute

Espero les sirva.

jueves, 14 de julio de 2022

[ERROR] Source option 1.5 is no longer supported. Use 1.6 or later.

Resolver [ERROR] Source option 1.5 is no longer supported. Use 1.6 or later.

Hola.

Estoy obteniendo el siguiente error al ejecutar el goal docker:build con Maven en mi aplicación de TIBCO BusinessWorks Container Edition.

[ERROR] Source option 1.5 is no longer supported. Use 1.6 or later.
[ERROR] Target option 1.5 is no longer supported. Use 1.6 or later.


Este error se debe a la configuración que tengo del plugin maven-compiler-plugin

Tengo la siguiente versión de maven (3.8.5) y jdk (11) instalados en mi máquina:

jangel-MBP13:tmpjmsplugin jhernand$ mvn -version

Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)

Maven home: /usr/local/Cellar/maven/3.8.5/libexec

Java version: 11.0.14, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-11.0.14.jdk/Contents/Home

Default locale: en_US, platform encoding: UTF-8

OS name: "mac os x", version: "10.15.7", arch: "x86_64", family: "mac"

jangel-MBP13:tmpjmsplugin jhernand$ 


maven java javac version

Al parecer el error se debe a que desde la version 3.8.0 el valor default del maven-compiler-plugin cambio de 1.5 a 1.6

Solución


Para corregirlo hay que modificar las propiedades de target y source del plugin maven-compiler-plugin en el archivo pom.xml de la aplicación. 

Estoy utilizando la versión de JRE que se tengo instalado. Para saber la versión ejecuto:

/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

jangel-MBP13:tmpjmsplugin jhernand$ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

java version "1.8.0_331"

Java(TM) SE Runtime Environment (build 1.8.0_331-b09)

Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)

jangel-MBP13:tmpjmsplugin jhernand$ javac -version

javac 11.0.14

jangel-MBP13:tmpjmsplugin jhernand$


La siguiente configuración el archivo pom.xml funcionó para mi.

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>

Con este cambio el error debe quedar corregido y se puede volver a intentar el goal.

Referencias:


Espero les sirva.

miércoles, 13 de julio de 2022

Desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifacts

Cómo desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifacts

Hola.

En este post voy a describir cómo desplegar una aplicación REST con TIBCO BusinessWorks Container Edition usando Docker container con Azure Artifacts.

Mi aplicación es un servicio REST que recibe un request y publica un mensaje a una queue de EMS con la información recibida. 

En este caso requiero que las librerías de TIBCO EMS se encuentren en el repositorio y que sean descargadas al momento de construir la aplicación e incluidas en la imagen de Docker generada. Con esto al iniciar mi contenedor estas dependencias son resueltas y la aplicación se ejecute correctamente. 

Conexión a Azure Artifacts

Lo primero que tienen que tener configurado en el proyecto es una conexión a un Feed Artifact de Azure.

En la sección de Azure Artifacts, seleccionar el feed deseado y la opción Connect to Feed para ver la información de conexión al Feed desde nuestro proyecto. En esta sección se encuentra toda la información referente a la configuración de la conexión del Feed al proyecto.

1.- Editar el archivo settings.xml (Este se encuentra en la instalación de Maven: /opt/apache-maven-3.5.0/conf o también en el user home ${user.home}/.m2, se puede crear si no existe). Agregar el elemento de server siguiente: 

<servers>
.
.
<server>
<id>MiFeed</id>
<username>miusuario</username>
<password>[PERSONAL_ACCESS_TOKEN]</password>
</server>
</servers>

El Personal Access Token se genera desde ahi mismo siguiendo las instrucciones para generarlo con Packaging read & write scopes.

2.- Colocar los elementos: repositories y repository dentro del archivo POM de la aplicación. Los datos de conexión de estos elementos están disponibles en Azure Artifacts > Connect to Feed. Algo similar a lo siguiente

<project>
.
.
<repositories>
<repository>
<id>MiFeed</id>
<url>https://pkgs.dev.azure.com/micompany/miservicio/_packaging/MiFeed/maven/v1</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>


Hasta este punto tenemos conexión al Artifact Feed de Azure desde nuestro proyecto de TIBCO BusinessWorks Container Edition.

Subir plugins al feed con mvn deploy:deploy-file

Para subir los archivos hacia el repositorio se utiliza la instrucción de Maven deploy-file. En el caso particular de las librerías de EMS, es necesario primero empaquetar las librerías de la siguiente manera

1.- Copiar las carpetas desde /opt/tibco/ems/8.6/components/shared/1.0.0/plugins hacia una carpeta temporal con la siguiente estructura: runtime/plugins

2.- Crear un archivo zip de la carpeta runtime y asignarle un nombre descriptivo para las librerías como en la siguiente imagen: TIB_bwpluginjms_8.6.0_bwce-runtime.zip

Este nombre se usará en la instrucción deploy-file

*Podría ser también un archivo con extensión .jar

La estructura de directorios y archivo zip final deben verse como en la siguiente imagen.

EMS libraries runtime plugins

3.- Para subir el archivo zip antes generado con las librerías de EMS se utiliza la siguiente instrucción desde la carpeta donde se encuentra el archivo:
Los nombres de groupId, artifactId y versión dependen del paquete que se suba así como de la organización de nombres de archivos que se requiera.

mvn deploy:deploy-file -Dpackaging="zip" -DrepositoryId="MiFeed" -Durl="https://pkgs.dev.azure.com/micompany/miservicio/_packaging/MiFeed/maven/v1" -DgroupId="com.tibco.jms" -DartifactId="plugin" -Dversion="8.6.0.004" -Dfile="TIB_bwpluginjms_8.6.0_bwce-runtime.zip"

Agregar dependencias al proyecto en el POM application


Después de subir las librerías al repositorio o Feed ya pueden ser referenciadas desde un proyecto de BWCE. Para lograr esto, dentro del archivo POM de la aplicación es necesario agregar las dependencias que se encuentran en el repositorio externo.

1.- Ir a la URL del repositorio y seleccionar el Artifact deseado.
2.- En la pestaña Overview > Get this Package > Maven
Seleccionar el fragmento de XML para agregar al archivo POM de la aplicación. Algo similar a lo siguiente:

<dependency>
<groupId>com.tibco.jms</groupId>
<artifactId>plugin</artifactId>
<version>8.6.0.004</version>
<type>zip</type>
</dependency>


3.- Ir al proyecto de BWCE y pegar el fragmento XML en el POM de la aplicación (ej. MiProyecto.application/pom.xml). Agregar el elemento type como zip porque en este caso las librerías fueron subidas en ese formato. El valor por default es jar

<project>
.
.
<dependencies>
<dependency>
<groupId>com.tibco.jms</groupId>
<artifactId>plugin</artifactId>
<version>8.6.0.004</version>
<type>zip</type>
</dependency>
</dependencies>
</project>

Al momento de incluirlo en el archivo, y estar configurada la conexión a Azure Artifacts - Feed, la dependencia es descargada automáticamente en el folder local ${user.home}/.m2/repository con lo que se vuelve disponible para el proyecto.

Agregar dependencias en Docker image build


Con las dependencias incluidas en el proyecto, es necesario referenciarlas en el build de la imagen Docker que se genera al ejecutar el goal docker:build

Para esto hay que modificar el archivo POM de la aplicación (ej. MiProyecto.application/pom.xml) agregando el elemento de assembly como en el ejemplo siguiente:


<image>
.
.
<assemblies>
<assembly>
<basedir>/</basedir>
<descriptorRef>artifact</descriptorRef>
</assembly>
<assembly>
<name>plugins</name>
<descriptorRef>dependencies</descriptorRef>
<targetDir>/resources/addons/plugins</targetDir>
</assembly>
</assemblies>
</image> 

Esta configuración va a producir la siguiente estructura de directorios y Dockerfile. 

target-build-dockerfile

Posteriormente la imagen de Docker será construida incluyendo las dependencias del repositorio y las colocará en la ruta del contenedor especificada en el elemento XML assembly/targetDir. En este caso: /resources/addons/plugins

En el caso de las librerías EMS es necesario colocarlas en el folder plugins (/resources/addons/plugins) con el formato comprimido pues de ahí son tomadas y copiadas al momento de desplegar la aplicación en el contenedor.

Desplegar aplicación BWCE desde Business Studio


Con todos los cambios de arriba realizados y probada la conexión al repositorio de Artifacts de Azure desde el proyecto de BWCE, realizar el despliegue utilizando los siguientes goals de Maven:

docker:build

clean package initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json docker:build

docker:start

initialize docker:start -Ddocker.property.file=docker-dev.properties

Con todo esto hecho ya deben poder ver su contenedor iniciado con las dependencias de EMS resueltas exitosamente.

Les dejo un video de cómo desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifact.


Espero les sirva.

lunes, 11 de julio de 2022

Unable to read data from the transport connection: net_io_connectionclosed

Resolver Unable to read data from the transport connection: net_io_connectionclosed


Hola.

Estoy obteniendo el siguiente error al hacer envíos de correo electrónico utilizando ASP.NET. Estoy utilizando el Framework 4.0 

El error completo es el siguiente:

20220704 12:30:32 : Application Mail Error: System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: net_io_connectionclosed.

   at System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine)

   at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)

   at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)

   at System.Net.Mail.CheckCommand.Send(SmtpConnection conn, String& response)

   at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode)

   at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)

   at System.Net.Mail.SmtpClient.Send(MailMessage message)

   --- End of inner exception stack trace ---

   at System.Net.Mail.SmtpClient.Send(MailMessage message)

   at Models.Funciones.enviarEmailRegistroActivacion(SegmentoModel _model) in C:\www\www.misitio.com\Models\Funciones.cs:line 166


La razón es que Microsoft ha dejado de dar soporte para TLS1.0 y TLS1.1 para los endpoints default de SMTP. En mi caso smtp.office365.com

El problema es que las definiciones de SecurityProtocolType.Tls11 y SecurityProtocolType.Tls12 no están definidas en en el Framework 4.0 por lo que se tienen que especificar con una representación numérica de estos valores.

Abajo dejo el bloque de código con la linea de código que agregué para hacer funcionar el envío de correos. 

ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);

net_io_connectionclosed

Solución.


La configuration de envío que estoy usando es similar a la siguiente en donde he agregado el atributo enableSsl="true" a mi configuración smtp. Si no lo hiciera desde ahí se tiene que agregar en el código mismo.

<system.net>
  <mailSettings>
      <smtp from="noreply@noreply.net">
    <network host="smtp.office365.com" password="mipassword" port="587" userName="micuenta@misitio.com" enableSsl="true" />
      </smtp>
   </mailSettings>
</system.net>

Estoy usando el siguiente código para realizar el envío de correo electrónico, en negritas lo que he agregado:

public static void enviarEmailRegistroActivacion(RegistrarUsuarioSegmentoModel _model)
{
var bodyMail="";
MailAddress a = new MailAddress(_model.EMAIL);
MailAddress de = new MailAddress(p_FromMail);
MailMessage message = new MailMessage(de, a);

if (p_bcc_email.Length > 0)
{
MailAddress bcc = new MailAddress(p_bcc_email);
message.Bcc.Add(bcc);
}

message.IsBodyHtml = true;
message.Subject = "Activación de cuenta para ingreso";

bodyMail = "<p>Hola " + _model.NOMBRE + ".</p>";
bodyMail += "Recibimos sus datos correctamente.<br/>";
bodyMail += "<p>Atentamente,</p>";

message.Body = bodyMail;
// Use the application or machine configuration to get the
// host, port, and credentials.
//Allow TLS 1.0, 1.1 and 1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);

SmtpClient client = new SmtpClient();
//client.EnableSsl=true;
try
{
client.Send(message);
}
catch (Exception ex)
{
Funciones.GrabaArchivo(ArchivoLog, "Application Mail Error: " + ex.ToString(), true);
}
}        

Si no se agrega la propiedad EnableSsl, obtengo el siguiente error:
 

20220704 13:01:17 : Application Mail Error: System.Net.Mail.SmtpException: Error in processing. The server response was: 5.7.3 STARTTLS is required to send mail [MN2PR15CA0060.namprd15.prod.outlook.com]

   at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)

   at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode)

   at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)

   at System.Net.Mail.SmtpClient.Send(MailMessage message)


Con estos cambios, volver a generar el proyecto e intentar el envío de correo nuevamente.
La recomendación para resolver este problema es moverse a un Framework más actual para evitar este escenario de error.

Referencias:


Espero les sirva.

sábado, 25 de junio de 2022

Explorar archivos de un contenedor Docker

Cómo explorar archivos de un contenedor Docker

Hola.

Al utilizar contenedores de Docker en ocasiones es necesario saber qué es lo que está pasando dentro del contenedor.

Algunas cosas que se requieren saber comúnmente son: saber la estructura del sistema de archivos, las rutas importantes dentro del contenedor, los archivos incluidos en el contenedor como resultado de las instrucciones del Dockerfile, los comandos disponibles dentro del contenedor, etc.

docker exec

Para poder ingresar a un contenedor Docker que se encuentra ejecutándose (Docker run) se utiliza la siguiente instrucción utilizando el nombre o el id del contenedor. Si es el id, con los tres primeros dígitos es suficiente.    

docker exec -t -i nombrecontenedor /bin/bash

docker exec -t -i /bin/bash

Esta instrucción permite entrar a los archivos del contenedor en ejecución. Una vez dentro se puede explorar los folders utilizando los comandos comunes de exploración como es: ls (list), cd (change dir)

Para mayor referencia del comando docker exec, ver la documentación en linea de la página de documentación de Docker:

https://docs.docker.com/engine/reference/commandline/exec/

Espero les sirva.



viernes, 10 de junio de 2022

Ejecutar programa en silent mode en Windows

Cómo ejecutar programa en silent mode en Windows

Ejecutar aplicaciones en silent mode es muy útil cuando queremos dejar corriendo algo sin preocuparnos por el estado de la aplicación. 

Generalmente se usa para aplicaciones de las cuales no se requiere mucha información sobre su ejecución.

También sirve para no dejar ventanas abiertas con programas ejecutándose porque es estorboso. También es riesgoso cerrar una ventana por accidente y terminar con la ejecución de una aplicación. 

Para ejecutar un programa en silent mode:

Abrir un command prompt y moverse a la ruta donde se encuentra el .exe
Dependiendo del programa y los permisos que requiera, abrir el command prompt como administrador o de manera normal.

Ejecutar el comando similar al de abajo:

C:>"C:\programas\miprograma.exe" > "C:\programas\output.txt"

Ejecutar silent mode windows

El comando va a ejecutarse en silent mode y va a escribir todos los logs de la ejecución en el archivo output.txt 

Espero les sirva.




jueves, 9 de junio de 2022

Crear base de datos Oracle 19c en windows

Cómo crear base de datos Oracle 19c en windows

Hola.

Este post es para explicar cómo crear una nueva base de datos de Oracle 19c en una máquina con Windows

Oracle es un gestor de base de datos muy popular en la industria que permite administrar la información de una organización de manera eficaz. Puede manejar altos volúmenes de información, diversos niveles de seguridad, importar y exportar la información, recuperación de datos, etc.

Para este post ya deben tener instalado el software de Oracle 19c en su computadora. En mi post anterior explico como realizar esta instalación: https://jmartinhc.blogspot.com/2022/06/instalar-oracle-database-19c-en-windows.html

Para la creación de una base de datos de Oracle 19c existen diferentes métodos. En este caso estoy utilizando el Database Configuration Assistant de Oracle 19c también conocido como dbca.

Lo primero que hay que hacer es ir a la ruta donde se encuentra el ejecutable dbca y ejecutarlo. Esta ruta se encuentra dentro del path ORACLE_HOME. La ruta debe ser similar a la siguiente:

C:\app\oracle\product\19.0.0\dbhome_1\bin\dbca.exe

Una vez dentro del wizard de instalación, seleccionar las siguientes opciones o personalizar la instalación de acuerdo a lo que necesiten.

  • Database Operation: Create a database
  • Creation Mode: Typical configuration
    • Global database name
    • Administrative password
    • Pluggable database name

Les dejo un video de cómo crear una base de datos Oracle 19c con dbca en Windows.

Espero les sirva.


lunes, 6 de junio de 2022

Instalar Oracle Database 19c en Windows

Cómo instalar Oracle Database 19c en Windows 

Hola.

En este post describo cómo instalar Oracle Database 19c en Windows 10

1.- Descargar el software de instalación para Windows de la página de Oracle: https://www.oracle.com/mx/database/technologies/oracle19c-windows-downloads.html

El archivo descargado es: WINDOWS.X64_193000_db_home.zip

2.- Crear la estructura de directorios que será el path del ORACLE_HOME:

C:\app\oracle\product\19.0.0\dbhome_1

Extraer los archivos a este directorio.

3.- Dentro de la ruta del ORACLE_HOME ejecutar el archivo setup.exe para comenzar con el proceso de instalación.

4.- Seleccionar las opciones default de instalación:

  • Configuration Options: Setup Software Only. (Sin creación de base de datos)
  • Database Installation Options: Single instance database installation
  • Database Edition: Enterprise Edition
  • Oracle Home User: Use Virtual Account
  • Installation Location: C:\app\oracle\ (Este será el ORACLE_BASE)

5.- Clic en Close.

Después de esto el software de Oracle Database 19c ya se encuentra instalado y configurado en Windows.

Les dejo aquí un video de cómo realizar este procedimiento.

Espero les sirva.

jueves, 2 de junio de 2022

Registrar o eliminar TIBCO EMS de los servicios de Windows

Cómo registrar o eliminar TIBCO EMS de los servicios de Windows

Hola.

En este post voy a explicar cómo registrar o eliminar TIBCO EMS como servicio de Windows.

1.- Abrir una ventana de Command Prompt como Administrator

2.- Moverse hacia el path de TIBCO EMS:

cd C:\tibco\ems\8.5\bin

3.- Ejecutar el comando de registro del servicio tibemsd:

emsntsrg /i tibemsd C:\tibco\ems\8.5\bin C:\tibco\ems\8.5\bin "-config C:\tibco\ems\8.5\bin\tibemsd.conf" 7222

La sintaxis del comando es:

emsntsrg /i [/a]|[/d] tibemsd emsntsct_directory tibemsd_directory [arguments] [suffix]

Para mayor información acerca de los parámetros del comando: https://docs.tibco.com/pub/ems-vms/8.5.1/doc/html/GUID-A3B31012-F10A-47BC-9BA3-5676F7DCE350.html

4.- Revisar los servicios de Windows para verificar que el servicio ha sido registrado correctamente.

Para eliminar TIBCO EMS como servicio de Windows se utiliza la misma utilidad

emsntsrg /r tibemsd 7222

*Si se usa sufijo para registrar el servicio, es importante ponerlo para removerlo.

Les dejo un video de cómo registrar TIBCO EMS como servicio de Windows.


Espero les sirva.


miércoles, 1 de junio de 2022

Instalar TIBCO BusinessWorks 5.14 - Administrator 5.11 y Configurar dominio en Windows

Cómo instalar TIBCO BusinessWorks 5.14 - Administrator 5.11 y Configurar dominio en Windows 10


En este post voy a explicar cómo instalar TIBCO BusinessWorks 5.14 y TIBCO Administrator 5.11 en Windows 10 así como configurar un dominio.

TIBCO BusinessWorks es una herramienta de integración que permite a las organizaciones crear,  orquestar servicios, capturar y publicar eventos desde aplicaciones internas o externas. 

Para instalar TIBCO BusinessWorks es necesario primero instalar TIBCO Rendezvous y después TIBCO Runtime Agent

Es importante checar que las versiones a instalar sean compatibles entre ellas, de otra manera no se podrá instalar TIBCO BusinessWorks correctamente.

Las versiones y el orden que estoy instalando son:

TIBCO Rendezvous 8.4.6

TIBCO Runtime Agent 5.11.1

TIBCO BusinessWorks 5.14.0

Para realizar la instalación de estos productos es necesario realizar la descarga correspondiente en la página de TIBCO: https://edelivery.tibco.com

Una vez con la descarga del software para Windows de cada producto, es necesario descomprimir los archivos y ejecutar el TIBCOUniversalInstaller-x86-64.exe con el cual comienza el proceso de instalación.

Configurar dominio 


Para configurar un dominio de TIBCO es necesario descargar e instalar TIBCO Administrator de la página de TIBCO.

En este ejemplo estoy instalado: 

TIBCO Administrator - Enterprise Edition Software 5.11.1

Para configurar el dominio, durante el proceso de instalación se ofrece la opción de configurar un dominio. Esto también se puede hacer después de la instalación ejecutando la utilidad domainutility que se encuentra en la siguiente ubicación: C:\tibco\tra\5.11\bin

Para crear el dominio, sigan los siguientes pasos durante el proceso de instalación:

  1. Seleccionar Master Server
  2. Introducir un nombre para el dominio
  3. En este caso no tengo base de datos así que deselecciono: 
    • Domain Information Stored in a Data Base
  4. Seleccionar puerto para acceder a la consola web después de la instalación
  5. Introducir credenciales de acceso
  6. Los servicios de Hawk y Admin son creados y registrados como servicios de Windows.
  7. Abrir Servicios de Windows e iniciar ambos servicios.
  8. Clic en Exit
Después de esto ya se puede acceder a la consola web del TIBCO Administrator. Para esto con un navegador de internet ir a la dirección:

http://localhost:<Puerto seleccionado  en el paso 4> 

Las credenciales son las introducidas en el paso 5.

Les dejo aquí un video de cómo instalar TIBCO BusinessWorks 5.14.0, TIBCO Administrator 5.11 y cómo configurar un dominio en Windows 10



Espero les sirva.

viernes, 20 de mayo de 2022

Deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Cómo deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Hola

Diferente al post anterior, en esta ocasión voy a describir cómo desplegar un servicio REST de TIBCO BusinessWorks Container Edition desde Jenkins usando el plugin de Maven. El deployment será en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos


-Código fuente de la aplicación en un repositorio de git  
-Maven 3.8.5
-Jenkins instalado y configurado con Maven plugin y ruta de instalación de Maven
-Microsoft Azure CLI conectado a Microsoft Azure
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento


1.- Agregar plugin de Maven: Maven Integration plugin

2.- Ir a Administrar Jenkins > Configuración de herramientas
  • En la sección Maven, clic en el botón Maven Installations
  • Ingresar un Nombre 
  • Ingresar la ruta de instalación de Maven (ej. /usr/local/Cellar/maven/3.8.5/libexec/)
3.- Desde Jenkins crear un proyecto de tipo Maven

En la configuración del proyecto, ingresar los siguiente información:

General
Github project: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)

Source Code Management
Git > Repositories > Repository URL: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)
Branches to build: Nombre del branch (ej. */master)

Build
Root POM: Path al archivo POM principal (ej. OrderMgmt.application.parent/pom.xml)
Goals and options: Maven goals a ejecutar (initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -e -X)

4.- Guardar el proyecto

5.- Con esas configuraciones clic en Build Now para ejecutar el proyecto.


Les dejo un video de cómo hacerlo.




Espero les sirva.



miércoles, 18 de mayo de 2022

Desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Cómo desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Hola

En este post voy a describir cómo desplegar una servicio REST de TIBCO BusinessWorks Container Edition desde TIBCO Business Studio usando el plugin de Maven en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos

-TIBCO BusinessWorks Container Edition 2.7.0 con Maven plugin.
-Microsoft Azure CLI conectado a Microsoft Azure
-Maven 3.8.5 (Si se quiere ejecutar fuera de TIBCO Business Studio)
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento

Es necesario generar el archivo POM del proyecto para poder realizar un despliegue con Maven. 

1.- Clic derecho sobre la aplicación y seleccionar Generate POM for Application

Ingresar la información referente al proyecto.

  • Deploy options: Docker
  • Image name: Imagen de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • BWCE image: Imagen base de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • Run on Docker host. Ingresar puertos usados por la aplicación.
  • Select platform: Kubernetes/Openshift (Para un servicio de AKS)
  • Deployment name
  • Service name
  • Service Type
  • Container Port
Los siguientes archivos de propiedades son generados sobre la carpeta de la aplicación:
  • docker-dev.properties
  • docker-host-env-dev.properties
  • docker-host-env-prod.properties
  • docker-prod.properties
  • k8s-dev.properties
  • k8s-prod.properties
2.- Desde TIBCO Business Studio seleccionar Run > Run configurations

3.- Crear un Maven build configuration con los siguientes goals:

clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties

Los goals arriba especificados van a realizar las siguientes tareas:

Clean: Borra los archivos, folders generados de una construcción anterior de recursos.
Initialize: Carga los valores especificados en los archivos de configuración (docker-dev.properties,
k8s-dev.properties)
com.tibco.plugins:bw6-maven-plugin:bwfabric8json:  Genera los templates .yml para el deployment
fabric8:resource: Crea los archivos yml para el deployment (target/classes/META-INF/fabric8/kubernetes/kubernetes.yml) 
fabric8:apply: Ejecuta el deployment en Kubernetes

Las properties se especifican en el formato -Dpropiedad:

-Ddocker.property.file=docker-dev.properties
-Dk8s.property.file=k8s-dev.properties
-e -X son parámetros para ver logs con detalles y errores

4.- Clic en Ejecutar

5.- Opcionalmente se puede ejecutar el despliegue fuera de TIBCO Business Studio teniendo instalado Maven.

Para esto, ir a la ruta donde se encuentra el archivo POM principal sobre la carpeta de aplicación.parent y ejecutar la misma linea de goals con el prefijo de Maven (mvn)

mvn clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties


6.- Verificar que el despliegue haya sido exitoso en Azure Kubernetes

Les dejo un video de cómo realizar este procedimiento.



Espero les sirva


martes, 17 de mayo de 2022

Azure AKS deployment ErrImagePull ImagePullBackOff

Azure deployment ErrImagePull ImagePullBackOff

Hola

Estoy obteniendo el siguiente error al momento de la creación de un Pod al hacer pull de una imagen de un Container Registry en Azure

En la console de Azure y al hacer un describe pod obtengo lo siguiente: 

Failed to pull image "miazureregistry.azurecr.io/tibco/ordermgmt/v1": rpc error: code = Unknown desc = failed to pull and unpack image
"miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to resolve reference "miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to
authorize: failed to fetch anonymous token: unexpected status: 401
Unauthorized


El deployment lo estoy haciendo en un Azure Kubernetes Service y utiliza una imagen de un Container Registry también en Azure.

Los he creado de manera independiente por lo que no hay comunicación ni permisos entre ellos.

Para conocer el estatus entre ambos ejecuto la siguiente instrucción: 

az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

[2022-05-17T16:04:39Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:04:39Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:04:39Z] ACR location: eastus

[2022-05-17T16:04:39Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:04:39Z] Checking managed identity...

[2022-05-17T16:04:39Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:04:39Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:04:39Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:04:39Z] Validating image pull permission: FAILED

[2022-05-17T16:04:39Z] ACR miazureregistry.azurecr.io rejected token exchange: ACR token exchange endpoint returned error status: 403. body: {"errors":[{"code":"DENIED","message":"retrieving permissions failed"}]}


Como ven el AKS no tiene permisos para hacer pull de imágenes sobre el container registry.

Solución 


Para solucionar el problema hay que ejecutar la siguiente instrucción:

az aks update -n micluster -g jhernand --attach-acr miazureregistry

......

  "fqdnSubdomain": null,

  "httpProxyConfig": null,

  "id": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/jhernand/providers/Microsoft.ContainerService/managedClusters/micluster",

  "identity": {

    "principalId": "838f72dc-be60-45d3-afef-bb4bd3985f5e",

    "tenantId": "cde6fa59-abb3-4971-be01-2443c417cbda",

    "type": "SystemAssigned",

    "userAssignedIdentities": null

  },

  "identityProfile": {

    "kubeletidentity": {

      "clientId": "ed10dc89-3346-4a8b-818b-dcb41ee87960",

      "objectId": "194333ab-cf81-422d-8185-e9f8e75f2cb9",

      "resourceId": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/MC_jhernand_micluster_eastus/providers/Microsoft.ManagedIdentity/userAssignedIdentities/micluster-agentpool"

    }

  },

  "kubernetesVersion": "1.22.6",

  "linuxProfile": null,

......


La instrucción asigna permisos de Pull (AcrPull) sobre el Managed Identity micluster-agentpool con lo que los Pod ya puede jalar la imagen exitosamente.

Una vez hecho, esperar algunos minutos para que se replique el cambio y después checar nuevamente:

jangel-MBP13:~ jhernand$ az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

Merged "micluster" as current context in /var/folders/k1/cbw5hqpd0m3d6s9sxf24m7br0000gq/T/tmp18_0ut_a

Error attaching, falling back to logs: unable to upgrade connection: container canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28 not found in pod canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28_default

[2022-05-17T16:22:25Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:22:25Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:22:25Z] ACR location: eastus

[2022-05-17T16:22:25Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:22:25Z] Checking managed identity...

[2022-05-17T16:22:25Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:22:25Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:22:25Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:22:25Z] Validating image pull permission: SUCCEEDED

[2022-05-17T16:22:25Z] 

Your cluster can pull images from miazureregistry.azurecr.io!


Después de esto, verificar que los Pods arranquen correctamente después de algunos minutos o borrarlos y recrearlos.

Les dejo video de cómo realizar el proceso.




Espero les sirva




viernes, 6 de mayo de 2022

Subir imagen de Docker a Container Registry de Azure

Cómo subir imagen de Docker a Container Registry de Azure

Hola.

En este post voy a explicar cómo subir una imagen de Docker a un Container registry de Microsoft Azure.

Prerequisitos

  • Cuenta en azure con una suscripción y un resource group válidos.
  • Crear un Container Registry en Azure y obtener el nombre del Login Server
  • Azure CLI instalado.
  • Docker local instalado con la imagen que queremos subir al Container registry.

Procedimiento


Desde una terminal ingresar los comandos de Azure CLI

1.- Hacer login en el Container Registry con el siguiente comando y el nombre del Container Registry 

az acr login -n miazureregistry

Para ver todos los container registries, usa el siguiente comando.

az acr list

2.- Verificar que la imagen de Docker a subir está disponible con el siguiente comando.

docker images

3.- Etiquetar la imagen a subir utilizando el nombre del Login Server de Azure como en el siguiente comando:

docker tag tibco/bwce miazureregistry.azurecr.io/tibco/bwce

4.- Hacer Docker push para subir la imagen al Container registry de Azure

docker push miazureregistry.azurecr.io/tibco/bwce

5.- Para verificar que la imagen fue subida, ejecutar el siguiente comando. También se puede verificar desde la interfaz gráfica en el portal de Azure.

az acr repository list --name miazureregistry

También dejo aquí abajo video de cómo realizar este procedimiento.

Espero les sirva.

martes, 3 de mayo de 2022

Connection timed out after 20 seconds of inactivity

FTP connection error: Connection timed out after 20 seconds of inactivity


Hola.

Estoy obteniendo el siguiente error al intentar conectarme a un sitio FTP básico en IIS. El sitio FTP está configurado y puedo accederlo internamente desde el servidor mismo pero no desde fuera. El sitio no tiene seguridad activada (No SSL

Obtengo el siguiente mensaje al utilizar un cliente de FTP (FileZilla)

Connection timed out after 20 seconds of inactivity

Status:      Resolving address of medicamentos.bo

Status:      Connecting to 72.167.20.94:21...

Error:        Connection timed out after 20 seconds of inactivity

Error:        Could not connect to server


Para resolver este problema, realicé los siguientes pasos:

1.- En el sitio FTP seleccionar FTP Firewall Support.

En el campo de External IP Address of Firewall introducir la IP publica del servidor

IIS - FTP Firewall Support

2.- Buscar Servicios, desde el Inicio y reiniciar el servicio Microsoft FTP Service. Este reinicio es muy importante porque los cambios hechos en IIS no se tomarán hasta que se reincide el servicio FTP.

Services - Microsoft FTP Service

3.- En el programa cliente de FTP verificar que la opción Encryption sea: Only use plain FTP (insecure) como en la siguiente imagen.

FileZilla - Site Manager

4.- Clic en conectar y ya deben poder acceder al sitio FTP. 

Status:      Resolving address of medicamentos.bo

Status:      Connecting to 72.167.20.94:21...

Status:      Connection established, waiting for welcome message...

Status:      Plain FTP is insecure. Please switch to FTP over TLS.

Status:      Logged in

Status:      Retrieving directory listing of "/"...

Status:      Calculating timezone offset of server...

Status:      Timezone offset of server is -14400 seconds.

Status:      Directory listing of "/" successful


Espero les sirva.

martes, 19 de abril de 2022

Crear Docker image de TIBCO BWCE para Linux

Cómo crear un Docker image de TIBCO BusinessWorks Container Edition para Linux Containers

Una imagen de Docker para TIBCO BusinessWorks Container Edition se crea para construir aplicaciones que incluyan el runtime de BWCE. Esto permite tener la funcionalidad de BWCE dentro de un contenedor Docker.

Requisitos

Se requiere tener instalado BusinessWorks Container Edition y Docker.

Descargar el archivo bwce-runtime-<version>.zip del sitio de TIBCO edelivery http://edelivery.tibco.com/

Para crear la imagen de Docker para BWCE

1.- Ir a la ruta de TIBCO_HOME/bwce/<version>/docker

2.- Copiar el archivo bwce-runtime-<version>.zip descargado a la ruta TIBCO_HOME/bwce/<version>/docker/resources/bwce-runtime

3.- Abrir una terminal e ir a la ruta TIBCO_HOME/bwce/<version>/docker y ejecuta el comando:

docker build -t tibco/bwce:latest .

Esto va a construir la imagen de docker con el archivo Dockerfile que se encuentra en la ruta. Este archivo contiene las instrucciones para la creación de la imagen, imagen origen, tag, permisos, instalación y copiado de los archivos a incluir en la imagen. 

Al terminar de ejecutarse el comando la imagen habrá sido creada

4.- Para verificar que la imagen ha sido creada, ejecutar el comando:

docker images

jhernand$ docker images

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE

tibco/bwce   latest    3a1eeeec36a0   23 hours ago   521MB

Les dejo video de cómo crear imagen de Docker para BWCE.

Espero les sirva. 


sábado, 16 de abril de 2022

La décima y última plaga

La décima y última plaga


Considero que se tiene que reconsiderar el concepto que se tiene de la vida como algo único e invaluable.

Conservar la vida siempre ha sido sobrevalorado.

Joseph Mallord William Turner - The Tenth Plague of Egypt
Joseph Mallord William Turner - The Tenth Plague of Egypt


Entiendo del valor de la misma pero considerando algunos puntos que sabemos acerca del paso siguiente, la muerte, es lógico que la vida como la conocemos no tenga la importancia que le damos.

Siempre es bueno observar las cosas desde otro punto o, aún mejor, observarla desde el lado opuesto.

“Pasamos más tiempo muertos que vivos”

Es una verdad (si es que el tiempo funciona igual estando muertos)

No deberíamos estar más preocupados por la muerte? -o dígase de otra manera- la “vida” después de la muerte.

En este escrito estoy dando por entendido que la vida humana continúa después de la muerte.

Hemos crecido con la enseñanza de cuidar la vida, de preservarla, que la vida es un regalo invaluable. Sí lo es.

Qué sabemos de la muerte?

También considero que debemos enseñarnos a pensar en la continuación. 

Es nada lo que sabemos de ella. Es más por lo que nos han enseñado y por lo poco que podemos deducir de lo que hemos experimentado.

Aquí es importante no hacer conclusiones de ella en base a pensamientos personales.

La mejor base aquí, y en muchas otras cosas, es el conocimiento concentrado de generaciones anteriores para poder emitir un punto de vista que al menos pueda ser considerado.

Influye hoy, en lo que viene después?

En la vida como la conocemos, sí.

Pero en la vida que continúa? Esta respuesta no la puedo dar. Siguiendo la lógica que conocemos, sí.

No podemos más que aferrarnos a lo que sabemos.

Por lo tanto la lógica nuestra dicta que debemos tener cuidado en lo que hacemos en esta vida para procurar que lo que viene después sea también bueno para nosotros.

Tomando esto como cierto, la forma de morir cobra un factor irrelevante. No la muerte en sí pero sí la forma de morir. Entiendo que esto suene un poco insensible pero en la generalidad de la “vida” no tendría mayor importancia.

Si es que la vida continúa, ese momento cobraría una importancia menor.

Cobrará importancia para quien se queda con vida y no sabe cual es el destino de las personas. Que es en donde estamos todos los que leemos ahora.

Creo que se debe vivir sin la noción del tiempo en esta vida. La noción del tiempo es propio de esta vida pero considero que no de la siguiente. Olviden todo lo que saben del tiempo si se preguntan acerca de la muerte.

Esto del tiempo es un juego de una mente superior para nosotros y nuestro entendimiento.

Es más poderosa una mente que es ambos géneros que una una mente que solo conoce uno de ellos. Mucho más una mente que no tiene limitantes como el tiempo. Ayer, hoy y mañana es lo mismo. Son todos los momentos en un momento.

No debería enseñarse que vivir cierto número de años significa haber vivido bien. Tampoco entender que morir joven estuvo mal.

Morir es bueno también, es como la vida. Cuidar la muerte, preservarla, la muerte es un regalo invaluable.

Es mejor?

Debe ser diferente para todos. Nadie tiene la respuesta. La respuesta es diferente para todos. Podría ser mejor o peor que la vida que conocemos.

Todos llegaremos ahí, eso es una verdad. Y la verdad tiene más peso que la suposición. Ya en ese lugar decidiremos nuestra postura.

No es posible entenderlo completamente porque la condición humana es muy limitada. 

Las preocupaciones nuestras son tan irrelevantes que me acabo de arrepentir de escribir acerca de ellas.

Considero que mientras tanto, aún podemos decidir cómo influenciar en esa siguiente "vida" - "muerte".