2012-12-20 32 views
8

Tôi đã tạo nút và tạo 3 phiên bản.Làm thế nào tôi có thể nhận được tài sản của một phiên bản cũ của một nút trong 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 

Bây giờ tôi muốn nhận được name của một phiên bản 1.2 ..

tôi đã cố gắng vượt qua

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

Can nó có thể bắn truy vấn và lấy dữ liệu?

Làm cách nào tôi có thể đạt được điều này?

Vui lòng trả lời câu hỏi này.

Xin cảm ơn trước.

Trả lời

4

Đó là một thời gian dài kể từ khi tôi không làm việc với Jackrabbit, vì vậy tôi có thể sai.

Nhưng theo như tôi nhớ, nội dung của nút phiên bản trước được lưu trữ dưới dạng nút đóng băng bị đóng băng dưới nút phiên bản .

Vì vậy, tôi nghĩ rằng bạn có thể thử để lấy nó với:

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

} 

Hope this helps.

+0

Ok, cho tôi biết. –

+0

Xem chỉnh sửa của tôi. Nó có hoạt động không? Nếu không, bạn nhận được lỗi nào? –

+0

Tôi không thể thử mã của bạn vì trong đoạn mã bạn sử dụng lớp tùy chỉnh của riêng mình mà tôi không có. Chỉ cần cho tôi biết lỗi, để tôi có thể giúp bạn thêm. –

1

Luca đã đúng. Mỗi phiên bản có một nút đông lạnh đại diện cho nút của bạn tại thời điểm nó được kiểm tra. Bạn có thể gọi các phương thức trên nó như bạn làm nút cơ sở.

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

// get a property, eg. someStringProperty 
String someStringProperty = node.getProperty("someStringProperty").getString(); 
Các vấn đề liên quan