Introducción Queremos poder ejecutar un programa de consola

Anuncio
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)
Descargar