2013-11-21 8 views
5

में मैपिंग WebSocketEndpoints मैं जावा ईई 7 वेब एप्लिकेशन विकसित करने की कोशिश कर रहा हूं जो वेबस्केट एंडपॉइंट का उपयोग करता है और जेटी सर्वर पर इसे तैनात करता है। तथापिवेब.एक्सएमएल फ़ाइल

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
    bean-discovery-mode="annotated"> 

WebSocketEndpoint ठीक से टिप्पणी की जाती है और Netbeans/Glassfish4 साथ ठीक काम करता है,,:

Game/ 
    src/ 
    main/ 
     java/ 
     game/ 
      WebSocketEndpoint.java 
     webapp/ 
     index.html 
     scripts/ 
      variousjavascriptstuff.js 
     WEB-INF/ 
      beans.xml 
      web.xml 

beans.xml फ़ाइल में:

एप्लिकेशन के पास निम्न संरचना है आवेदन जेटी सर्वर पर तैनात किया जाना चाहिए।

तो, मेरा प्रश्न - मैं वेब.एक्सएमएल फ़ाइल में यूआरएल/गेम में वेबस्केट एंडपॉइंट कैसे मैप करूं? मुझे सर्वलेट मैपिंग के लिए कई उदाहरण मिले हैं, लेकिन मुझे नहीं लगता कि यह सर्वर एंडपॉइंट के लिए काम करेगा।

या, वहाँ एक रास्ता जेट्टी के लिए एक web.xml फ़ाइल में लिखने के लिए है, जिससे कि वह डालूँगा एनोटेट वर्गों/तरीकों (ऊपर beans.xml के समान)

उत्तर

5

को पता चलता है मान लिया जाये कि आप game.WebSocketEndpoint टिप्पणी किए गए JSR का उपयोग कर -356 तकनीक ...

उदाहरण:

package game; 

import javax.websocket.server.ServerEndpoint 

@ServerEndpoint("/game") 
public class WebSocketEndpoint { 

} 

तो आप निम्न कार्य करना है ...

  1. उपयोग Jetty 9.1+
  2. Enable the 'websocket' module (अपने start.ini या कमांड लाइन के लिए --module=websocket जोड़ने)

कि WebSocket अंतिम बिंदुओं के लिए WebSocket सर्वर कक्षाएं + एनोटेशन स्कैनिंग सक्षम हो जाएगा।

नोट: जेएसआर -356 को तैनाती वर्णनकर्ता (web.xml) के माध्यम से मैप करने के लिए नहीं है।

हालांकि, आप प्रोग्राम निम्न तकनीक का उपयोग कर अपने अंतिम बिंदु मैप कर सकते हैं:

  1. एक javax.servlet.ServletContextListener कि मैन्युअल javax.websocket.server.ServerContainer के माध्यम से अंतिम बिंदु कहते हैं बनाएँ (के लिए नीचे देखें कैसे)
  2. एक javax.servlet.ServerContainerInitializer कि मैन्युअल कहते हैं बनाएं javax.websocket.server.ServerContainer के माध्यम से एंडपॉइंट्स (नीचे देखें)
  3. javax.websocket.server.ServerAppliationConfig बनाएं जो अंतराल को जोड़ता है जिसे आप जोड़ना चाहते हैं।

नोट: तकनीक # 2 और # 3 दोनों को एनोटेशन (धीमी स्टार्टअप) के लिए कक्षा स्कैनिंग की आवश्यकता होती है। तकनीक # 1 तेज स्टार्टअप है।

कैसे मैन्युअल रूप से अन्य कंटेनरों के लिए के बारे में क्या Endpoints

// Get a reference to the ServerContainer 
javax.websocket.server.ServerContainer ServerContainer = 
    (javax.websocket.server.ServerContainer) 
    servletContext.getAttribute("javax.websocket.server.ServerContainer"); 
// Add endpoint manually to server container 
serverContainer.addEndpoint(game.WebSocketEndpoint.class); 
+0

जोड़े के लिए?मुझे मैन्युअल कॉन्फ़िगरेशन पसंद है लेकिन मुझे यह दिमागी दबदबा लगता है कि इंटरनेट में कोई भी नहीं है कि कोई गंभीरता का पता लगाने के लिए अपने contianer (tomcat 8) को कैसे प्राप्त करें। क्या कोई सामान्य तरीका नहीं है? मुझे कंटेनर विशिष्ट समाधान पसंद नहीं हैं। – momomo

संबंधित मुद्दे