2009-04-14 24 views
17

मैं एक वेब-ऐप विकसित करना चाहता हूं जिसमें जीडब्ल्यूटी और जीएई का उपयोग कर डेटा दृढ़ता की आवश्यकता है। जैसा कि मैं इसे समझता हूं, जेडीओ या जेपीए एनोटेटेड ऑब्जेक्ट्स का उपयोग करते हुए, डेटा दृढ़ता के लिए मेरा केवल (या कम से कम सबसे सुविधाजनक) विकल्प जीएई का डाटास्टोर है। मैं जीडब्ल्यूटी रिमोट प्रक्रिया कॉल (आरपीसी) का उपयोग कर अपने ऑब्जेक्ट्स को आगे और आगे क्लाइंट-सर्वर भेजने में सक्षम होना चाहूंगा, इसलिए मेरी ऑब्जेक्ट्स "डिटेच" करने में सक्षम होनी चाहिए। हालांकि, जीडब्ल्यूटी आरपीसी क्रमबद्धता पृथक जेडीओ/जेपीए वस्तुओं को संभाल नहीं सकती है और ऐसा प्रतीत नहीं होता है कि यह निकट भविष्य में होगा।Google वेब टूलकिट (जीडब्ल्यूटी) + Google ऐप इंजन (जीएई) + अलग डेटा पर्सिस्टेंस

मेरा प्रश्न: इसका सबसे सरल और सबसे सीधा समाधान क्या है? सर्वर-साइड दृढ़ता के साथ एक ही ऑब्जेक्ट क्लाइंट/सर्वर साझा करने में सक्षम होने के नाते बेहद सुविधाजनक होगा।

संपादित

मैं स्पष्ट करना चाहिए कि मैं अभी भी GAE के डेटास्टोर साथ GWT RPC उपयोग करना चाहते हैं। मैं बस सबसे अच्छा समाधान ढूंढ रहा हूं जो इन सभी तकनीकों को एक साथ काम करने की अनुमति देगा।

+0

+1 में आवश्यक सहायता ढूंढने में सक्षम था। :-) –

+1

क्या आप यहां उत्तर प्राप्त करने के बाद इस पर अपनी प्रगति साझा करने पर विचार करेंगे? (और कृपया सर्वोत्तम उत्तर चुनने पर विचार करें) –

उत्तर

0

चूंकि जीडब्ल्यूटी अंततः जावास्क्रिप्ट को संकलित करता है, अलग-अलग दृढ़ता के लिए इसे उपलब्ध कुछ सेवाओं में से एक की आवश्यकता होगी। सबसे अच्छी तरह से जाना जाता है एचटीएमएल 5 स्टोर और गियर्स (दोनों SQLite का उपयोग करें!)। बेशक, न तो व्यापक रूप से तैनात किया गया है, इसलिए आपको अपने उपयोगकर्ताओं को या तो आधुनिक ब्राउज़र का उपयोग करने या कम ज्ञात प्लगइन स्थापित करने के लिए मनाने की आवश्यकता होगी। यदि उपयोगकर्ता

+0

अलग करके वे हाइबरनेट इत्यादि भेजने के बारे में बात कर रहे हैं, जो ब्राउज़र में लगातार नहीं हैं। –

+0

शर्तों टकराव के सामान्य मामले। – Javier

3

पालन नहीं करता है कुछ समय पहले मैं यह एक GWT आवेदन मैं लिख रहा था में पिछले साल आया था एक पोस्ट Using an ORM or plain SQL?

लिखा एक प्रयोग करने योग्य सबसेट को नीचा कर लें। EclipseLink से सेवा कार्यान्वयन में प्रस्तुति ऑब्जेक्ट्स के बहुत सारे अनुवाद। अगर हम ibatis का उपयोग कर रहे थे तो ibatis के साथ उपयुक्त ऑब्जेक्ट्स बनाएं और फिर उन्हें स्टैक ऊपर और नीचे सभी तरह से पास करें। कुछ purists तर्क दे सकता है कि यह खराब ™ है। शायद ऐसा ( सिद्धांत में) लेकिन मैं आपको बताता हूं कि: को सरल कोड, सरल स्टैक और अधिक उत्पादकता का कारण बन गया होगा।

