2008-09-24 5 views
9

Ich habe eine EAR-Datei, die zwei WARs enthält, war1.war und war2.war. Meine application.xml-Datei sieht wie folgt aus:Wie stellen Sie eine WAR, die sich in einer EAR als Root-Kontext (/) in Glassfish befindet, bereit?

<?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> 

Dies führt zu war2.war auf http://localhost:8080/war2location zur Verfügung stehen, was richtig ist, aber war1.war ist auf http://localhost:8080// - die beiden Schrägstriche beachten.

Was mache ich falsch?

Beachten Sie, dass die sun-web.xml-Dateien der WARs ignoriert werden, wenn sie in einer EAR enthalten sind.

Antwort

0

http://localhost:8080// sollte noch eine gültige URL sein, die http://localhost:8080/ entspricht

ich mit dem Verlassen der kontext Wurzel WAR1 leer experimentieren würde (obwohl ich nicht sicher bin, ob das ist erlaubt). Oder ändern Sie es zu <context-root>.</context-root>.

Sonst müsste ich sagen, dass der generierte URI ein Fehler von Glassfish ist, da ich das noch nie mit der Sonne gesehen habe.

+1

Es ist nicht leider. http: // localhost: 8080/gibt Glassfishs Standard-Welcome-URL an. Ein leeres Kontextstammverzeichnis verwendet den WAR-Namen und a. funktioniert einfach nicht. :( –

2

Dies scheint mir ein Fehler im Glassfish-Anwendungsserver. Es sollte funktionieren, da es bereits Ihre application.xml-Datei definiert ist.

Vielleicht könnten Sie Folgendes versuchen:

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

Versuchte es; WAR verfügbar auf/ROOT :) –

2

Dies scheint ein Bug/Feature zu sein.

Sie können Glassfish so einstellen, dass eine bestimmte Webanwendung als Root-Anwendung verwendet wird. wenn kein anderer Kontext übereinstimmt, aber die Anwendung denkt immer noch, dass sie im ursprünglichen Kontext und nicht im Stammverzeichnis ausgeführt wird.

Meine Lösung ist die erste WAR auf/w und Apache zu verwenden, um/was auch immer zu/w/was auch immer mit einer RedirectMatch umleiten. Nicht sehr hübsch, aber es löst das Problem (irgendwie).

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

Haben Sie es noch einmal zu versuchen auf eine neuere Version von Glassfish gegeben? (3.0.1 kam gerade heraus).

Ich war in der Lage, ein -single- WAR in einer explodierten EAR zu erhalten, um mit Glassfish 3.0.1 zu http://localhost/ zu implementieren. Wie du bereits erwähnt hast, scheint sun-web.xml ignoriert zu werden (zumindest in explodierten Ohren).

6

In Glassfish 3.0.1 können Sie die Standard-Webanwendung in der Administrationskonsole definieren: "Konfiguration \ Virtuelle Server \ Server \ Standard-Web-Modul". Die Drop-Down-Box enthält alle implementierten Kriegsmodule.

Das Standard-Webmodul ist dann von http://localhost:8080/ aus zugänglich.

1

Danke Jiriki. Die perfekte Antwort! Funktioniert in Galssfish 2.1.1 auch!

Konfiguration> HTTP-Service> Virtual Server> Server

oder default-web-module Parameter in domain.xml

1

Die gleiche Lösung wie über @jiriki und @SteveGreenslade, sondern über asadmin beschrieben ändern. Gefunden auf: http://www.java.net/node/681176

Oder Sie können CLI verwenden diese Standard-Web-Modul zu ändern.

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

sollten Sie die App zeigen, und Sie können dann asadmin set-Befehl verwenden, um es zu ändern.

UPDATE (Glassfish 3.1+): Mit dem Glasfischen 3.1+ Sie es ohne Notwendigkeit der Einstellung von Standard-Web-Modul erreichen können. Der einzige Ort, den Sie ändern müssen, ist

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

, wo Sie für Ihre Web-Modul platzieren sollte:

<context-root/> 

dass der Job nicht.

Basierend auf anderen Antworten hier habe ich einen falschen Eindruck, etwas mehr erforderlich ist. Siehe das damit zusammenhängende Problem verursacht durch Verwirrung: http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module

Grundsätzlich gilt:

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

sollte auch funktionieren, basierend auf dem 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; 

jedoch habe ich diese Option nicht testen

Verwandte Themen