Recientemente tuve que desempolvar un proyecto de .NET (C#) y hacer unas modificaciones.
Había que utilizar las clases de System.Data.Oracle en vez de Oracle.DataAccess debido a que, la segunda, ocasionaba un timeout de conexión con la versión 11.2 de Oracle Database Server.

Una vez que sustituí las clases y corregí todos los errores de compilación ocasionados por el cambio, ejecute la aplicación para probar su funcionalidad. Para mi sorpresa me lanzó la siguiente excepción:

ORA-06550: línea 1, columna 7: PLS-00306: número o tipos de argumentos erróenos al llamar a ‘PR_GETEXPEDIENTESXFACUERDO’
ORA-06550: línea 1, columna 7: PL/SQL: Statement ignored

Verifiqué muchas veces que el número o tipo de los parámetros fuera el correcto, pero seguía sin funcionar. En un acto de desesperación sustituí la llamada al procedimiento por una consulta sql estándar, pero no tuve éxito. Ya sin más ideas noté que el nombre de los parámetros en el código era distinto a los nombres en el procedimiento almacenado. Intenté renombrarlos, ya sin nada que perder, y asombrosamente funcionó. Al parecer la clase OracleCommand de System.Data.Oracle toma en cuenta el nombre de los parámetros mientras que la de Oracle.DataAccess no.

Fuentes:
https://community.oracle.com/thread/2171363?start=0&tstart=0
http://support.microsoft.com/kb/322160
http://blogs.msdn.com/b/spike/archive/2009/06/16/oracle-stored-procedures-with-ref-cursor-from-net-code-and-bid-tracing.aspx

Anuncios

Al iniciar Jdeveloper 10.1.3.3.0 me aparecía la siguiente Excepción

java.lang.StackOverflowError
at java.util.HashMap.get(HashMap.java:343)
at oracle.ide.net.URLFileSystem.findHelper(URLFileSystem.java:126)
at oracle.ide.net.URLFileSystem.findHelper(URLFileSystem.java:163)
at oracle.ide.net.URLFileSystem.openInputStream(URLFileSystem.java:1164)
at oracle.ide.net.IdeURLConnection.getInputStream(IdeURLConnection.java:44)
...

Al parecer se debe a un conflicto con la lista de archivos recientes y el sistema de control de versiones. La solución es modificar el archivo ~/jdevhome/system/oracle.ide.10.1.3.41.57/preferences.xml removiendo todos los Items que contengan algún elemento con la palabra “versionhistory”. En mi caso se debía a que moví la carpeta jdevhome de lugar y había Items apuntando a la antigua ubicación.

Nota: jdevhome es el directorio donde se encuentran tus proyectos, no el directorio donde instalaste jdeveloper

Fuentes:
https://forums.oracle.com/forums/thread.jspa?messageID=1314258

Cuando intentaba hacer un cálculo sencillo para colocar una ventana en determinada posición, me aparecía el siguiente error

com.google.gwt.dev.shell.HostedModeException: invoke arguments: JS value of type string, expected int

el problema era la forma en que establecí el tamaño de la ventana, utilicé el método setSize -que recibe como parámetros cadenas- e intenté invocar el método getWidth antes de haber pintado/mostrado el control en pantalla.

@Override
public void onModuleLoad() {
    Window win = new Window();
    win.setSize("320", "180");
    SC.say("Window width: "+win.getWidth()); // throws Exception
}

Después de mostrar el control si puedes utilizar el método getWidth()

@Override
public void onModuleLoad() {
    Window win = new Window();
    win.setSize("320", "180");
    win.show();
    SC.say("Window width: "+win.getWidth()); // "Window width: 320"
}

Si necesitas el valor del width antes de mostrar el control -como era mi caso- tienes que utilizar el método getWidthAsString() y convertir la cadena a Integer

@Override
public void onModuleLoad() {
    Window win = new Window();
    win.setSize("320", "180");
    SC.say("Window width: "+Integer.parseInt(win.getWidthAsString()));
}

Fuentes:
SmartClient Forums

Instalé JDeveloper 11g en Ubuntu 12.04 a 64 bits. El JDK que tengo por default es OpenJDK, pero al parecer JDeveloper está muy ligado al JDK de Sun Microsystems (Oracle). El instalador de JDeveloper trae un JDK (por eso ocupa tanto la descarga) a 32 bits, entonces este fue el primer problema.

Después de configurar JDeveloper para que se ejecutará con OpenJDK a 64 bits todo parecía funcionar muy bien, hasta que quise crear un servicio web :S

Para crear un servicio web simplemente das clic derecho sobre la clase que contiene los métodos que quieres publicar en tu servicio web y das clic en “Create Web Service” para ejecutar el asistente. Al hacer esto me lanzó la siguiente excepción

java.lang.NoClassDefFoundError: com/sun/tools/javac/util/DefaultFileManager

Lo que hice para resolverlo, fue descargar el JDK de Oracle y configurar JDeveloper para que lo utilice.

Desarrollé una aplicación con servicios web mediante el framework Apache CXF. Localmente funcionaba bien, lo probé mediante maven y el jetty-maven-plugin, con la ayuda de SoapUI para invocar a los servicios.

Pues cuando hice el deploy en un viejo Application Server de Oracle que utiliza OC4J, me arrojaba varios errores de que no encontraba ciertas clases (NoClassDefFoundException). El problema es que cuando ejecutas una aplicación en un contenedor, esta hereda el classpath de este. Así que,si OC4J cargó una versión vieja de log4J -por ejemplo- y utilizas una función disponible sólo en versiones más recientes, tendrás estos problemas.

Normalmente deberás haber incluído las dependencias en la carpeta WEB-INF/lib (ya sea mediante maven o manualmente). Para indicarle al contenedor que deseamos utilizar las librerías que hemos incluído en esta carpeta -desde la consola Enterprise Manager- al hacer el deploy desactiva la opción “Inherit parent application’s shared library imports”. Ó puedes crear un EAR que contenga tu WAR y agrega un archivo META-INF/orion-application.xml con el siguiente contenido

</pre>
<?xml version="1.0" encoding="UTF-8"?>
<orion-application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://xmlns.oracle.com/oracleas/schema/orion-application-10_0.xsd"
deployment-version="10.1.3.4.0" default-data-source="jdbc/OracleDS"
component-classification="external" schema-major-version="10"
schema-minor-version="0">

<imported-shared-libraries>
<remove-inherited name="*"></remove-inherited>
</imported-shared-libraries>

</orion-application>
<pre>

Fuentes:
logging – Oracle application server deployed application throwing an error – NoClassDefFoundError – Stack Overflow
.
http://docs.oracle.com/html/E13979_01/classload.htm#CIHJHADG

Al abrir un reporte en Eclipse Juno (en el cual instale BIRT por separado) no me mostraba el diálogo para ingresar los parámetros. Me arrojaba el siguiente error:

HTTP ERROR: 500

Problem accessing /viewer/parameter. Reason: Plug-in “org.eclipse.birt.report.viewer” was unable to instantiate class “org.eclipse.birt.report.servlet.BirtEngineServlet”.

En el log me mostraba también la causa de la excepción:

NoClassDefFoundError: org.apache.axis.transport.http.AxisServlet

Después de mucho intentar y no encontrar una solución, decidí probar con otra instancia de Eclipse. Así que instale -descomprimí- Eclipse IDE for Java and Report Developers (Juno 4.2). Y con eso ya pude abrir el reporte e ingresar los parámetros.

Pero ahora tengo otro problema, me arroja la excepción

Cannot get the type for parameter: 1.

    org.eclipse.birt.report.data.oda.jdbc.JDBCException: Cannot get parameter type.

SQL error #1:Unsupported feature;

java.sql.SQLException: Unsupported feature

Al parecer este error ya fue arreglado, sólo tengo que esperar a que liberen la actualización 😦

Por lo pronto usare Eclipse Indigo (3.7.2) para modificar los reportes :S

Al intentar utilizar la librería JODConverter para convertir algunos documentos del formato RTF a PDF, la aplicación me arrojaba el siguiente error

java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

Esto se debe a que la librería jodconverter tiene una dependencia hacia slf4j-api, la cuál no contiene ninguna implementación, y por ende, es necesario agregar una implementación de esa API. Para ello, agregué la siguiente dependencia a mi proyecto y quedó resuelto el problema.

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.4.3</version>
        </dependency>

Asegurate de que las versiones de las librerías coincidan, de lo contrario te arrojará el siguiente error

java.lang.NoClassDefFoundError: Could not initialize class org.slf4j.LoggerFactory

Para ver si estás utilizando versiones diferentes de las librerías, abre el archivo pom.xml y selecciona la pestaña inferior ‘Dependency Hierarchy’, luego busca ‘slf4j’ para ver que versiones fueron resueltas.

Fuentes:
http://stackoverflow.com/questions/3737992/noclassdeffounderror-org-slf4j-impl-staticloggerbinder