domingo, 21 de mayo de 2023

Ver errores descriptivos de ASP clásico en navegador con IIS 10

Cómo ver errores descriptivos de ASP clásico en navegador con IIS 10 

Hola.

Enviar los errores de ejecución a navegador no están habilitados por default en IIS 10 por lo que se tienen que activar manualmente.

El error genérico que se ve en un navegador cuando hay un error de ejecución de código ASP classic es el siguiente: 

An error occurred on the server when processing the URL. Please contact the system administrator.

If you are the system administrator please click here to find out more about this error.

Este error no es descriptivo y no ayuda en nada para debuguear algún problema con el código por lo que hay que hacer lo siguiente para ver el error descriptivo.

Esta solución asume que ya han instalado la opción de ASP clásico desde Add or remove Windows Features.

Solución.

1.- Ir al sitio desde IIS manager

2.- Seleccionar el icono de ASP

3.- Expandir Debug Properties y cambiar la opción Send Errors to Browser a true

IIS 10 - Send Errors to Browser a true

Después de esto hay que volver a refrescar la dirección para ver el error.

Espero les sirva.

martes, 11 de abril de 2023

Oracle out parameter se trunca a la mitad

Oracle out parameter se trunca a la mitad de caracteres

Hola.

Estoy teniendo un problema en la llamada a un stored procedure de Oracle 19c

El problema consiste en que tengo definido un parámetro de salida de tipo VARCHAR2 en el stored procedure que al ser ejecutado devuelve el campo pero lo corta a la mitad de caracteres.

Ejemplo:

"hola_mundo" -> "hola_" 

Esto está ocasionando problemas de funcionamiento porque el valor completo es requerido para la autenticación de la aplicación. 

La versión de base de datos que estoy usando es Oracle 19c en Windows Server y la aplicación web es ASP.NET 4.8 con C# 

Es importante mencionar que tanto la versión de .NET como la versión de base de datos están siendo actualizadas. Anteriormente la versión .NET era 4.0 y la versión de Oracle era 11g.

Solución.


La solución de este problema es cambiar el tipo del parámetro de salida de VARCHAR2 a CHAR.

PROCEDURE SP_LGN_WS(p_status OUT NUMBER, p_roles OUT VARCHAR2)

Cambiar por:

PROCEDURE SP_LGN_WS(p_status OUT NUMBER, p_roles OUT CHAR)

Con este cambio el parámetro de salida devuelve el campo completo.

*Otro de los problemas que existen es que la aplicación usa la siguiente librería obsoleta: System.Data.Oracle.Client
La cual ya no es recomendada para trabajar con Oracle. 


Espero les sirva.

martes, 7 de marzo de 2023

DelegatingCallableStatement cannot be cast to class OracleCallableStatement

java.lang.ClassCastException 


Hola.

Estoy obteniendo el siguiente error al intentar ejecutar mi aplicación de TIBCO BusinessWorks 6

java.lang.ClassCastException: class org.apache.commons.dbcp2.DelegatingCallableStatement cannot be cast to class oracle.jdbc.OracleCallableStatement (org.apache.commons.dbcp2.DelegatingCallableStatement and oracle.jdbc.OracleCallableStatement are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @71cea1b8)

La siguiente linea causa el error:

rs = ((OracleCallableStatement)stmt).getCursor(3);

Esta aplicación fue migrada de la versión 5 y utilizaba una actividad Get Connection que ya no existe en la versión 6 por lo que se han auto generado clases de Java para proveer la misma funcionalidad.

Dentro de estas clases se utilizan clases de conexión a base de datos genéricas en forma de wrapper ya que la aplicación puede manejar diversos maneadores de base de datos. Esta es la razón del error al intentar hacer cast de un objeto de tipo DelegatingCallableStatement a un objeto de tipo OracleCallableStatement

Esto aplica para variables de tipo conexión y statement del paquete Java.sql

Solución

Lo que hay que hacer es quitar el wrapper al objeto utilizando el método unwrap para dejarla en su tipo de clase original la cual hay que especificar como parámetro del mismo método.
 
rs=((OracleCallableStatement)stmt.unwrap(OracleCallableStatement.class)).getCursor(3);


Espero les sirva.

miércoles, 25 de enero de 2023

Dónde está instalado Java en Mac

Dónde está instalado Java en Mac

Hola.

He descargado e instalado una nueva versión de Java en Mac y ahora necesito saber en donde está instalado porque requiero hacer más configuraciones que dependen de la ubicación de Java.

También necesito saber la version default que tengo configurada.

Solución.

Para encontrar el home directory de la version Java mas reciente instalada, ejecutar el siguiente comando en una Terminal de Mac

/usr/libexec/java_home

mac java home

Para saber la ubicación del Java home de una versión en específico se puede agregar el parámetro -v con la versión a buscar. 

/usr/libexec/java_home -v 1.7

jhernand-MBP13:~ jhernand$ /usr/libexec/java_home -v 1.7
/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home

 

Espero les sirva.

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.