Buenas os escribo comentándoos una incidencia que tuve con un nuevo
repositorio que instalamos para el archivo municipal de Murcia.

Resulta que una vez implantada la herramienta y hecha la primera ingesta
masiva de documentos, observamos un error que no entendíamos, y es que toda
la codificación de la página estaba perfecta, salvo en las búsquedas de
Autores, Materias, etc… Lo primero que pensé es que podía ser un problema de
codificación del archivo /browse/single.jsp, pero esto no tenía sentido
porque la aplicación era la misma que estábamos utilizando en la
Universidad. Por tanto descartado, tampoco era del servidor de aplicaciones,
pero tampoco entendíamos que fuera de la base de datos (en nuestro caso
ORACLE) ya que todos los datos se observaban bien salvo esto, con lo que
tampoco tenía sentido.

Lo próximo que pensamos es que era la indexación del contenido en la base de
datos, pero haciendo comprobaciones y modificando el código del proceso nos
dimos cuenta que la indexación también la hacía bien.

Entonces nos paramos a pensar, la indexación se hacen sobre unas tablas
concretas “BI_X_DIS”, que tienen estas tablas de particular con respecto a
las demás y claro como el agua nos vino la solución.

Todas las tablas de DSpace utilizan campos del tipo CLOB, campos, que dicho
groso modo, omiten la codificación (en nuestro caso ISO8859-1) de la base de
datos para insertar el contenido , mientras que las tablas del tipo
“BI_X_DIS” donde si se indexa el contenido tienen campos del tipo VARCHAR
que si codifican el contenido. La solución estaba clara crear una base de
datos con codificación UTF-8, migrar el contenido y volver a indexar las
búsquedas, propuesta que denegaron desde el departamento de sistemas del
ayuntamiento de murcia, por lo que tuvimos que buscarnos la vida. Pues bien,
después de maldecir mil veces a DSpace, acordarnos de todas las madres de
casi todo el mundo y faltar al respeto a miles de personas desconocidas,
observamos unas líneas en el archivo
[src]/org/dspace/storage/rdbms/DatabaseManager.java

 

            else if (jdbctype == Types.CLOB && "oracle".equals(dbName))

            {

                // Support CLOBs in place of TEXT columns in Oracle

                row.setColumn(name, results.getString(i));

            }

            else if (jdbctype == Types.VARCHAR)

            {

                try

                {      

                    byte[] bytes = results.getBytes(i);

                    if (bytes != null)

                    {

                        String mystring = new String(results.getBytes(i),
"UFT-8");

                        row.setColumn(name, mystring);

                    }

                    else

                    {

                        row.setColumn(name, results.getString(i));

                    }

                }

                catch (UnsupportedEncodingException e)          

                {

                    // do nothing, UTF-8 is built in!                 

                }

            }

 

Es decir estaba convirtiendo de forma explícita los campos de tipo varchar a
UTF-8, por lo que opté por comentar estas líneas y ofrecer la misma
funcionalidad a los tipos varchar que a los CLOB. Problema resuelto, la
aplicación funciona correctamente y por el momento nos hemos quitado el
requisito de Bases de datos con codificación UTF-8 que especifica DSpace,
por supuesto tuve que cambiar la codificación del servidor de aplicaciones a
ISO-8859-1 para que funcionasen las búsquedas, pero a partir de ahí todo
correcto. Es decir tengo una plataforma DSpace, con un servidor de
aplicaciones y una base de datos ORACLE  ambos con codificación ISO-8859-1 y
funcionando correctamente. Si por favor crees que esta solución va a afectar
otras funcionalidad de DSPace, cosa que aún no he notado, podéis
comunicármelo.

 

            else if ((jdbctype == Types.CLOB && "oracle".equals(dbName)) ||
jdbctype == Types.VARCHAR)

            {

                // Support CLOBs in place of TEXT columns in Oracle

                row.setColumn(name, results.getString(i));

            }

            /*else if (jdbctype == Types.VARCHAR)

            {

                try

                {      

                    byte[] bytes = results.getBytes(i);

                    if (bytes != null)

                    {

                        String mystring = new String(results.getBytes(i),
"UTF-8");

                        row.setColumn(name, mystring);

                    }

                    else

                    {

                        row.setColumn(name, results.getString(i));

                    }

                }

                catch (UnsupportedEncodingException e)          

                {

                    // do nothing, UTF-8 is built in!                 

                }

            }*/

 

Atentamente, Enrique Mingorance Cano.

Universidad de Murcia.

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
DSpace-tech mailing list
DSpace-tech@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dspace-tech

Reply via email to