Todas las entradas de: xavsal

OCP7 13 – Localización (II)

Las especificaciones para el uso de recursos en formato de fichero de propiedades a través de la API ResourceBundle de Java definen unas reglas para la nomenclatura y ubicación de dichos ficheros que hay que seguir de forma que la JVM pueda localizar y recuperar los recursos definidos en ellos. No obstante, dicha API proporciona mecanismos que permiten personalizar este proceso. En este POST se explica cómo hacerlo. Seguir leyendo OCP7 13 – Localización (II)

Error al generar la documentación mediante Swagger

Situación:

Error principal

Al generar el código HTML de Swagger se produce un error en el proceso de compilación.

Traza del error:
Discovered module jersey
Discovered module obj-c
Discovered module php
Discovered module ruby
Discovered module xml
Discovered module swagger
Loading config /XXXXXXXXXXXXXXXXXX/_ACTIVE_PROJECTS/XXXXXXX/XXXXXXXXXXXX_GIT/B2B/B2BProj/ATG/ATG10.1.2/dgl_b2b/enunciate-b2b-configuration.xml
[enunciate] warning: The apt tool and its associated API are planned to be
[enunciate] removed in the next major JDK release. These features have been
[enunciate] superseded by javac and the standardized annotation processing API,
[enunciate] javax.annotation.processing and javax.lang.model. Users are
[enunciate] recommended to migrate to the annotation processing features of
[enunciate] javac; see the javac man page for more information.
BUILD FAILED
/XXXXXXXXXXXXXXX/_ACTIVE_PROJECTS/XXXXXXXXX/XXXXXXXXXX_GIT/XXX/XXXProj/ATG/ATGX.X.X/dgl_XXX/build.xml:582: org.codehaus.enunciate.contract.validation.ValidationException: (unknown source position): Accessor user of biz.xxxxx.xxx.api.params.profile.ValidateProfileParams: An interface type cannot be an xml type.
Problema: Dentro de la clase se utiliza la anotación @XmlRootElement(«<nombre>»). Produce un error dado que el tipo del recuperador de la clase es RepositoryItem de atg y no es correcto.
La interfície no puede utilizar este tipo dado que no es XML.
Dos posibles soluciones:
1) Eliminar el tipo de repositoryItem y utilizar el tipo String modificando también los nombres del objecto Params (de object a userId).
2) Eliminar la notación @XmlRootElement de la clase para que no sea detectada por Swagger.
Información adicional:

Weblogic 9.2 MP4 – Creating and Configuring WebLogic Domains Using WLST Offline

This enabling of WLST applies to version  9.2 MP4 of WebLogic.
WLST enables you to create a new domain or update an existing domain without connecting to a running WebLogic Server (that is, using WLST offline)—supporting the same functionality as the Configuration Wizard.
You can create new configuration information, and retrieve and change existing configuration information that is persisted in the domain configuration files (located in the config directory, for example, config.xml) or in a domain template JAR created using Template Builder.

Seguir leyendo Weblogic 9.2 MP4 – Creating and Configuring WebLogic Domains Using WLST Offline

Método Unescape en Javascript

En el proyecto actual en el que estoy trabajando, se ha creado una URL mediante la API de Java y se ha transmitido mediante una petición al navegador web.

Se ha producido un error en la transformación y su interpretación del navegador web de dicha URL dado que la cadena de texto obtenida por el navegador ha sido ésta:

http://www.direccion.es/dominio?param1=valor1&param2=valor2

Para solucionar el problema basta con utilizar el método unescape de Javascript.

Mediante este método se trata la cadena de texto recibida por parámetro de forma literal con lo que se eliminan las codificaciones especiales de la cadena de texto.

Dentro del proyecto, se ha utilizado este método para interpretar los caracteres que conforman la URL literalmente y así poder utilizarla en el método window.open de Javascript correctamente.

El código Javascript queda del  siguiente modo:

window.open(unescape(url), "popup2", "left=5,top=5,scrollbars=yes,resizable=yes,status=yes,width=" + (screen.availWidth - 20).toString() + ",height=" + (screen.availHeight - 100).toString());

Al hacer clic en el botón, se abre correctamente el pop up y se carga el contenido indicado por el enlace correctamente dado que el navegador puede interpretar la dirección web (URL) de forma literal y explícita.

A modo de resumen,  comentar que si desea que una cadena URL recibida por petición se trate correctamente debe emplearse el método unescape para ser tratada la cadena de forma literal.

Enlace:  http://www.w3schools.com/jsref/jsref_unescape.asp

«Perlas del código fuente» ^_^