जो मूल रूप से आपके अवलोकन से मेल खाता है।

लेकिन निश्चित रूप से यह Google App Engine के साथ कोई विकल्प नहीं है, इसलिए आप क्लाइंट-साइड ऑब्जेक्ट्स और अपनी जेपीए इकाइयों के बीच एक अनुवाद परत रखने में काफी अटक गए हैं।

जेपीए इकाइयां काफी कठोर हैं इसलिए वे क्लाइंट के बीच आगे और आगे भेजने के लिए वास्तव में उपयुक्त नहीं हैं। आमतौर पर आप ऐसा करते समय कई इकाइयों से छोटी बिट्स चाहते हैं (इस प्रकार प्रस्तुति-परत मूल्य वस्तु के किसी प्रकार के साथ समाप्त हो रहा है)। वह आपका रास्ता आगे है।

2

आप JSON का उपयोग करने पर विचार कर सकते हैं। जीडब्ल्यूटी के पास & पार्स करने के लिए आवश्यक एपीआई है जो क्लाइंट साइड में JSON स्ट्रिंग जेनरेट करता है। सर्वर सर्वर के लिए आपको बहुत सी JSON API मिलती है। मैंने google-gson के साथ प्रयास किया, जो ठीक है। यह आपके JSON स्ट्रिंग को POJO मॉडल और उपाध्यक्ष में परिवर्तित करता है। उम्मीद है कि यह आप आपकी आवश्यकता

7

कोशिश उपयोग http://gilead.sourceforge.net/

+0

अधिक विशेष रूप से एडाप्टर 4AppEngine http://noon.gilead.free.fr/gilead/index.php?page=adapter4appengine बस जागरूक रहें कि Google के सभी जेडीओ प्रकार क्रमबद्ध नहीं होंगे। उदाहरण के लिए पाठ, ब्लॉब और उपयोगकर्ता। आपको अभी भी इसे किसी अन्य तरीके से प्राप्त करने की आवश्यकता होगी। – Drew

5

रे क्रॉमवेल एक temporary hack up है के लिए एक सभ्य समाधान प्रदान में मदद करता है। मैंने कोशिश की है, और यह काम करता है।

यह आपको डिटेक्टेबल इकाइयों के बजाय क्षणिक का उपयोग करने के लिए मजबूर करता है, क्योंकि जीडब्ल्यूटी डेटाब्यूक्लियस द्वारा उपयोग किए गए एक छुपे ऑब्जेक्ट [] को क्रमबद्ध नहीं कर सकता है; इसका अर्थ यह है कि क्लाइंट को भेजे गए ऑब्जेक्ट्स को डेटास्टोर में वापस नहीं डाला जा सकता है, आपको वास्तविक डेटास्टोर ऑब्जेक्ट को पुनर्प्राप्त करना होगा, और सभी लगातार फ़ील्ड को इसमें वापस कॉपी करना होगा। रे की विधि विधियों पर पुनरावृत्ति करने के लिए प्रतिबिंब का उपयोग करती है, getBean() और setBean() विधियों को पुनर्प्राप्त करें, और अपने क्षणिक gwt ऑब्जेक्ट के getBean() के साथ इकाई setBean() को लागू करें।

आपको जेडीओ का उपयोग करने का प्रयास करना चाहिए, जेपीए अब के लिए एक रैपर वर्ग से कहीं ज्यादा नहीं है। इस हैक का उपयोग करने के लिए, आपके पास प्रत्येक "बीन" फ़ील्ड के लिए PROPER getBean और setBean वाक्यविन्यास का उपयोग करके, प्रत्येक निरंतर फ़ील्ड के लिए गेटटर और सेटर दोनों विधियां होनी चाहिए। खैर, सबसे अच्छा प्रोपर, जैसा कि यह मानता है कि सभी गेटर्स "प्राप्त" के साथ शुरू होंगे, जब डिफ़ॉल्ट बूलियन फ़ील्ड का उपयोग "है" है।

