2008-09-24 20 views
9

मेरे पास एक ईएआर फ़ाइल है जिसमें दो WAR, war1.war और war2.war शामिल हैं। मेरे application.xml फ़ाइल इस तरह दिखता है:ग्लासफ़िश में रूट (/) संदर्भ के रूप में एक ईएआर के अंदर एक युद्ध को कैसे तैनात किया जाता है?

<?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 की सूर्य-वेब.एक्सएमएल फ़ाइलों को ईएआर में निहित होने पर अनदेखा किया जाता है।

उत्तर

0

http://localhost:8080// अभी भी एक मान्य URL कि http://localhost:8080/

मैं खाली war1 के संदर्भ-रूट छोड़ने के साथ प्रयोग होता के बराबर है (हालांकि मुझे यकीन है कि अगर अनुमति नहीं कर रहा हूँ) होना चाहिए। या इसे <context-root>.</context-root> में बदल रहा है।

अन्यथा मुझे कहना होगा कि उत्पन्न यूआरआई ग्लासफिश के हिस्से पर एक बग है क्योंकि मैंने कभी सूर्य का उपयोग नहीं किया है।

+1

दुर्भाग्य से यह नहीं है। http: // localhost: 8080/ग्लासफ़िश का डिफ़ॉल्ट स्वागत srceen देता है। एक खाली संदर्भ-रूट WAR नाम और ए का उपयोग करता है। बस काम नहीं करता है। :( –

2

यह मुझे ग्लासफ़िश एप्लिकेशन सर्वर में एक बग के रूप में प्रतीत होता है। इसे काम करना चाहिए क्योंकि यह पहले से ही आपकी application.xml फ़ाइल को परिभाषित कर चुका है।

हो सकता है कि आप निम्नलिखित की कोशिश कर सकते:

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

इसे आजमाया; WAR/ROOT पर उपलब्ध है :) –

2

यह एक बग/सुविधा होने लगते है।

आप रूट एप्लिकेशन के रूप में एक निश्चित वेब एप्लिकेशन का उपयोग करने के लिए ग्लासफ़िश सेट कर सकते हैं, यानी। जब कोई अन्य संदर्भ मेल नहीं खाता है, लेकिन एप्लिकेशन तब भी सोचता है कि यह मूल संदर्भ पर चल रहा है, न कि रूट पर।

मेरा समाधान पहले डब्ल्यूएआर/डब्ल्यू को चलाने के लिए है और रीडायरेक्ट मैच का उपयोग करने वाले किसी भी चीज को रीडायरेक्ट करने के लिए अपाचे का उपयोग करें। बहुत सुंदर नहीं है, लेकिन यह समस्या हल करता है (थोड़े)।

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

क्या आपने इसे ग्लासफ़िश के एक नवीनतम संस्करण पर एक और प्रयास दिया है? (3.0.1 बस बाहर आया)।

मैं ग्लासफ़िश 3.0.1 का उपयोग करके http://localhost/ पर तैनात करने के लिए एक विस्फोटित ईएआर में एक-सिंगल-वार प्राप्त करने में सक्षम हूं। जैसा कि आपने बताया है, सूर्य-वेब.एक्सएमएल को अनदेखा किया जा रहा है (कम से कम विस्फोटित कानों के अंदर)।

6

ग्लासफ़िश 3.0.1 में आप प्रशासन कंसोल में डिफ़ॉल्ट वेब एप्लिकेशन को परिभाषित कर सकते हैं: "कॉन्फ़िगरेशन \ वर्चुअल सर्वर \ सर्वर \ डिफ़ॉल्ट वेब मॉड्यूल"। ड्रॉप-डाउन बॉक्स में सभी तैनात युद्ध मॉड्यूल शामिल हैं।

डिफ़ॉल्ट वेब मॉड्यूल तब http://localhost:8080/ से पहुंच योग्य है।

1

धन्यवाद jiriki। बिल्कुल सही जवाब! गैल्सफ़िश 2.1.1 में भी काम करता है!

विन्यास> HTTP सेवा> वर्चुअल सर्वर> सर्वर

या के रूप में @jiriki और @SteveGreenslade के माध्यम से वर्णित domain.xml

1

ही समाधान में default-web-module मानदंड को बदलना है, लेकिन asadmin के माध्यम से। पर मिला: http://www.java.net/node/681176

या आप CLI उपयोग कर सकते हैं यह डिफ़ॉल्ट वेब मॉड्यूल बदलने के लिए।

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

आप अनुप्रयोग को दिखाना चाहिए, और आप फिर सेट आदेश asadmin उपयोग कर सकते हैं इसे बदलने के लिए।

अद्यतन (Glassfish 3.1+): glassfish 3.1+ आप इसे डिफ़ॉल्ट रूप-वेब-मॉड्यूल स्थापित करने की आवश्यकता नहीं प्राप्त कर सकते हैं।

<context-root/> 

यही काम करता है: केवल जगह आप संशोधित करने की आवश्यकता

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

जहां आप अपने वेब मॉड्यूल के लिए रखना चाहिए।

यहां मौजूद अन्य उत्तरों के आधार पर मुझे एक गलत इंप्रेशन मिला है और कुछ और आवश्यक है। 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; 

लेकिन मैं इस विकल्प का परीक्षण नहीं किया था भ्रम की वजह से संबंधित समस्या देखें