java - jupiter - how many moons does neptune have 2018



जीपीटी-आरपीसी कॉल में<Serializable> सूची का उपयोग करना? (2)

RPC कॉल में ऑब्जेक्ट पास करते समय RPC इंटरफ़ेस में ठोस पैरामीटर प्रकार घोषित करने के लिए यह एक अच्छा अभ्यास है। यदि किसी कारण से आप RPC इंटरफ़ेस में ठोस वर्ग का उपयोग नहीं कर सकते हैं तो संभव के रूप में विशिष्ट होने का प्रयास करें।

इसका कारण यह है कि जीडब्ल्यूटी कंपाइलर जब जावास्क्रिप्ट उत्सर्जित करते समय संकलन इकाई में सूची के सभी संभावित रूपों को ध्यान में रखना है। इसमें कक्षा पथ में सूची और सीरियलज्याबल इंटरफ़ेस का विस्तार करने वाले सभी वर्ग शामिल हैं। क्रमपरिवर्तन बहुत बड़ा हो सकता है, जो आपके संकलन के समय के साथ-साथ आवेदन डाउनलोड आकार को प्रभावित करेगा।

तो सबसे अच्छा तरीका यह है कि आप अपने इंटरफेस को परिभाषित करें

public ArrayList<YourType> myMethod(TransactionCall call) {...}

बजाय

public List<Serializable> myMethod(TransactionCall call) {...}

इस तरह कंपाइलर को केवल ऐरेलिस्ट और आपका टाईप एक्सटेंशन के लिए संकलन इकाइयां उत्पन्न होती हैं। बेनिफिट तेज संकलन समय और छोटे संकलित जावास्क्रिप्ट फाइलों में है, इसलिए आपके आवेदन के तेजी से डाउनलोड

यदि आपको अपने आरपीसी कॉल में असंबद्ध वस्तुओं की एक विस्तृत श्रृंखला वापस करनी है, तो आवरण वर्ग बनाने की कोशिश करें और आवरण वर्ग की वापसी वस्तु के साथ वापस लौटने वाले मूल्य के साथ आइए। RPC विधि परिभाषा में आवरण वर्ग का उपयोग करें लपेटा हुआ क्षेत्र को ऑब्जेक्ट या सीरियलजबल के रूप में घोषित करने के लिए आग्रह करता हूं कि आप आवरण के उपयोग से प्राप्त किए गए सभी सीरियलाइजेशन लाभों को नकार देंगे। इसके बजाय आप अपने आरपीसी कॉल के माध्यम से प्रत्येक कंक्रीट प्रकार के लिए एक रैपर अंतरफलक और रैपर लागू करने का एक छोटा सा सेट परिभाषित कर सकते हैं।

मेरे पास निम्नलिखित पद्धति के साथ एक RPC सेवा है:

public List<Serializable> myMethod(TransactionCall call) {...}

लेकिन मुझे एक चेतावनी मिलती है जब इस विधि का विश्लेषण किया जाता है, और फिर आरपीसी कॉल विफल हो जाता है

Analyzing 'my.project.package.myService' for serializable types
Analyzing methods:
public abstract java.util.List<java.io.Serializable> myMethod(my.project.package.TransactionCall call)
Return type: java.util.List<java.io.Serializable>
[...]
java.io.Serializable
Verifying instantiability
(!) Checking all subtypes of Object wich qualify for serialization

ऐसा लगता है कि मैं अपनी सूची के लिए सीरियलजबल का उपयोग नहीं कर सकता ... मैं इसके बजाय अपने स्वयं के इंटरफ़ेस का उपयोग कर सकता हूं (जैसे कुछ असिंकडेटाइंटरफेस, जो सीरियलाइज करने योग्य इंटरफ़ेस लागू करता है) परन्तु तथ्य यह है कि मेरी पद्धति एक सूची कस्टम ऑब्जेक्ट और मूल ऑब्जेक्ट्स (जैसे स्ट्रिंग्स, इंट .... के रूप में)

तो मेरे सवाल हैं:

  • यह एक standart व्यवहार है? (मुझे समझ में नहीं आ रहा है कि मैं उस मामले में इस इंटरफ़ेस का उपयोग क्यों नहीं कर सकता)
  • क्या किसी को इस तरह की स्थिति के लिए एक वैकल्पिक हल है?

Answer #1

आप जांच सकते हैं कि सीरियलिजेशन नीति फ़ाइल समस्या का स्रोत नहीं है।

जीडब्ल्यूटी प्रलेखन से उद्धरण :

हालांकि, नई जीडब्ल्यूटी आरपीसी सिस्टम में java.io.Serializable के लिए समर्थन को सक्षम करने के लिए एक शर्त है।

आरपीसी अब जीडब्ल्यूटी संकलन के दौरान एक सीरियललाइजेशन नीति फ़ाइल बनाता है। सीरियलाइजेशन नीति फ़ाइल में अनुमत प्रकारों की एक श्वेतसूची होती है जिन्हें सीरियल किया जा सकता है। इसका नाम एक मजबूत हैश नाम है जिसके बाद .gwt.rpc है। Java.io.Serializable के लिए समर्थन को सक्षम करने के लिए, आपके अनुप्रयोग तार पर भेजे जाने वाले प्रकार को क्रमबद्धकरण नीति श्वेतसूची में शामिल किया जाना चाहिए। साथ ही, serialization नीति फ़ाइल को एक सार्वजनिक संसाधन के रूप में अपने वेब सर्वर पर तैनात किया जाना चाहिए, जो एक दूरस्थ सेवा सेवा से ServletContext.getResource () के माध्यम से पहुंच योग्य है। अगर इसे ठीक से लागू नहीं किया गया है, तो आरपीसी 1.3.3 संगतता मोड में चलाएगा और जावा इयो। सेरिअलाइज करने योग्य प्रकारों को क्रमबद्ध करने के लिए मना कर देगा।





gwt-rpc