2009-06-28 16 views
21

पर लगातार जेडीओ उदाहरण भेजना मैंने अभी Google वेब टूलकिट सीखना शुरू कर दिया है और स्टॉक वॉचर ट्यूटोरियल ऐप लिखना समाप्त कर दिया है।जीडब्ल्यूटी-आरपीसी

मेरी JDO का उपयोग कर और RPC से अधिक आगे पीछे करने के लिए/यह भेज ग्राहक से फिर एक दो अलग-अलग कक्षाएं बनाने के लिए है सही एक एक व्यापार वस्तु (एक शेयर की तरह) लागू करने के लिए चाहता है कि सोच है उस ऑब्जेक्ट के लिए: जेडीओ एनोटेशन के साथ सर्वर पर इसे जारी रखने के लिए और दूसरा जो धारावाहिक है और आरपीसी पर उपयोग किया जाता है?

मैं स्टॉक चौकीदार अलग वर्ग है नोटिस और मैं धारणा है क्यों कर सकते हैं:

  • अन्यथा gwt संकलक कोशिश सब कुछ मौजूदा वर्ग JDO और com.google.blah तरह संदर्भित के लिए जावास्क्रिप्ट उत्पन्न करने के लिए होगा .users.User, आदि
  • सर्वर-साइड कक्षा पर भी तर्क हो सकता है जो क्लाइंट पर लागू नहीं होता है और इसके विपरीत।

मैं बस यह सुनिश्चित करना चाहता हूं कि मैं इसे सही ढंग से समझ रहा हूं। मैं अपने सभी व्यावसायिक ऑब्जेक्ट क्लास के दो संस्करण बनाना नहीं चाहता हूं, जिन्हें मैं आरपीसी पर उपयोग करना चाहता हूं यदि मेरे पास नहीं है।

उत्तर

0

आपको अलग-अलग उदाहरण बनाने की ज़रूरत नहीं है, वास्तव में आप इसे करने से बेहतर नहीं हैं। आपकी जेडीओ वस्तुओं को वैसे भी सादे POJO होना चाहिए, और इसमें व्यापार तर्क कभी नहीं होना चाहिए। यह आपकी व्यावसायिक परत के लिए है, न कि आपके लगातार ऑब्जेक्ट्स।

आपको बस इतना करना है कि आप जिन एनोटेशन का उपयोग कर रहे हैं उनके स्रोत शामिल हैं और जीडब्ल्यूटी को आपकी कक्षा को ठीक से संकलित करना चाहिए। साथ ही, आप उन पुस्तकालयों का उपयोग करना टालना चाहते हैं जो जीडब्ल्यूटी संकलित नहीं कर सकते हैं (जैसे चीजों का प्रतिबिंब, आदि), लेकिन मैंने जो भी परियोजनाएं की हैं, उनमें कभी भी कोई समस्या नहीं हुई है।

+1

समस्या नहीं वह अपने JDOs में व्यापार तर्क भी काम करती है, यह जेडीओ एनोटेशन जो समस्याएं पैदा कर रहे हैं (क्योंकि जीडब्ल्यूटी के पास स्रोत तक पहुंच नहीं है, जैसा कि आप इंगित करते हैं)। यह जीडब्ल्यूटी + जीएई में एक बड़ी समस्या है, और मेरी इच्छा है कि Google उचित समाधान को स्पष्ट करे। –

2

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

एक विस्तृत विवरण और एक वैकल्पिक हल के लिए, बाहर की जाँच विषय पर यह बहुत प्रभावशाली निबंध: http://timepedia.blogspot.com/2009/04/google-appengine-and-gwt-now-marriage.html

+2

जेडीओ संग्रहों को अपने कार्यान्वयन से प्रतिस्थापित नहीं करता है। उदाहरण के लिए, डेटा न्यूक्लियस के पास ऐसा करने का विकल्प होता है, लेकिन डिफ़ॉल्ट जावा jutil का उपयोग करना है। * कक्षाएं ताकि हम क्लाइंट-साइड पर डेटा न्यूक्लियस मौजूद होने के लिए उपयोगकर्ता पर लागू न हों। – DataNucleus

