2008-12-16 11 views
10

Jackrabbit में मैं Jackrabbit JCR में भंडारण के लिए भंडार नोड्स में मेरी POJOs को बचाने के लिए दो तरीके का अनुभव किया है:मेरे पीओजेओ को जैकबैबिट जेसीआर में सहेजने का सबसे अच्छा तरीका क्या है?

  1. अपने ही परत और
  2. अपाचे भित्ति

मेरे अपने लेखन का उपयोग कर लेखन कोड काफी समय तक उपभोग करने वाला और श्रम गहन साबित हुआ है (बहुत सारे बदसूरत स्वचालित परीक्षण लिखना और चलाने के लिए) हालांकि काफी लचीला है।

का उपयोग भित्ति एक निराशा किया गया है क्योंकि यह एक "मृत" परियोजना stuck in 2006

कुछ बेहतर विकल्प क्या हैं प्रतीत हो रहा है है?

उत्तर

15

एक और विकल्प ओसीएम ढांचे को पूरी तरह से छोड़ना है और केवल javax.jcr.Node को बहुत ही लचीला डीएओ के रूप में उपयोग करना है। मूल कारण यह है कि ओसीएम ढांचे का अस्तित्व क्यों है क्योंकि आरडीबीएमएस के साथ आपको वस्तुओं से संबंधपरक मॉडल में मैपिंग की आवश्यकता होती है। जेसीआर के साथ, जो पहले से ही बहुत ऑब्जेक्ट उन्मुख (नोड ~ = ऑब्जेक्ट) है, यह अंतर्निहित कारण चला गया है। क्या बचा है कि डीएओ के साथ आप अपने प्रोग्रामर को अपने कोड में एक्सेस कर सकते हैं (इसके अलावा स्वत: पूर्णता की सहायता)। लेकिन यह दृष्टिकोण वास्तव में जेसीआर अवधारणा का लाभ नहीं उठाता है, जिसका अर्थ है स्कीमा मुक्त और लचीला प्रोग्रामिंग। सीधे अपने कोड में जेसीआर एपीआई का उपयोग करना उस अवधारणा का पालन करने का सबसे अच्छा तरीका है।

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

क्या अनुमति है या अनिवार्य (यानी "अर्ध-स्कीमा") पर कुछ बाधाओं के लिए आप नोड प्रकारों और मिश्रणों का उपयोग कर सकते हैं (चूंकि जेसीआर 2.0 आप मौजूदा सामग्री के लिए नोड प्रकार भी बदल सकते हैं): इस प्रकार आप इसे पूरी तरह से भंडार स्तर पर संभाल सकता है और अपवादों को पकड़ने के अलावा - आपके आवेदन कोड के अंदर टाइपिंग और बाधाओं की परवाह नहीं है ;-)

लेकिन, निश्चित रूप से, यह विकल्प आपकी आवश्यकताओं और व्यक्तिगत प्राथमिकताओं पर निर्भर करता है ।

+0

बहुत दिलचस्प है। मैं मानता हूं कि मुझे वास्तव में सोच की पुरानी "ओसीएम शैली" से दूर नहीं मिला है। विचार के लिए अच्छा खाना। – Chinnery

+1

यह कैसे आया कि ओसीएम ने इसे जेआर 1.6.0 में नहीं बनाया? यह बहिष्कृत, हाइबरनेटेड दिखता है .... – lisak

2

आप Jackrabbit OCM पर जीवित और किकिन देखना चाहते हैं। बेशक एक और तरीका पीओजेओ को मैन्युअल रूप से क्रमबद्ध/deserialize करना है। इसके लिए कई अलग-अलग विकल्प हैं। सवाल यह है कि क्या आपको जेसीआर में वस्तुओं से पूछताछ करने के लिए स्कीमा को ठीक करने की आवश्यकता है। यदि आप एक्सएमएल में क्रमबद्ध करना चाहते हैं तो XStream ऐसा करने के लिए एक बहुत दर्दनाक तरीका है। यदि आपको अधिक फ़िक्स स्कीमा की आवश्यकता है तो अपाचे कॉमन्स से Betwixt भी है।

+0

पॉइंटर्स के लिए XStream, Betwixt और Jackrabbit OCM के लिए धन्यवाद। – Chinnery

+0

क्या आप जानते हैं कि ओसीएम की स्थिति क्या है? यह 1.6.0 संस्करण और जेसीआर 2.0 विनिर्देश के लिए क्यों नहीं बनाया? – lisak

1

http://code.google.com/p/jcrom/ पर जेसीआरओएम परियोजना भी है। यह परियोजना कुछ सालों से निष्क्रिय रही, लेकिन गर्मी 2013 के रूप में कुछ नई रिलीज हुई हैं।

1

यह आपकी आवश्यकताओं पर निर्भर करता है। जब आप सीधे javax.jcr.node का उपयोग करते हैं, तो इसका मतलब है कि आपका कोड अंतर्निहित तंत्र के साथ बहुत अधिक है। मध्यम और यहां तक ​​कि कुछ छोटी आकार की परियोजनाओं में, यह एक अच्छा विचार नहीं है।जाहिर है सवाल यह होगा कि नोड से अपने डोमेन मॉडल में कैसे जाना है। समस्या जेडीबीसी परिणामसेट से अपने डोमेन मॉडल पर जाने के समान ही है। आपको याद है, मेरा मतलब तकनीकी दृष्टि से है कि समस्या समान है। एक कार्यात्मक दृष्टिकोण से, जेडीबीसी और जेसीआर का उपयोग करने के बीच बहुत अंतर हैं।

एक और निर्णय लेने वाला कारक यह है कि क्या आप अपनी जेसीआर सामग्री में संरचना लगा सकते हैं या नहीं। कुछ एप्लिकेशन डोमेन जेडीबीसी की तुलना में जेसीआर के साथ बेहतर मिलान कर सकते हैं), अन्य डोमेन में सामग्री प्रकृति में अत्यधिक असंगठित हो सकती है। ऐसे मामले में ओसीएम स्पष्ट रूप से अधिक है। मैं अभी भी javax.jcr। * कक्षाओं के चारों ओर अपनी खुद की रैपर परत लिखने की सलाह दूंगा।

1

https://github.com/ilikeorangutans/omf भी है, जो जेसीआर मैपर के लिए एक बहुत ही सुविधाजनक वस्तु है। दुर्भाग्यवश इसमें अभी तक लेखन समर्थन नहीं है। हालांकि हम एक बड़े सीएमएस स्थापना में सफलतापूर्वक इस ढांचे का उपयोग कर रहे हैं।

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

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