2008-09-24 19 views
9

Tengo un archivo EAR que contiene dos WAR, war1.war y war2.war. Mi archivo application.xml se ve así:¿Cómo despliega un WAR que está dentro de un EAR como el contexto raíz (/) en Glassfish?

<?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 se traduce en war2.war estar disponibles en http://localhost:8080/war2location, lo cual es correcto, pero es war1.war en http://localhost:8080// - tenga en cuenta las dos barras.

¿Qué estoy haciendo mal?

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

Respuesta

0

http://localhost:8080// todavía debe ser una dirección URL válida que es equivalente a http://localhost:8080/

me gustaría experimentar con abandonar el marco de la raíz de war1 blanco (aunque no estoy seguro si eso es 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 eso con el uso del sol.

+1

No es lamentablemente. http: // localhost: 8080/da la bienvenida predeterminada de Glassfish srceen. Una raíz de contexto vacía usa el nombre WAR y a. simplemente no funciona. :( –

2

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

tal vez usted podría intentar lo siguiente:

<context-root>ROOT</context-root> 
+3

Probé; WAR disponible en/ROOT :) –

2

Esto parece ser un bug/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/usando un RedirectMatch. No es muy bonito, pero resuelve el problema (un poco).

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

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

He podido obtener una -single- WAR en un EAR estallado 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).

6

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/.

1

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

Configuración> HTTP Servicio> servidores virtuales> servidor

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

1

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

o puede utilizar la CLI para cambiar este módulo web por defecto.

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

que debería mostrar la aplicación, y luego se puede utilizar asadmin comando set para cambiarlo.

ACTUALIZACIÓN (Glassfish 3.1 +): Con el glassfish 3.1 + se puede lograr sin necesidad de establecer por defecto en la web-módulo. El único lugar que necesita modificar es

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

donde se debe colocar para su módulo web:

<context-root/> 

que hace el trabajo.

En función de otras respuestas aquí, recibí una impresión errónea de que se necesita algo más. Ver el problema relacionado con la confusión causada por: 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 así, basado en 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 he probado esta opción

Cuestiones relacionadas