java - जावा JAXB-रीस्टार्ट तर्क के साथ XML फ़ाइलें लेखन




append application-restart (2)

मुझे नहीं लगता कि इस जॉब के लिए JAXB उपयुक्त उपकरण है, लेकिन ...

आप एक कस्टम मार्शलर कार्यान्वयन लिख सकते हैं जो ऑब्जेक्ट्स को मार्शल किया गया है और व्यक्तिगत ऑब्जेक्ट्स को लिखने के लिए विखंडन मोड का उपयोग करता है।

मैं एक बहुत बड़ी एक्सएमएल फाइल (700 एमबी +) बना रहा हूं जो बैच के माध्यम से बड़ी मात्रा में डेटा प्रोसेस करता है। यह कार्यक्रम बेहद बड़े सिबेस डेटाबेस और एक एप्लिकेशन के बीच अंतरफलक के रूप में कार्य करता है। मेरे पास वर्तमान में वर्गों के लिए xsd स्कीमा बाध्य है मुझे पुनः आरंभ करने के तर्क को ध्यान में रखते हुए XML को लिखने में सक्षम होने का एक तरीका चाहिए।

IE मुझे यह पता करने में सक्षम था कि मैंने कहां छोड़ा था। या दूसरे शब्दों में, यदि प्रोग्राम विफल हो जाता है, तो मुझे यह देखने में सक्षम होना चाहिए कि पिछली बार XML फ़ाइल में क्या लिखा गया था, इसलिए यह उस स्थान को चुन सकता है जहां मैंने छोड़ा था। यहां एक एक्सएमपल है

<root>
  <WorkSet>
    <Work>
      <Customer>
    <Work>
      <Customer>
  <WorkSet>
    <Work>
      .....
<root>

कहते हैं कि एक लिखने 'काम' या 'वर्केट' नोड लिखने के बाद कार्यक्रम विफल हो जाता है क्या मुझे लेने का कोई रास्ता नहीं है जहां मैंने प्रसंस्करण छोड़ दिया? एक्सएमएल फ़ाइल के कतरनी आकार के कारण मैं एक्सएमएल फाइल को वापस मेमोरी में पढ़ने से बचने की कोशिश कर रहा हूं (कहना है कि यह 500 एमबी एक्सएमएल खत्म करता है और विफल रहता है)।

सहायता के लिए धन्यवाद।


यदि आप अपने डेटा को स्वतंत्र वर्कसेट तत्वों में विभाजित कर सकते हैं तो आप उन्हें एक समय में जेएएएसबी के टुकड़ा मोड के साथ एक बार लिख सकते हैं (जब जेएसीबी हेडर नहीं लिखता है)। बाद में केवल फाइलों को जोड़ना और गुम XML घोषणा जोड़ना, अंत समापन टैग खोलना

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





application-restart