2010-03-17 14 views
12

मेरे पास जेएक्स-डब्ल्यूएस शैली वेब सेवा क्लाइंट है जो नेटबीन आईडीई के साथ स्वतः उत्पन्न हुआ था।क्या javax.xml.ws.Service वस्तुओं का पुन: उपयोग करना सुरक्षित है?

जेनरेट प्रॉक्सी फैक्ट्री (javax.xml.ws.Service को बढ़ाता है) विभिन्न सेवा .getPort विधियों को प्रॉक्सी सृजन का प्रतिनिधि करता है। जिस एप्लिकेशन को मैं बनाए रख रहा हूं वह फैक्ट्री को तुरंत चालू करता है और जब भी वह लक्षित सेवा को कॉल करता है तो प्रॉक्सी प्राप्त करता है।

नए प्रॉक्सी कारखाने के उदाहरणों को बार-बार बनाना महंगे दिखाया गया है, यह देखते हुए कि फैक्टरी कन्स्ट्रक्टर, एक HTTP यूआरआई को आपूर्ति किए गए डब्ल्यूएसडीएल दस्तावेज को प्रत्येक तत्कालता के लिए पुनः प्राप्त किया जाता है।

हमें डब्लूएसडीएल को कैश करके प्रदर्शन में सुधार करने में सफलता मिली थी। लेकिन इसमें हमारे लिए बदसूरत रखरखाव और पैकेजिंग प्रभाव हैं।

मैं प्रॉक्सी फैक्ट्री को कैशिंग करने की उपयुक्तता का पता लगाना चाहता हूं। क्या यह सुरक्षित है, उदाहरण के लिए, एक ही जेवीएम पर निष्पादित करने और एक ही वेब सेवा को लक्षित करने के लिए दो अलग-अलग क्लाइंट क्लास, अलग-अलग प्रॉक्सी ऑब्जेक्ट्स (या साझा, पुनर्वित्त एक) प्राप्त करने के लिए सुरक्षित रूप से उसी फैक्ट्री का उपयोग कर सकते हैं?

मैं या तो JAX-WS विनिर्देश और न ही javax.xml.ws API दस्तावेज़ से मार्गदर्शन प्राप्त करने में असमर्थ रहा हूं। फैक्ट्री-प्रॉक्सी बहुतायत मेरे लिए अस्पष्ट नहीं है। Service.createPort की बजाय Service.getPort होने से आत्मविश्वास को प्रेरित नहीं किया जाता है।

उत्तर

2

आप दूसरे के अंश में 10000 बंदरगाह कर सकते हैं, इसलिए सेवा स्टोर करना एक अच्छा विचार है। wsdl स्थानीय को स्टोर करना और बाद में एंडपॉइंट को बदलना भी संभव है।

उदाहरण peopleWsdl & peopleEndpoint:
फ़ाइल:/सी: /Users/richard/Workspaces/OSB/SyllabusMailing/war/WEB-INF/wsdl/people/People_2_0.wsdl http://myserver:8011/domain/sem/People_2_0?wsdl

private static DSSeMPeople service = null; 
private DsSemPeoplePort getPort() throws Exception 
{ 
    String wsdl = AppUtil.getWebXmlParameter("peopleWsdl"); 
    String endpoint = AppUtil.getWebXmlParameter("peopleEndpoint"); 
    if(wsdl==null || "".equals(wsdl)) { 
     wsdl = endpoint; 
    } 

    try { 
     if(service==null) { 

      log.info("create peopleService from wsdl: " + wsdl);    
      log.info("use peopleService endpoint: " + (endpoint==null?"(from wsdl)":endpoint)); 

      URL url = new URL(wsdl);    
      service = new DSSeMPeople(url, new QName("http://www.tudelft.nl/domain/sem/people_2_0/", "DS_SeM_People")); 
     } 

     DsSemPeoplePort port = service.getDsSemPeoplePort(); 

     // set endpoint 
     if(endpoint!=null && !"".equals(endpoint) && !endpoint.equals(wsdl)) { 

      BindingProvider provider = (BindingProvider) port; 
      provider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 
     } 

     return port; 

    } catch (Exception e) { 

     String msg = "Failed to connect to people webservice. "; 
     log.error(msg); 
     throw new Exception(msg, e); 
    }  
} 
संबंधित मुद्दे