Perlas auténticas encontradas en el código fuente del proyecto actual. Son auténticas maravillas de programación. 

A día de hoy aún me pregunto cómo puede funcionar la aplicación de forma productiva 
: 3

* Caso de misma excepción para distintas casuísticas
Es curioso el detalle que lance la misma excepción en los distintos casos ^^  (en  PL/SQL).

                  IF p_codret != '0' THEN
                        IF p_codret = '5' THEN
                             RAISE ErrorObtDiasDatos;
                        ELSIF p_codret = '6' THEN
                             RAISE ErrorObtDiasDatos;
                        ELSIF
                             RAISE ErrorObtDiasDatos;
                        END IF;
                  END IF;

 

* Caso del bifurcador misterioso
Supuestamente pretende realizar una comprobación en el código fuente pero en realidad sólo está interesado en asignar un valor 0 de tipo cadena  a la variable nia 🙂 

if("".equals(nia) || nia==null);
{
         nia = "0";
}

 



* Caso dónde se realiza la aserción de un dato en una variable de objeto

 

El programador quería confirmar que se le asignaba el valor correcto a la variable del objeto.
Primero se recupera el objeto de un formulario y se asigna mediante el Setter pertinente al campo del objeto. Posteriormente, como aserción vuelve a recuperar el valor del propio objeto y lo vuelve a asignar al mismo objeto mediante el mismo Setter.
Es posible que el programador haya encontrado otro mecanismo para la sostenibilidad del estado de un objeto en memoria…?
                comunicadoNuevo.setCe_cm(fr22.get("CE_CM").toString());
                comunicadoNuevo.setCe_cm(comunicadoNuevo.getCe_cm());
 

* Caso dónde se realiza la aserción de un dato en una variable de objeto

 

 

Comprovación exhaustiva sobre el retorno que se ha producido en una variable de error.
                if (codError == 0){
                    error = 0;
                }

                if (error == 0) {
                // ... Code continues here

 


 


 

Función CONVERT en BBDD Oracle 10g

La función CONVERT permite convertir un carácter de un conjunto específico de caracteres a otro carácter de otro conjunto específico de caracteres.

En el caso concreto de la aplicación en la que se está trabajando se desea realizar una consulta sobre una tabla concreta para recuperar una descripción que contenga la palabra avión, como caso de ejemplo. Las descripciones a recuperar son las siguientes

  • Auxiliares de vuelo y camareros de avión, barco y tren                         
  • Mecánicos y ajustadores de motores de avión

mediante la siguiente consulta

SELECT 
                des.des_dcol
FROM 
               TABLA_DESCRIPCIONES des
WHERE 
               UPPER(des.des_dcol) LIKE UPPER(‘%avión%’));

No encuentra ningún resultado dado que realiza la consulta estrictamente con acento y aunque existe en la tabla no lo retorna correctamente.

Aquí es dónde entra la utilización de la función CONVERT. La siguiente consulta busca las descripciones que contengan el valor %avión% mostrando el resultado correctamente.

SELECT 
                des.des_dcol
FROM 
               TABLA_DESCRIPCIONES des
WHERE 
               UPPER(CONVERT(des.des_dcol, ‘US7ASCII‘)) 
               LIKE UPPER(CONVERT(‘%avión%’, ‘US7ASCII‘));

Las descripciones recuperadas son las esperadas como se ha comentado con anterioridad.

  • Auxiliares de vuelo y camareros de avión, barco y tren                         
  • Mecánicos y ajustadores de motores de avión

La clave se encuentra en el parámetro que se le pasa, US7ASCII, correspondiente una de las codificaciones de caracteres comunes (ASCII US 7-bit) de las que puede gestionar la función..

Hasta aquí la prueba de concepto de esta función de Oracle. Para un mayor detalle de la misma se puede acceder a la siguiente ruta.

 

Adaptación de librería java-json.jar a JAVA 1.4

Una de las limitaciones más comunes a la hora de programar es la versión del jdk que requiere nuestra aplicación. Cuando los requerimientos exigen una versión un tanto antigua (1.4 por ejemplo), encontramos problemas a la hora de usar tecnologías como AJAX, sobretodo si necesitamos utilizar respuestas de tipo JSON. Para ello existe una librería muy simple «java-json.jar» pero nos encontramos de que es incompatible con el jdk 1.4.

Aquí explicaré en pocos pasos como adaptar y recompilar esta librería para hacerla compatible y funcional para una aplicación que use un jdk 1.4. Necesitaremos descargar el código fuente de la librería y modificar unos pequeños detalles de las clases que contiene.

