Búsquedas

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.

sábado, 11 de octubre de 2008

Bienvenido

Bienvenido a este blog, dedicado a la aplicación web WTESTGEN, encargada de gestionar las necesidades básicas de un profesor a la hora de generar exámenes de tipo test de manera automática, con un control de alumnos para cada asignatura, así como las notas de éstos tras resolver los tests.
En este blog se explica una aplicación desarrollada para facilitar la labor de los profesores. Así, se intenta fomentar el empleo de las nuevas tecnologías por parte de los profesionales de la educación para ayudar a los alumnos a tener un contacto más ameno con sus necesidades de formación.
Esta aplicación, WTestGen, tiene dos perspectivas bien diferenciadas.
Por un lado, está la parte de administración enfocada para los profesores, en la que se puede llevar un mantenimiento bastante sencillo de sus labores. A esta sección se accede tras realizar una autenticación del usuario proporcionando dos datos: el nombre de usuario y la contraseña.
En la página principal tenemos un menú central con acceso al mantenimiento de Asignaturas, Alumnos, Preguntas, Respuestas, Exámenes y Notas. De esta forma, partimos de que la aplicación se basa en primer lugar en las asignaturas que tenga el profesor o docente, para, a partir de ahí, gestionar los alumnos de cada asignatura, sus preguntas que puedan generar los posteriores exámenes, las respuestas a cada pregunta y los exámenes de cada asignatura.
  • Mantenimiento de Asignaturas: es la parte encargada de gestionar las asignaturas de cada docente.
  • Mantenimiento de Alumnos: cada profesor podrá dar de alta a sus alumnos relacionándolos con determinadas asignaturas.
  • Mantenimiento de Preguntas: para poder generar exámenes de tipo test automáticamente, las asignaturas deben tener preguntas en el sistema. Desde aquí se gestiona todo lo relacionado con las preguntas.
  • Mantenimiento de Respuestas: para relacionar cada respuesta a una pregunta, ya que una respuesta no tiene sentido sin la pregunta a la que se refiera.
  • Mantenimiento de Exámenes: este es el módulo principal de la aplicación, ya que es el encargado de controlar la generación automática de exámenes siguiendo los parámetros indicados en un asistente de creación, a partir del cuál, se pueden dar más o menos datos según las necesidades del profesor. De esta forma, se tendrá una bandeja de exámenes para publicar. En el momento que se publican los exámenes, los alumnos de la asignatura del examen obtendrán en su bandeja de entrada en el sistema una lista de tareas que realmente son exámenes tipo test a resolver.
  • Mantenimiento de Notas: en esta sección se resumen los datos obtenidos de las correcciones de los test. Puede ser en función de cada alumno o bien por asignaturas.

Por otro lado, está la sección para los alumnos, la cuál se centra en tener una bandeja de tareas pendientes de realizar. En principio, estas tareas serán exámenes de tipo tests que podrán ser autocorregidos en el momento de resolverlos.

De la misma forma, cada alumno puede hacer un seguimiento de sus notas por examen de cada asignatura, y comprobar sus notas medias.