plugin javaee intellij community java-ee glassfish ear

java-ee - javaee - intellij jsp



¿Cómo despliega un WAR que está dentro de un EAR como el contexto raíz(/) en Glassfish? (7)

Tengo un archivo EAR que contiene dos WARs, war1.war y war2.war. Mi archivo application.xml se ve así:

<?xml version="1.0" encoding="UTF-8"?> <application version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"> <display-name>MyEAR</display-name> <module> <web> <web-uri>war1.war</web-uri> <context-root>/</context-root> </web> </module> <module> <web> <web-uri>war2.war</web-uri> <context-root>/war2location</context-root> </web> </module> </application>

Esto hace que war2.war esté disponible en http: // localhost: 8080 / war2location , que es correcto, pero war1.war está en http: // localhost: 8080 // - tenga en cuenta las dos barras diagonales.

¿Qué estoy haciendo mal?

Tenga en cuenta que los archivos sun-web.xml de WAR se ignoran cuando están contenidos en un EAR.


¿Le has dado otra oportunidad en una versión más reciente de Glassfish? (3.0.1 acaba de salir).

Pude obtener una -single- WAR en un EAR de explosión para implementar en http: // localhost / usando Glassfish 3.0.1. Como mencionaste, sun-web.xml parece ser ignorado (por lo menos dentro de las orejas explotadas).


En Glassfish 3.0.1 puede definir la aplicación web predeterminada en la consola de administración: "Configuración / Servidores virtuales / servidor / Módulo web predeterminado". El cuadro desplegable contiene todos los módulos de guerra implementados.

El módulo web predeterminado es accesible desde http: // localhost: 8080 / .


Esto me parece un error en el servidor de aplicaciones de Glassfish. Debería funcionar ya que ya está definido su archivo application.xml.

Tal vez podrías probar lo siguiente:

<context-root>ROOT</context-root>


Esto parece ser un error / función.

Puede configurar Glassfish para usar una determinada aplicación web como la aplicación raíz, es decir. cuando ningún otro contexto coincide, pero la aplicación todavía cree que se está ejecutando en el contexto original y no en la raíz.

Mi solución es ejecutar el primer WAR on / w y usar Apache para redirigir / lo que sea a / w / whatever usando un RedirectMatch. No es muy bonito, pero resuelve el problema (un poco).

RewriteEngine On RedirectMatch ^/(w[^/].*) /w/$1 RedirectMatch ^/([^w].*) /w/$1


Gracias jiriki. La respuesta perfecta! ¡Funciona en Galssfish 2.1.1 también!

Configuración> Servicio HTTP> Servidores virtuales> servidor

o cambie el parámetro default-web-module en domain.xml


La misma solución que se describe a través de @jiriki y @SteveGreenslade, pero a través de asadmin. Encontrado en: http://www.java.net/node/681176

O puede usar CLI para cambiar este módulo web predeterminado.

asadmin get server.http-service.virtual-server.server.default-web-module

debería mostrarle la aplicación, y luego puede usar el comando asadmin set para cambiarla.

ACTUALIZACIÓN (Glassfish 3.1+): con glassfish 3.1+ puede lograrlo sin necesidad de configurar el predeterminado-web-module. El único lugar donde debes modificar es

<your_ear>.ear/META-INF/application.xml

donde debe colocar para su módulo web:

<context-root/>

Eso hace el trabajo.

En base a otras respuestas presentes aquí, tengo una impresión errónea de que se necesita algo más. Vea el problema relacionado causado por la confusión: http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module

Básicamente:

<context-root>/</context-root>

debería funcionar también, según el código ( https://svn.java.net/svn/glassfish~svn/tags/3.1.2/web/web-glue/src/main/java/com/sun/enterprise/ web / WebContainer.java ):

if (wmContextPath.length() == 0) displayContextPath = "/"; else displayContextPath = wmContextPath;

Sin embargo, no probé esta opción


http://localhost:8080// aún debería ser una URL válida que sea equivalente a http://localhost:8080/

Experimentaría dejando la raíz de contexto de war1 en blanco (aunque no estoy seguro si eso está permitido). O cambiándolo a <context-root>.</context-root> .

De lo contrario, tendría que decir que el URI generado es un error en la parte de Glassfish ya que nunca he visto el uso del sol.