public static Item newItem(int depth) {
   if (depth == 0) {
     return null;
   }
   Item header = new Item(depth);
   header._next = TAItem.newTAITem(depth - 1);
   return header;
 }
  public void testRefresh() {
    ExtObjectContainer client1 = openNewSession();
    ExtObjectContainer client2 = openNewSession();
    Item item1 = retrieveInstance(client1);
    Item item2 = retrieveInstance(client2);

    Item next1 = item1;
    int value = 10;
    while (next1 != null) {
      Assert.areEqual(value, next1.getValue());
      next1 = next1.next();
      value--;
    }

    Item next2 = item2;
    value = 10;
    while (next2 != null) {
      Assert.areEqual(value, next2.getValue());
      next2 = next2.next();
      value--;
    }

    item1.setValue(100);
    item1.next().setValue(200);
    client1.store(item1, 2);
    client1.commit();

    Assert.areEqual(100, item1.getValue());
    Assert.areEqual(200, item1.next().getValue());

    Assert.areEqual(10, item2.getValue());
    Assert.areEqual(9, item2.next().getValue());

    // refresh 0
    client2.refresh(item2, 0);
    Assert.areEqual(10, item2.getValue());
    Assert.areEqual(9, item2.next().getValue());

    // refresh 1
    client2.refresh(item2, 1);
    Assert.areEqual(100, item2.getValue());
    Assert.areEqual(9, item2.next().getValue());

    // refresh 2
    client2.refresh(item2, 2);
    Assert.areEqual(100, item2.getValue());
    // FIXME: maybe a bug
    // Assert.areEqual(200, item2.next().getValue());

    next1 = item1;
    value = 1000;
    while (next1 != null) {
      next1.setValue(value);
      next1 = next1.next();
      value++;
    }
    client1.store(item1, 5);
    client1.commit();

    client2.refresh(item2, 5);
    next2 = item2;
    for (int i = 1000; i < 1005; i++) {
      Assert.areEqual(i, next2.getValue());
      next2 = next2.next();
    }

    client1.close();
    client2.close();
  }
 protected void store() throws Exception {
   Item item = TAItem.newItem(ITEM_DEPTH);
   item._isRoot = true;
   store(item);
 }