2012-12-20 7 views
8

Utworzyłem węzeł i utworzyłem 3 wersje.Jak mogę uzyskać właściwość starszej wersji węzła na poziomie jackrabbit?

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 

Teraz chcę uzyskać name z wersji 1.2 ..

Próbowałem go przez

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?? 
} 

Czy jest to możliwe do ognia kwerendy i pobierać dane?

Jak mogę to osiągnąć?

Odpowiedz proszę.

Z góry dziękuję.

Odpowiedz

4

Minęło dużo czasu, odkąd nie pracuję z Jackrabbitem, więc mogę się mylić.

Ale o ile pamiętam, treść poprzedniego węzła wersja jest przechowywana jako mrożonych węzła w węźle wersji.

Tak, myślę, że można spróbować odzyskać go z:

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()); 

} 

Nadzieja to pomaga.

+0

Dobra, daj mi znać. –

+0

Zobacz moją edycję. Czy to działa? Jeśli nie, jaki błąd otrzymujesz? –

+0

Nie mogę wypróbować twojego kodu, ponieważ we fragmencie używasz własnej klasy niestandardowej, której nie mam. Po prostu powiedz mi błąd, abym mógł ci pomóc dalej. –

1

Luca miał rację. Każda wersja ma zamrożony węzeł, który reprezentuje twój węzeł w momencie, kiedy został on sprawdzony. Możesz wywoływać metody na nim tak samo, jak w węźle podstawowym.

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

// get a property, eg. someStringProperty 
String someStringProperty = node.getProperty("someStringProperty").getString(); 
Powiązane problemy