2008-09-24 23 views
9

Tôi có một tệp EAR chứa hai WAR, war1.war và war2.war. tập tin application.xml của tôi trông như thế này:Làm thế nào để bạn triển khai một WAR bên trong một EAR làm ngữ cảnh gốc (/) trong 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> 

Điều này dẫn đến war2.war là có sẵn trên http://localhost:8080/war2location, đó là chính xác, nhưng war1.war là trên http://localhost:8080// - lưu ý hai dấu gạch chéo.

Tôi đang làm gì sai?

Lưu ý rằng tệp SUN-web.xml của WARs bị bỏ qua khi có trong EAR.

Trả lời

0

http://localhost:8080// vẫn nên là một URL hợp lệ mà là tương đương với http://localhost:8080/

Tôi muốn thử nghiệm với rời khỏi bối cảnh gốc của war1 trống (mặc dù tôi không chắc chắn nếu đó là cho phép). Hoặc thay đổi nó thành <context-root>.</context-root>.

Nếu không, tôi sẽ phải nói rằng URI được tạo ra là một lỗi về phần của thủy tinh vì tôi chưa từng thấy điều đó bằng cách sử dụng mặt trời.

+1

Thật không may. http: // localhost: 8080/cho srceen chào mừng mặc định của Glassfish. Một context-root trống sử dụng tên WAR và a. chỉ đơn giản là không hoạt động. :( –

2

Điều này có vẻ như tôi là một lỗi trong máy chủ ứng dụng glassfish. Nó sẽ hoạt động vì nó đã được định nghĩa tệp application.xml của bạn.

Có lẽ bạn có thể thử như sau:

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

Đã thử; WAR có sẵn trên/ROOT :) –

2

này dường như là một lỗi/tính năng.

Bạn có thể đặt Glassfish sử dụng ứng dụng web nhất định làm ứng dụng gốc, ví dụ: khi không có bối cảnh nào khác phù hợp, nhưng ứng dụng sau đó vẫn cho rằng nó đang chạy trên ngữ cảnh gốc chứ không phải trên thư mục gốc.

Giải pháp của tôi là chạy WAR đầu tiên vào/w và sử dụng Apache để chuyển hướng/bất cứ điều gì đến/w/bất cứ điều gì bằng cách sử dụng RedirectMatch. Không phải là rất đẹp, nhưng nó giải quyết vấn đề (kinda).

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

Bạn đã thử một phiên bản mới hơn của Glassfish? (3.0.1 vừa xuất hiện).

Tôi đã có thể nhận được cảnh báo riêng trong một EAR phát nổ để triển khai tới http://localhost/ bằng Glassfish 3.0.1. Như bạn đã đề cập, sun-web.xml dường như bị bỏ qua (bên trong tai phát nổ ít nhất).

6

Trong Glassfish 3.0.1 bạn có thể xác định ứng dụng web mặc định trong bảng điều khiển quản trị: "Configuration \ Virtual Servers \ server \ Default Web Module". Hộp thả xuống chứa tất cả các mô-đun chiến tranh được triển khai.

Mô-đun web mặc định có thể truy cập được từ http://localhost:8080/.

1

Cảm ơn jiriki. Câu trả lời hoàn hảo! Hoạt động trong Galssfish 2.1.1 quá!

Configuration> HTTP Dịch vụ> Máy chủ ảo> Máy chủ

hoặc thay đổi default-web-module tham số trong domain.xml

1

Các giải pháp tương tự như mô tả qua @jiriki và @SteveGreenslade, nhưng qua asadmin. Tìm thấy tại: http://www.java.net/node/681176

Hoặc bạn có thể sử dụng CLI để thay đổi mô-đun web mặc định này.

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

sẽ hiển thị cho bạn những ứng dụng, và sau đó bạn có thể sử dụng asadmin lệnh thiết lập để thay đổi nó.

UPDATE (Glassfish 3.1+): Với glassfish 3.1+ bạn có thể đạt được điều đó mà không cần phải thiết lập mặc định-web-mô-đun. Nơi duy nhất bạn cần phải sửa đổi là

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

nơi bạn nên đặt cho module web của bạn:

<context-root/> 

Đó không được công việc.

Dựa trên các câu trả lời khác có mặt ở đây, tôi có ấn tượng sai về điều gì đó cần thiết hơn. Xem các vấn đề liên quan do nhầm lẫn: http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module

Về cơ bản:

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

nên làm việc là tốt, dựa trên mã (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; 

tuy nhiên tôi đã không kiểm tra tùy chọn này

Các vấn đề liên quan