2009-01-16 8 views
15

जावा ऑब्जेक्ट्स को जारी रखने के लिए हल्के विकल्प क्या हैं?जावा ऑब्जेक्ट्स को जारी रखने के लिए हल्के वजन वाले विकल्प क्या हैं

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

विकल्प के बारे में पता कर रहा हूँ हाइबरनेट और इस तरह EMF के रूप में व्यवस्थाएं शामिल हैं, लेकिन वे ध्वनि (और होना करने के लिए अनुभव किया गया है) बहुत जटिल और समय लेने। मुझे बॉक्स से बाहर कुछ चाहिए, अधिमानतः दाबाबेस उन्मुख से उन्मुख फ़ाइल, कि मैं अपने सादे पुराने जावा वस्तुओं के शीर्ष पर रख सकता हूं।

यह एक नौसिखिया प्रश्न है, किसी भी ट्यूटोरियल जैसे संदर्भ, संदर्भ स्पष्ट करने के लिए अग्रिम धन्यवाद।

उत्तर

5

ऑब्जेक्टऑटपुटस्ट्रीम और ऑब्जेक्ट इनपुटपुट यह कर सकता है। यह जावा में बनाया गया है और आपको वस्तुओं को आसानी से क्रमबद्ध/deserialize करने की अनुमति देता है।

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

अधिक यहाँ जानकारी:

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

static final long serialVersionUID = 1L; 
9

db4o एक वस्तु डेटाबेस ताकि कोई स्कीमा सेटअप और यह समय के साथ वस्तु संरचना में परिवर्तन करने के लिए अच्छी तरह से adapts है।

+1

मुझे वास्तव में अच्छा और सरल पसंद है db4o। –

+0

दुर्भाग्यवश 'डीबी 4o मर चुका है http://supportservices.actian.com/versant/default.html – FoxyBOA

2

एक सरल दृष्टिकोण (Serializable के रूप में) डिस्क पर क्रमानुसार करने के लिए अपने वस्तुओं है।

http://www.devx.com/Java/Article/9931/1954

+0

क्रमबद्धता के साथ एकमात्र समस्या यह है कि यदि आप अपना ओब्जेकेट बदलते हैं तो यह उसके चेहरे पर सपाट हो जाता है। – Milhous

+0

यदि आप अपनी कक्षाओं में serialVersionUID जोड़ते हैं तो आप कम से कम गुण जोड़ सकते हैं। आप अभी भी गुणों को हटाने में सक्षम नहीं होंगे। जावा के साथ आने वाले सीरियलवर टूल का उपयोग यह पता लगाने के लिए करें कि वर्तमान में आपकी कक्षा में कौन सी धारावाहिक है। –

0

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

यह कहकर, क्या आपने बस अपनी ऑब्जेक्ट को डिस्क पर सीधे क्रमबद्ध करने पर विचार किया है यदि आप बस कुछ त्वरित एन गंदे चाहते हैं?

+1

बहुत सारी चीज़ें हाइबरनेट है, लेकिन हल्के वजन उनमें से एक नहीं है। और जहां तक ​​बॉक्स दृढ़ता से बाहर है, आपको शुरू करने से पहले डेटाबेस स्कीमा बनाना होगा। –

+0

हाइबरनेट को छोड़कर यह आपके लिए करता है ताकि आपको इसके बारे में सोचने की भी आवश्यकता न हो। आप इसे होना चाहते हैं, हाइबरनेट * * हल्के हो सकता है – tddmonkey

+0

सबसे खराब बात यह है कि आप अनुप्रयोगों गति के लिए क्या कर सकते हैं सोचने के लिए के बारे में हाइबरनेट क्या करता है ... – mibutec

4

सरल एक्सएमएल हठ http://simple.sourceforge.net प्रयास करें है। यह वास्तव में सरल है और कोई विन्यास की आवश्यकता नहीं है। बस अपने मौजूदा पीओजेओ लें और उन्हें एनोटेट करें, फिर आप उन्हें एक फाइल में पढ़ और लिख सकते हैं।चक्रीय वस्तु ग्राफ के साथ ही सभी जावा संग्रह समर्थित हैं। इसका इस्तेमाल इस तरह किया जा सकता है।

Serializer serializer = new Persister(); 
MyObject object = serializer.read(MyObject.class, new File("file.xml)); 

और लेखन यह एक बहुत ही हल्के दृष्टिकोण, कोई मानक जावा 1.5 के अलावा अन्य dependancies है बस के रूप में आसान

serializer.write(myInstance, new File("file.xml")); 

है। जेएक्सबी, एक्सस्ट्रीम, कैस्टर जैसे एक्सएमएल प्रौद्योगिकियों के लिए अन्य ऑब्जेक्ट की तुलना में, जो कि अन्य परियोजनाओं के पूरे मेजबान पर निर्भर हैं सरल एक्सएमएल बहुत हल्का और स्मृति कुशल है।

6

यदि आप कुछ सरल देख रहे हैं तो आप उस प्रारूप में डेटा भी चाह सकते हैं जिसे आप पढ़ सकते हैं (बाइनरी फ़ाइल या डेटाबेस नहीं)। यदि ऐसा है, तो आपको JAXB (जावा का एक्सएमएल बाइंडिंग) देखना चाहिए जो जावा 6 और उसके बाद का हिस्सा है। ऐसी अन्य तकनीकें हैं जो एक्सएमएल बीन्स जैसे बेहतर तरीके से ऐसा करने में सक्षम हो सकती हैं लेकिन यह एक

जावा के एपीआई से इस पृष्ठ पर एक नज़र डालें। जावा ऑब्जेक्ट्स को क्रमबद्ध करने और deserializing करने के लिए यह काफी सीधे आगे है।

JAXBContext jc = JAXBContext.newInstance("com.acme.foo"); 

    // unmarshal from foo.xml 
    Unmarshaller u = jc.createUnmarshaller(); 
    FooObject fooObj = (FooObject)u.unmarshal(new File("foo.xml")); 

    // marshal to System.out 
    Marshaller m = jc.createMarshaller(); 
    m.marshal(fooObj, System.out); 

बस सुनिश्चित करें कि आपके FooObject @XmlRootElement एनोटेशन हो:

http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html

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

+0

सुंदर चालाक सुझाव दे किसी को भी देख पा रहे हैं नहीं है। मुझे इसके बारे में पता नहीं था। –

+0

क्या आपने एक्सस्ट्रीम देखा है। यह थोड़ा आसान है। – Milhous

1

सबसे आसान विकल्प मुझे पता है की किसी भी जावा obect से बाहर एक xml फ़ाइल बनाने के लिए Xstream उपयोग कर रहा है।

3

आप XStream को आजमा सकते हैं जो एक ओपन सोर्स लाइब्रेरी है। यह सब आपके पीओजेओ को एक्सएमएल में बदल देता है जिसे आप डिस्क पर सहेजा जा सकता है। इसका उपयोग करना बहुत आसान है और उपयोग करने के लिए कोड की केवल कुछ पंक्तियों की आवश्यकता है।

0

मैं उत्पादन कोड में बड़े पैमाने पर PersistentObject का इस्तेमाल किया है और यह मेरी जरूरतों को अच्छी तरह से कार्य करता है।

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