2008-09-24 8 views
9

У меня есть файл EAR, содержащий две WARs, war1.war и war2.war. Мой application.xml файл выглядит следующим образом:Как развернуть WAR, находящуюся внутри EAR в качестве корневого (/) контекста в 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> 

Это приводит к war2.war будучи доступен на http://localhost:8080/war2location, который является правильным, но war1.war на http://localhost:8080// - отмечают две косые черты.

Что я делаю неправильно?

Обратите внимание, что файлы WARs sun-web.xml игнорируются, если они содержатся в EAR.

ответ

0

http://localhost:8080// еще должен быть действительной URL, что эквивалентно http://localhost:8080/

Я бы экспериментировать с оставлением контекстного-корнем war1 пустых (хотя я не уверен, если это разрешено). Или изменить его на <context-root>.</context-root>.

В противном случае я должен сказать, что сгенерированный URI является ошибкой на части стеклянной рыбы, так как я никогда не видел этого, используя солнце.

+1

Это не так. http: // localhost: 8080/дает приветственную приветственную посылку Glassfish. Пустой контекст-корень использует имя WAR и a. просто не работает. :( – 2008-09-24 14:38:27

2

Это кажется мне ошибкой на сервере приложений для стеклянной рыбы. Он должен работать так, как он уже определил ваш файл application.xml.

Может быть, вы можете попробовать следующее:

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

Пробовал, WAR доступен в/ROOT :) – 2008-09-24 15:15:58

2

Это, кажется, ошибка/функция.

Вы можете установить Glassfish на использование определенного веб-приложения в качестве корневого приложения, т.е. когда другой контекст не совпадает, но приложение все же считает, что оно работает в исходном контексте, а не в корне.

Мое решение состоит в том, чтобы запустить первую WAR/w и использовать Apache для переадресации/независимо от того, с каким использованием RedirectMatch. Не очень красиво, но это решает проблему (kinda).

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

Вы предложили еще одну попытку использовать более новую версию Glassfish? (3.0.1 только что вышел).

Я смог получить -различную WAR в разобранном EAR для развертывания до http://localhost/ с использованием Glassfish 3.0.1. Как вы уже упоминали, sun-web.xml, по-видимому, игнорируется (по крайней мере, внутри взорванных ушей).

6

В Glassfish 3.0.1 вы можете определить веб-приложение по умолчанию в консоли администратора: «Конфигурация \ Виртуальные серверы \ сервер \ Веб-модуль по умолчанию». В раскрывающемся списке содержатся все развернутые военные модули.

Веб-модуль по умолчанию затем доступен из http://localhost:8080/.

1

Спасибо, jiriki. Идеальный ответ! Работает в Galssfish 2.1.1 тоже!

Конфигурация> службы HTTP> Виртуальные серверы> Сервер

или изменить параметр в default-web-moduledomain.xml

1

том же растворе, как описано с помощью @jiriki и @SteveGreenslade, а через asadmin. Найдено по: http://www.java.net/node/681176

Или вы можете использовать CLI для изменения этого веб-модуля по умолчанию.

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

должен показать вам приложение, а затем вы можете использовать asadmin набор команд, чтобы изменить его.

UPDATE (Glassfish 3.1+): С GlassFish 3.1+ вы можете достичь его без необходимости установки по умолчанию-веб-модуль. Единственное место, где вам нужно изменить это

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

, где вы должны разместить для вашего веб-модуля:

<context-root/> 

Это делает работу.

Основываясь на других ответах, представленных здесь, я получил неправильное впечатление, что требуется нечто большее. Смотрите связанные с ним проблемы, вызванной путаницей: http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module

В основном:

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

должен работать, а также, на основе коды (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; 

однако я не проверял этот вариант