Se puede descargar el código fuente de aquí

PROCEDIMIENTO:

Primero importaremos el código a nuestro IDE (en este caso uso Eclipse Juno) . Crearemos un proyecto Java.

 

Y definimos la versión del jdk que usaremos como jdk_4_2_19

 

Una vez tenemos nuestro proyecto creado, importaremos las clases de la librería que vamos a refactorizar. Para eso vamos a Archivo -> importar -> File System

Y seleccionamos la carpeta donde tenemos las clases descargadas.

Una vez tenemos las clases importadas, abrimos una de estas clases y miramos el «package» donde debería estar incluida la clase.

 

Creamos en nuestro proyecto este package y movemos todas las clases a este package

Ahora comprobaremos que las clases muestran errores, esto es lo que debemos corregir.

1 – Cambiamos la utilización de la clase «StringBuilder» por «StringBuffer»

 

2 – Eliminamos las parametrizaciones de las clases «Iterator», «ArrayList», «Set», «Collection», «Enumeration», «Map» i «HashMap»

 

3 – Al eliminar la parametrización, deberemos añadir unos «casts» ya que al no estar parametrizados, ahora todos seran «Object».

 

4 – Eliminamos las anotaciones.

 

5 – Las operaciones de suma entre objetos se deben modificar para que sean entre tipos primitivos, ya que la suma entre objetos no está soportada.

Imagen 1

 

Imagen 2

6 – Modificamos las asignaciones directas de tipos primitivos a clases por una instanciación de la propia clase.

Una vez nuestro proyecto esta corregido sin errores, encapsulamos de nuevo todas las clases en un nuevo archivo .jar compilado con el jdk 1.4. Para esto, clickamos sobre el package «org.json» con el botón derecho del ratón i selecionamos «export -> Java-> Jar file».

 

Finalmente, clickamos a «Finish» y tenemos nuestra librería compilada y totalmente funcional para Java 1.4.

 

 

Quick Reference: Oracle DML and DDL Statements

Just a quick reference of DML and DDL Oracle Statements and some links to visit.

DML Statements

Main Site: Oracle DML Statements

Insert
INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);

Update
UPDATE table_name
SET column_name = value [, column_name = value]…
[ WHERE condition ];

Delete
DELETE FROM table_name
[ WHERE condition ];

DDL Statements

Main Site:  DDL Oracle Statements

Create
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],

column_n datatype [ NULL | NOT NULL ] );

Alter
ALTER TABLE table_name
ADD column_name column-definition;

Drop
DROP [schema_name].TABLE table_name
[ CASCADE CONSTRAINTS ] [ PURGE ];

Extra

Some sites which contains interesting information about the last topics: 1, 2, 3.

Not in an application scope – start OC4J with the -userThreads switch if using user-created threads

Cuándo dentro del servidor OC4J se produce el siguiente error:
Not in an application scope – start OC4J with the -userThreads switch if using user-created threads
Este error se produce dentro de un proyecto J2EE que dispone de código fuente que genera hilos bajo demanda del programador. El servidor detecta dicha generación manual y muestra el mensaje de error dando una pista sobre cómo solucionar el problema de compatibilidad.

En el caso concreto comentado es obligatorio utilizar el atributo -userThreads («Enables context lookup support from user-created threads») del servidor OC4J. Esto permite que el servidor sea capaz de gestionar además de los hilos internos propios también los creados manualmente por el usuario desde la aplicación J2EE.

Este parámetro debe indicarse en el Script de arranque del servidor (en caso de ejecutarse des de consola también debe añadirse como parámetro):
java -jar oc4j.jar -userthreads
Documentación Oficial:

Hilite.me – decorador de código fuente para blogs y otras publicaciones

Página web que permite transformar secciones de código fuente en HTML para incrustarlo de forma legible y atractiva en publicaciones en Internet.

Al acceder a la página principal se muestran dos secciones, una para añadir el código fuente original y la otra para obtener el código fuente formateado en HTML con el estilo escogido .

Como parámetros de configuración se pueden configurar el lenguaje, el estilo, indicar si se desean añadir líneas de código y la opción de aplicar estilos CSS directamente. Todo ello se puede aplicar de forma sencilla y amena.

Por último, una vez establecida la configuración interesada sólo resta hacer clic en el botón Highlight para obtener el código HTML final.

Posteriormente es suficiente con copiar el HTML generado y incrustarlo en el código fuente de la página web destino. Una vez guardado dicho cambio, al acceder a la página debería mostrarse correctamente el código fuente formateado.

Más información en la página oficial: http://hilite.me/api