2012-12-20 14 views
8

मैंने नोड बनाया है और 3 संस्करण बनाए हैं।मैं जैकबैबिट में नोड के पुराने संस्करण की संपत्ति कैसे प्राप्त कर सकता हूं?

String path = "/my111"; 
MyClass m1 = new MyClass(); 
m1.setPath(path); 
m1.setName("Myname"); 
m1.setLanguage("English");  
ocm.create(m1); 
ocm.save();  

for (int i = 0; i < 4; i++) { 
ocm.checkout(path); 
m1.setName("mz676666" + i); 
ocm.update(m1); 
ocm.save(); 
ocm.checkin(path);   
    } 

VersionIterator iterator = ocm.getAllVersions(path); 
while (iterator.hasNext()) { 
     Version version = (Version)iterator.next(); 
     System.out.println("version::"+version.getName());   
} 


Output : 

version::jcr:rootVersion 
version::1.0 
version::1.1 
version::1.2 
version::1.3 

अब मैं एक संस्करण 1.2 की name प्राप्त करना चाहते हैं ..

मैं

org.apache.jackrabbit.ocm.version.VersionIterator iterator = ocm.getAllVersions(path); 
    while (iterator.hasNext()) { 
     Version version = (Version)iterator.next(); 
     System.out.println("version::"+version.getName()); 

    MyClass m1 = (MyClass) ocm.getObject(path, version.getName()); 
    System.out.println(m1.getName()); // But it always print `null`. Why?? 
} 

के माध्यम से इसे करने की कोशिश कर सकते हैं यह क्वेरी आग और डेटा लाने के लिए संभव है?

मैं इसे कैसे प्राप्त कर सकता हूं?

कृपया इसका उत्तर दें।

अग्रिम धन्यवाद।

उत्तर

4

यह लंबे समय से है क्योंकि मैं जैकबैबिट के साथ काम नहीं करता, इसलिए मैं गलत हो सकता हूं।

लेकिन जहाँ तक मुझे याद है के रूप में, एक पिछले संस्करण नोड की सामग्री एक जमे हुए नोडसंस्करण नोड नीचे के रूप में संग्रहीत किया जाता है।

तो, मुझे लगता है कि आप के साथ इसे पुनः प्राप्त करने की कोशिश कर सकते:

VersionIterator iterator = ocm.getAllVersions(path); 

while (iterator.hasNext()) { 
    Version version = (Version)iterator.next(); 

    //Here you go: 
    MarketingZone m1 = (MarketingZone) version.getFrozenNode(); 

    System.out.println(m1.getName()); 

} 

आशा इस मदद करता है।

+0

ठीक है, मुझे बताएं। –

+0

मेरा संपादन देखें। क्या यह काम करता है? यदि नहीं, तो आपको क्या त्रुटि मिलती है? –

+0

मैं आपके कोड को आजमा नहीं सकता क्योंकि स्निपेट में आप अपनी खुद की कस्टम क्लास का उपयोग करते हैं जो मेरे पास नहीं है। बस मुझे त्रुटि बताओ, ताकि मैं आपकी मदद कर सकूं। –

1

लुका सही था। प्रत्येक संस्करण में एक जमे हुए नोड होता है जो आपके नोड को उस समय चेक करता है जब उसमें चेक किया गया था। आप उस पर विधियों को कॉल कर सकते हैं जैसे आप बेस नोड करेंगे।

Version version = ... 
Node node = version.getFrozenNode(); 
String name = node.getName(); 

// get a property, eg. someStringProperty 
String someStringProperty = node.getProperty("someStringProperty").getString(); 
संबंधित मुद्दे