4

संक्षिप्त उत्तर है: आप डुप्लिकेट कक्षाएं बनाने की जरूरत नहीं है।

मेरा सुझाव है कि आप gwt-योगदानकर्ताओं की सूची में निम्नलिखित Google समूह चर्चा से एक बार देख ले:

http://groups.google.com/group/google-web-toolkit-contributors/browse_thread/thread/3c768d8d33bfb1dc/5a38aa812c0ac52b

यहाँ एक दिलचस्प अंश है:

यदि यह सब आप है 'दिलचस्पी है, मैं ने GAE और GWT-RPC को " बॉक्स से बाहर" बनाने के लिए एक तरीका बताया है।बस के रूप में अपने संस्थाओं की घोषणा: @PersistenceCapable (identityType = IdentityType.APPLICATION, अलग = "false") सार्वजनिक वर्ग MyPojo लागू करता Serializable {}

और सब कुछ काम करेंगे, लेकिन आप मैन्युअल रूप से निपटने के लिए होगा क्लाइंट से सर्वर पर वापस ऑब्जेक्ट भेजते समय पुन: अनुलग्नक।

आप इस विकल्प का उपयोग कर सकते हैं, और आपको दर्पण (डीटीओ) कक्षा की आवश्यकता नहीं होगी। आप gilead (पूर्व hibernate4gwt) भी आजमा सकते हैं, जो उन्नत वस्तुओं को क्रमबद्ध करने की समस्याओं के भीतर कुछ विवरणों का ख्याल रखता है।

1

आपको डोमेन मॉडल के दो संस्करण बनाने की आवश्यकता नहीं है।

एक स्ट्रिंग इनकोडिंग कुंजी, नहीं AppEngine कुंजी वर्ग का उपयोग करें:

यहाँ दो सुझाव दिए गए हैं।

pojo = pm.detachCopy(pojo) 

... सभी जेडीओ एन्हांसमेंट को हटा देगा।

2

मुझे अंततः एक समाधान मिला। पूरी तरह से अपना वस्तु न बदलें, लेकिन लिस्टिंग के लिए यह इस तरह से कार्य करें:

List<YourCustomObject> secureList=(List<YourCustomObject>)pm.newQuery(query).execute(); 
return new ArrayList<YourCustomObject>(secureList); 

वास्तविक समस्या नहीं वस्तु Serializing में ... समस्या संग्रह वर्ग जो गूगल द्वारा कार्यान्वित किया जाता है क्रमानुसार करने है और Serialize करने की अनुमति नहीं है।

0

मुझे लगता है कि जीडब्ल्यूटी के माध्यम से वस्तुओं को भेजने के लिए एक बेहतर प्रारूप जेएसओएन के माध्यम से है। इस मामले में सर्वर से एक JSON स्ट्रिंग भेजा जाएगा जिसे क्लाइंट में पार्स किया जाना होगा। लाभ यह है कि ब्राउज़र में प्रस्तुत अंतिम जावास्क्रिप्ट का आकार छोटा होता है। इस प्रकार पृष्ठ को तेजी से लोड करना पड़ता है।

दूसरी बात जीडब्ल्यूटी के माध्यम से वस्तुओं को भेजने के लिए, वस्तुओं को क्रमिक होना चाहिए। यह सभी वस्तुओं

तीसरा GWT कार्यों inbuilt है JSON संभाल करने के लिए मामला नहीं हो सकता है ... इसलिए ग्राहक अंत पर कोई समस्या नहीं

+0

यह सच है कि जेएसओएन भेजना सौदा को सरल बनाता है, लेकिन यह जीडब्ल्यूटी की एक महान विशेषता को भी समाप्त कर रहा है: आपके सीरियलाइजेशन को लिखने के हाथ के बिना क्लाइंट और सर्वर दोनों पर एक ही ऑब्जेक्ट मॉडल है। –

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

  • कोई संबंधित समस्या नहीं^_^