2011-05-31 8 views
10

Tengo una aplicación web en Java que usa algún programa externo (invoca una herramienta de línea de comandos).Cómo establecer un parámetro para una aplicación web Java

Quiero configurar la ruta de acceso del programa de línea de comando configurable, para que pueda cambiarlo sin volver a generar mi aplicación.

Preguntas:

1) ¿Qué es exactamente el parámetro debería utilizar (de los que están disponibles en web.xml), si se establece sólo una vez (en el despliegue) y después de eso nunca cambia?

2) ¿Cómo puedo acceder a este parámetro dentro de mi código Java?

Gracias de antemano

Dmitri

Respuesta

11

Web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app> 
    <context-param> 
    <param-name>command</param-name> 
    <param-value>SOME_COMMAND</param-value> 
    </context-param> 
. 
. 
. 
. 
</web-app> 

código Java

String commandToExecute = getServletContext().getInitParameter("command"); 

Alternativamente

También se puede poner esto en el archivo/xml propiedad en la ruta de clase leerlo y ponerlo en contexto servlet cuando el contexto inicializa.

+0

Thansk, eso resolvió mi problema. –

+0

eres bienvenido :) –

7

Es posible utilizar un env-entry:

<env-entry> 
    <description>command line</descriptor> 
    <env-entry-name>commandLine</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>some_command</env-entry-value> 
</env-entry> 

Y obtener de cualquier parte del código de aplicación web:

javax.naming.Context ctx = new javax.naming.InitialContext(); 
String command = (String) ctx.lookup("java:comp/env/commandLine"); 
4

Me gustaría ir con una propiedad del sistema en este escenario. Sólo tiene que ejecutar el servidor de aplicaciones con una bandera JVM como -Dyour.command.path=/path/to/your/command y luego en el código, sólo tiene que escribir:

String cmd = System.getProperty("your.command.path", "/some/default/fallback/path/cmd"); 

De esta manera no va a confiar en funcionamiento en algunos contenedores/servlet Java EE.

3

Es una solución de dos partes.

  1. Primero podemos hacer un archivo de propiedades que sea accesible para la aplicación web. No es necesario que sean sus propiedades de mensaje estándar, sino un archivo secundario.
  2. En segundo lugar, su script de despliegue y su script de compilación pueden hacer un trabajo adicional para crear directorios de contexto en el servidor de aplicaciones donde puede copiar el archivo de propiedades de la compilación y hacerlo disponible también para las herramientas de línea de comandos.

Apache CLI es una muy buena alternativa para hacer un acceso programático.

+0

El archivo de propiedades es una idea simple y agradable. +1 – Vincent

Cuestiones relacionadas