Introducción Queremos poder ejecutar un programa de consola usando java para posteriormente poder crear un servicio web que lo llame. Hay varias formas de hacerlo y aquí proponemos una, aunque el desarrollador el libre para usar cualquier otra que le resulte mas fácil. Abajo se muestran clases java que llaman a programas concretos heredando para ello de la clase CommandLine. Esta a su vez usa la clase StreamGobble, que es un Thread, para ocuparse de las salidas que pudiera tener el programa de consola, de forma que no pueda ocasionar un llenado del buffer que tiene cada sistema operativo para dichas salidas y fallo posterior de la ejecución. En la imagen anterior se pueden apreciar los métodos y constructores existentes en la clase. Usaremos la clase java Runtime, que dado una linea de comandos, la ejecutará como si lo hiciéramos nosotros en el sistema operativo donde se esté ejecutando. Así pues, solo será necesario componer dicha linea de comandos para cada programa que queramos ejecutar, usando la variable cmd. Para facilitar las cosas tenemos en dicha variable los parámetros del programa, y en programPath la ruta o el nombre del programa a ejecutar. Si usamos el constructor , permitimos tanto dar la ruta completa como dar el nombre y buscar el programa dentro de un directorio concreto. El programa se ejecutará llamando al método callcmd() una vez que nuestro programa tenga ya preparada la línea a ejecutar. Esta diseñado para poder ejecutar de manera automática programas tanto en sistemas Windows como GNU/Linux. Además se usarán hebras para controlar la salida generada del programa, tanto por la salida estándar como por la de errores. Se ha dispuesto el uso de log4j para controlar que hacer con dichas salidas, o bien escribirlas por pantalla (modo verbose) o bien guardarlas en ficheros de registros. Los parámetros deben ser añadidos a una línea de texto (la variable cmd), así pues si tenemos ficheros de entrada al programa, es necesario guardarlos a un fichero y luego dar la ruta del mismo. Para facilitar esta tarea, que es utilizada con mucha frecuencia, se incluyen 3 métodos auxiliares que se encargan de convertir de un flujo de datos o caracteres a un fichero temporal (que se borrará automáticamente y obtener la ruta para la llamada al programa de línea de comandos. También al contrario, dado un flujo de caracteres obtener la cadena de texto deseada. Resumiendo, con heredar de la clase CommandLine y llamar al superconstructor con el nombre o ruta completa del programa a ejecutar, y si fuera necesario, escribir en la variable cmd los parámetros del programa, ya estaremos preparados para ejecutar dicho programa llamando al método callcmd(). El javadoc generado: es.uma.ac.chirimoyo.programs Class CommandLine java.lang.Object |-es.uma.ac.chirimoyo.programs.CommandLine Direct Known Subclasses: CodonFreq, CodonUsagexAA, ExecExtrae public abstract class CommandLineextends java.lang.Object Class representing a command line program. Implementations must define path of the executable program and parameters. Author: Fernando Constructor Summary CommandLine(java.lang.String programPath) set the path of the command to call Method Summary int callcmd() call the cmd with the generated line. static java.lang.String iReaderToFile(java.io.Reader in) create a temporal file from a given Reader with the given name. static java.lang.String iStreamToFile(java.io.InputStream in) create a temporal file from a given input stream with the given name. static java.lang.String readerToString(java.io.Reader content, int size)