Búsquedas

jueves, 20 de agosto de 2009

Depurar una extensión de OpenOffice con Eclipse

Cada desarrollador necesita alguna forma de depurar sus aplicaciones. De igual forma sucede con las extensiones Java de OpenOffice.org para ello, seguimos los pasos descritos a continuación.

Configurando OpenOffice.org
Primero, necesitas añadir parámetros al inicio de la JVM de OpenOffice.org, los parámetros son:

  • -Xdebug
  • -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Para ello, necesitas abrir el menú de Opciones de OOo, y una vez allí seleccionar el elemento de configuración de Java.

Pinchar en el botón de Parámetros y añadir los parámetros indicados.

Para que se apliquen los parámetros necesitarás reiniciar OOo (cerrar también el inicio rápido). Esos parámetros harán que la JVM de OpenOffice.org esté a la escucha por el puerto 8000 de la máquina local.

Iniciar el modo de depuración de Eclipse

Abrir el menú Run -> Open Debug Dialog

Crear una nueva Remote Java Application con los siguientes parámetros:

  • Connection type: Standard (Socket Attach)
  • Host: localhost
  • Port: 8000
  • Sources: seleccionar el directorio de tu proyecto

Entonces, tras esto, ejecuta la extensión desde OpenOffice.org y después inicia el modo de depuración de creado desde Eclipse. Puede ser posible que la conexión no se establezca la primera vez porque OOo inicie la JVM sólo cuando sea necesaria. Después de una primera ejecución, la JVM arrancada no será detenida y el puerto permanecerá abierto con lo que podrá realizar la comunicación entre OOo y Eclipse.

Consejos & Trucos

  • No olvides añadir puntos de ruptura (breakpoints) en tu código antes de exportarlo, de otra forma no serán tomados en cuenta en tiempo de ejecución.
  • Necesitarás cerrar OpenOffice.org (también el inicio rápido) cuando se exporte el paquete desde Eclipse o tendrás un error que te diga que el puerto 8000 ya está en uso.
  • Puedes cambiar el puerto a uno distinto al 8000 por supuesto, cambialo en los parámetros de la JVM de OOo y en la configuración de la depuración de Eclipse.

Fuente: http://cedric.bosdonnat.free.fr/wordpress/?p=57

miércoles, 27 de mayo de 2009

Concatenar cadenas de caracteres en Java

En caso de tener la necesidad en nuestro código fuente de concatenar cadenas, tenemos la posibilidad de hacer uso de algunas clases que ofrece Java para ello. Esto es un requerimiento habitual para mensajes, errores, logs o excepciones.
Podemos hacer uso de
String o StringBuffer o StringBuilder, cualquiera de las tres realiza esta función, sin embargo, algunas presentan mejor rendimiento que otras.

String
Para realizar la concatenación usamos el operador + que está sobrecargado. Es la opción más habitual, sin embargo, también es la que peor rendimiento ofrece.
Al concatenar dos String, con el operador suma, se crea un nuevo String resultante, con lo que constantemente estamos creando objetos nuevos.

String hola = "Hola, ";
String mundo = "mundo";

String holamundo = hola + mundo;
StringBuffer
Esta clase permite concatenar caracteres de forma simple y eficiente.
Los métodos de StringBuffer son sincronizados, por lo que podemos usarlos de manera segura en un entorno multihilo.


StringBuffer holamundoBuffer = new StringBuffer();
holamundoBuffer.append("Hola, ");
holamundoBuffer.append("mundo);

String holamundo = holamundoBuffer.toString();

StringBuilder
Esta clase es nueva desde el JDK 5, y es la realmente recomendada para realizar la operación que estamos tratando. Su uso es idéntico al de StringBuffer.
Sus métodos no son sincronizados, por lo que tienen mejor rendimiento que StringBuffer. En general, la concatenación de String ocurre con variables locales a un método, por lo que es seguro usar StringBuilder en lugar de StringBuffer. En métodos que hacen uso intensivo de la concatenación, la diferencia en rendimiento puede ser importante.


StringBuilder holamundoBuilder = new StringBuilder();
holamundoBuilder.append("Hola, ");
holamundoBuilder.append("mundo");

String holamundo = holamundoBuilder.toString();

Rendimiento StringBuilder vs StringBuffer
Vamos a concatenar un millón de String ("zim") a un StringBuilder y a un StringBuffer y comparamos los tiempos:

 
StringBuffer sbuffer = new StringBuffer();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuffer.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuffer: " + (fin-inicio));

StringBuilder sbuilder = new StringBuilder();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuilder.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuilder: " + (fin-inicio));



Tras varias pruebas los tiempos se van haciendo constantes:
  • StringBuffer: 93 milisegundos
  • StringBuilder: 47 milisegundos


Por lo tanto, podemos observar que en la mayoría de los casos StringBuilder es casi un 50% más rápido en concatenar String.

Con el operador suma de String es una prueba que está fuera de lugar ya que tarda demasiado y puede producir desbordamientos de memoria y su rendimiento no es nada óptimo.

Por lo tanto, parece evidente que en la mayoría de los casos se debe hacer uso de StringBuilder para obtener un rendimiento máximo para realizar esta operación de concatenación de String.





miércoles, 4 de febrero de 2009

Alfresco - Instalación (Windows XP)

La versión de Alfresco utilizada es 3.0 SP1
  • Descomprimir el archivo "alfresco-enterprise-tomcat-3.0.1.zip" (puede realizarse con la versión "Labs", el funcionamiento es el mismo)
  • Instalar si no se tiene el JDK (1.5 ó 1.6) de Java en el pc
  • una Base de Datos, por ejemplo, MYSQL (configurar Mysql usando un motor InnoDB para el soporte de transacciones)
    • crear un esquema de Base de Datos con nombre "alfresco"
    • usuario de Base de Datos llamado "alfresco"
    • su password es también "alfresco"
    • ir a "tomcat/shared/classes/alfresco/extension/"
    • en "custom-hibernate-dialect.properties" comentar cualquier línea referente a HSQL (Derby) y descomentar la información de MySql
    • hacer lo mismo con "custom-repository.properties" y, además, editar si fuera necesario el valor de "dir.root="
  • Arrancar el servidor Tomcat o ejecutar desde la línea de comandos si se usa el servidor incluido en la distribución de Alfresco "alf_start.bat"
  • Una vez arrancado el servidor, acceder a la url:
    • http://servidor:puerto/alfresco
    • Para el caso de la aplicación Share: http://servidor:puerto/share

martes, 27 de enero de 2009

Debug Remoto en Tomcat desde Eclipse

Desde el directorio "bin" de Tomcat hacer lo siguiente:
  • cd C:/tomcat/bin
  • set JPDA_ADDRESS = 8000
  • set JPDA_TRANSPORT = dt_socket
  • catalina jpda start
Posteriormente, desde Eclipse hacemos esto:
  • Ir al menú Run>Open Debug Dialog
  • Seleccionamos en la ventana que se abre "New Remote Java Application"
  • Rellenamos los campos "Host = localhost" y "Port=8000"
  • Seleccionamos el proyecto de Eclipse que identificamos con la aplicación con la que nos conectamos remotamente para hacer el "debug".
  • Finalmente los ejecutamos "Run" estando arrancado el tomcat
Entonces se realizará la conexión con la aplicación y podemos establecer puntos de ruptura y hacer la depuración requerida.