मैंने इस मुद्दे को ठीक किया है और रे के ब्लॉग पर एक टिप्पणी पोस्ट की है, लेकिन यह अनुमोदन की प्रतीक्षा कर रहा है और मुझे यकीन नहीं है कि वह इसे पोस्ट करेगा या नहीं। असल में, मैंने अपने काम को बढ़ाने के लिए org.datanucleus पैकेज में @GetterPrefix (prefix = MethodPrefix.IS) एनोटेशन लागू किया।

यदि यह पोस्ट नहीं किया जाता है, और यह एक मुद्दा है, तो ईमेल x_AT_aiyx_DOT_info पुन: @ जेडीओ के लिए @GetterPrefix और मैं आपको ठीक भेज दूंगा।

3

Try this। यह जीएई कोर प्रकारों को क्रमबद्ध करने और उन्हें जीडब्ल्यूटी क्लाइंट को भेजने के लिए एक मॉड्यूल है।

2

वर्तमान में, मैं डीटीओ (DataTransferObject) पैटर्न का उपयोग करता हूं। जरूरी नहीं कि स्वच्छ और बहुत अधिक बॉयलरप्लेट के रूप में, लेकिन जीएई को अभी भी वर्तमान में बॉयलरप्लेट की उचित मात्रा की आवश्यकता है। ;)

मेरे पास एक डोमेन ऑब्जेक्ट मैप किया गया है (आमतौर पर) डीटीओ के साथ एक-एक-एक। जब किसी ग्राहक को डोमेन जानकारी की आवश्यकता होती है, तो एक डीएओ (DataAccessObject) डोमेन ऑब्जेक्ट के डीटीओ प्रतिनिधित्व को खांसी देता है और उसे पूरे तार में भेजता है। जब एक डीटीओ वापस आता है, तो मैं डीएओ को डीटीओ सौंपता हूं जो तब सभी उपयुक्त डोमेन ऑब्जेक्ट्स को अपडेट करता है।

स्पष्ट रूप से तार पर सीधे डोमेन ऑब्जेक्ट्स को पास करने में सक्षम होने के रूप में साफ नहीं है, लेकिन जीएई के जेडीओ कार्यान्वयन और जीडब्ल्यूटी की सीरियलाइजेशन प्रक्रिया की सीमाओं का मतलब है कि यह वर्तमान में इसे संभालने का सबसे साफ तरीका है।

0

POJO डोमेन ऑब्जेक्ट्स को लोड/स्टोर करने के लिए सीधे Datastore API का उपयोग करने के बारे में क्या?

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

5

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

1

मैं ऑब्जेक्टिफ़ाई का भी उपयोग कर रहा हूं, और मुझे यह वाकई पसंद है। आपको अभी भी अनुवाद करने के लिए प्री/पोस्टलोड विधियों के साथ कुछ नृत्य करना है उदा। स्ट्रिंग और पीछे पाठ।

2

मेरा मानना ​​है कि इसके लिए Google का आधिकारिक उत्तर जीडब्ल्यूटी 2.1 RequestFactory है। यह देखते हुए कि आप जीडब्ल्यूटी और जीएई का उपयोग कर रहे हैं, मैं सुझाव दूंगा कि आप आधिकारिक Google ढांचे के साथ चिपके रहें ... मेरे पास एक समान जीडब्ल्यूटी/जीएई आधारित ऐप है और यही वह है जो मैं कर रहा हूं।

वैसे, अनुरोध फ़ैक्टरी स्थापित करना गधे में थोड़ा दर्द है।वर्तमान ग्रहण प्लग-इन में सभी जार शामिल नहीं हैं लेकिन मैं स्थानीय डेटा दृढ़ता के लिए क्लस्टरिंग वेब-आधारित सेवा का उपयोग करने के लिए Stackoverflow