2008-09-24 5 views
9

J'ai un fichier EAR qui contient deux fichiers WAR, war1.war et war2.war. Mon fichier application.xml ressemble à ceci:Comment déployez-vous un fichier WAR situé dans un fichier EAR en tant que contexte racine (/) dans 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> 

Il en résulte war2.war être disponible sur http://localhost:8080/war2location, ce qui est correct, mais war1.war est http://localhost:8080// - noter les deux barres obliques.

Qu'est-ce que je fais mal?

Notez que les fichiers sun-web.xml des WAR sont ignorés lorsqu'ils sont contenus dans un fichier EAR.

Répondre

0

http://localhost:8080// devrait encore être une URL valide équivalente à http://localhost:8080/

J'expérimente en laissant la racine de contexte WAR1 blanc (bien que je ne sais pas si c'est permis). Ou en le changeant en <context-root>.</context-root>.

Sinon, je dois dire que l'URI généré est un bug sur la part de glassfish puisque je n'ai jamais vu cela en utilisant le soleil.

+1

Ce n'est malheureusement pas le cas. http: // localhost: 8080/donne à srceen la bienvenue par défaut de Glassfish. Une racine de contexte vide utilise le nom WAR et a. ne fonctionne tout simplement pas. :( –

2

Cela me semble être un bug dans le serveur d'application glassfish. Cela devrait fonctionner car votre fichier application.xml est déjà défini.

Peut-être que vous pourriez essayer ce qui suit:

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

Essayé, WAR disponible sur/ROOT :) –

2

Cela ne semble être un bug/fonctionnalité.

Vous pouvez paramétrer Glassfish pour utiliser une certaine application Web en tant qu'application racine, c'est-à-dire. quand aucun autre contexte ne correspond, mais l'application pense toujours qu'elle fonctionne sur le contexte d'origine et non sur la racine.

Ma solution est d'exécuter le premier WAR sur/w et d'utiliser Apache pour rediriger/quoi que ce soit vers/w/tout ce qui utilise un RedirectMatch. Pas très joli, mais ça résout le problème (un peu).

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

Avez-vous essayé de nouveau pour une version plus récente de Glassfish? (3.0.1 vient de sortir).

J'ai réussi à obtenir un fichier WAR unique dans un fichier EAR éclaté pour le déployer à http://localhost/ à l'aide de Glassfish 3.0.1. Comme vous l'avez mentionné, sun-web.xml semble être ignoré (à l'intérieur des oreilles explosées au moins).

6

Dans Glassfish 3.0.1, vous pouvez définir l'application Web par défaut dans la console d'administration: "Configuration \ Virtual Servers \ server \ Default Web Module". La liste déroulante contient tous les modules de guerre déployés.

Le module Web par défaut est accessible depuis http://localhost:8080/.

1

Merci jiriki. La réponse parfaite! Fonctionne dans Galssfish 2.1.1 aussi!

Configuration> Service HTTP> Serveurs virtuels> Serveur

ou modifier le paramètre default-web-module dans domain.xml

1

La même solution que celle décrite par @jiriki et @SteveGreenslade, mais via asadmin. Trouver à: http://www.java.net/node/681176

Ou vous pouvez utiliser CLI pour modifier ce module Web par défaut.

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

devrait vous montrer l'application, et vous pouvez ensuite utiliser asadmin commande set pour le changer.

MISE À JOUR (Glassfish 3.1+): Avec le GlassFish 3.1+ vous pouvez y arriver sans qu'il soit nécessaire de mettre en module par défaut Web. Le seul endroit où vous devez modifier est

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

où vous devez placer votre module Web:

<context-root/> 

qui fait le travail.

Basé sur d'autres réponses présentes ici j'ai eu une fausse impression quelque chose de plus est nécessaire. Voir le problème lié causé par la confusion: http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module

En gros:

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

devrait fonctionner aussi bien, en fonction du code (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; 

mais je n'ai pas testé cette option

Questions connexes