directorio java file-io jboss java-ee-6

java - directorio web-inf



¿Cómo acceder a un archivo de una guerra diferente que está en el mismo oído en un servidor Java EE(JBoss)? (5)

  1. Cambie .war a .jar ( .ear ?) Si la implementación no es muy frecuente. Por ejemplo, en el directorio lib del servidor si haces un reinicio diario.

  2. No implemente una guerra, sino que cargue los archivos en un directorio fijo, es decir, con rsync . Esto tiene mi preferencia.

  3. Haz lo que dijo @ Rp-, posiblemente descomprimiendo.

Entonces siguiente problema: tenemos un equilibrador de carga con n servidores detrás de él. En cada servidor hay un proyecto PDF (guerra) instalado en la oreja junto con un proyecto pdf-builder en el mismo archivo earfile (guerra diferente). Ahora quiero leer un pdf de la otra guerra.

El problema es que no sé la dirección IP del servidor en el que me estoy ejecutando y con la búsqueda dns podría terminar en el servidor diferente a través de loadbalancer. Además, puede haber problemas con las restricciones de acceso / seguridad ya que el servidor en sí mismo no es un usuario válido que tiene derechos para hacer accesos a las ubicaciones de archivos PDF del proyecto de guerra pdf.

¿Hay alguna forma de obtener algo como getResourceAsStream () que funcione en diferentes módulos / archivos war dentro de un oído?


Debe proporcionar una ruta de acceso absoluta al archivo para acceder a un recurso que no está en la ruta de clase actual.

Puedes llamar

serverletContext.getRealpath("/"); dará la ruta hasta el nodo del servidor (contexto). Desde allí puede navegar hasta el archivo.

Otra forma es que Jboss use (o establezca) varias variables de entorno mientras se inicia. Puede usar esas propiedades para obtener el nodo actual (como ''predeterminado''). Seguir dos propiedades le dará la ruta absoluta al nodo del servidor actual.

System.getProperty("jboss.server.base.dir") + File.separator + System.getProperty("jboss.server.name"); (Por favor use System.getenv(''varname'') si getProperty no funciona). Desde allí puedes navegar. Aquí está la lista completa de varibles del sistema que utiliza jboss.



WARs están destinados a estar aislados el uno del otro. Pueden ver "hacia arriba" en el cargador de clases de aplicaciones (nivel EAR) pero no pueden acceder al cargador de clases de un compañero. Entonces, si bien puede haber una manera de hacer que funcione en su servidor de aplicaciones particular, hacerlo no es aconsejable. Si alguien en el equipo de operaciones cambia las opciones de implementación a lo largo de la línea, es posible que no se den cuenta de que está confiando en ese mecanismo y rompería la aplicación de una manera (posiblemente) críptica.

Intentar acceder a un cargador de clase par como este viola Java EE (si no es la letra de la especificación, al menos el espíritu de la misma).

Si no puede poner el contenido estático en un servidor separado para el acceso, al menos ponga los archivos PDF estáticos en un JAR (como han sugerido otros) y despliegue en el EAR. Cuando lo hagas, no te olvides de agregar la entrada JAR al archivo de manifiesto de WAR declarante (de lo contrario, no cargará el JAR en el cargador de clases de la aplicación).


Puede mover los .PDFs a un contenedor separado (es decir, pdf-builder.jar) y ponerlo en el .EAR En el manifiesto de su .WAR ( META-INF/MANIFEST.MF ) ponga esta línea:

Class-Path: pdf-builder.jar

Ahora puede cargar los .PDF usando su cargador de clases. Esto es compatible con J2EE.