package org.eclipse.persistence.testing.tests.distributedservers.rcm;
import java.util.Iterator;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.sessions.UnitOfWork;
import org.eclipse.persistence.testing.framework.TestErrorException;
import org.eclipse.persistence.testing.models.optimisticlocking.ListHolder;
import org.eclipse.persistence.testing.models.optimisticlocking.ListItem;
import org.eclipse.persistence.testing.tests.distributedservers.DistributedServer;
import org.eclipse.persistence.testing.tests.distributedservers.DistributedServersModel;
// Bug 358261
public class OrderedListNewObjectTest extends ConfigurableCacheSyncDistributedTest {
public OrderedListNewObjectTest(){
super();
cacheSyncConfigValues.put(ListHolder.class, new Integer(ClassDescriptor.SEND_NEW_OBJECTS_WITH_CHANGES));
cacheSyncConfigValues.put(ListItem.class, new Integer(ClassDescriptor.SEND_NEW_OBJECTS_WITH_CHANGES));
}
public void setup(){
super.setup();
UnitOfWork uow = getSession().acquireUnitOfWork();
ListHolder holder = new ListHolder();
holder = (ListHolder)uow.registerObject(holder);
ListItem item = new ListItem();
item.setDescription("test");
item = (ListItem)uow.registerObject(item);
holder.getItems().add(item);
item.setHolder(holder);
uow.commit();
}
public void test(){
DistributedServer server = (DistributedServer)DistributedServersModel.getDistributedServers().get(0);
// put our ListHolder in the cache
ListHolder holder = (ListHolder)server.getDistributedSession().readObject(ListHolder.class);
holder.getItems().size();
// remove the objects, this should updabe both caches
UnitOfWork uow = getSession().acquireUnitOfWork();
holder = (ListHolder)uow.readObject(ListHolder.class);
ListItem item = holder.getItems().get(0);
uow.registerObject(item);
uow.deleteObject(item);
uow.deleteObject(holder);
uow.commit();
// add a new object. these changes should be sent
uow = getSession().acquireUnitOfWork();
holder = new ListHolder();
holder = (ListHolder)uow.registerObject(holder);
item = new ListItem();
item.setDescription("test");
item = (ListItem)uow.registerObject(item);
holder.getItems().add(item);
item.setHolder(holder);
uow.commit();
}
public void verify(){
// ensure the changes are propgated
try{
Thread.sleep(1000);
} catch (InterruptedException e){};
DistributedServer server = (DistributedServer)DistributedServersModel.getDistributedServers().get(0);
ListHolder holder = (ListHolder)server.getDistributedSession().readObject(ListHolder.class);
if (holder.getItems().size() != 1){
throw new TestErrorException("Incorrect number of items");
}
}
public void reset(){
UnitOfWork uow = getSession().acquireUnitOfWork();
ListHolder holder = (ListHolder)uow.readObject(ListHolder.class);
Iterator i = holder.getItems().iterator();
while (i.hasNext()){
uow.deleteObject(i.next());
}
uow.deleteObject(holder);
uow.commit();
super.reset();
}
}