package siena.base.test; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import junit.framework.TestCase; import siena.Model; import siena.PersistenceManager; import siena.PersistenceManagerFactory; import siena.Query; import siena.SienaException; import siena.base.test.model.AggregateChildModel; import siena.base.test.model.AggregateParentModel; import siena.base.test.model.DiscoveryModel; import siena.base.test.model.PersonLongAutoIDAbstract; import siena.base.test.model.PersonLongAutoIDExtended; import siena.base.test.model.PersonLongAutoIDExtended2; import siena.base.test.model.PersonLongAutoIDExtended2.MyEnum; import siena.base.test.model.PersonLongAutoIDExtendedAbstract; import siena.base.test.model.PersonLongAutoIDExtendedFilter; import siena.base.test.model.PersonLongAutoIDModel; import siena.base.test.model.SampleModel; import siena.base.test.model.SampleModel2; import siena.base.test.model.TransactionAccountFrom; import siena.base.test.model.TransactionAccountFromModel; import siena.base.test.model.TransactionAccountTo; import siena.base.test.model.TransactionAccountToModel; import siena.core.async.QueryAsync; import siena.core.async.SienaFuture; import siena.core.batch.Batch; public abstract class BaseMultiThreadTest extends TestCase { static final private Logger logger = Logger.getLogger(BaseMultiThreadTest.class.getName()); protected PersistenceManager pm; public abstract PersistenceManager createPersistenceManager(List<Class<?>> classes) throws Exception; private static PersonLongAutoIDModel PERSON_LONGAUTOID_TESLA = new PersonLongAutoIDModel("Nikola", "Tesla", "Smiljam", 1); private static PersonLongAutoIDModel PERSON_LONGAUTOID_CURIE = new PersonLongAutoIDModel("Marie", "Curie", "Warsaw", 2); private static PersonLongAutoIDModel PERSON_LONGAUTOID_EINSTEIN = new PersonLongAutoIDModel("Albert", "Einstein", "Ulm", 3); private static DiscoveryModel[] discs = new DiscoveryModel[200]; @Override protected void setUp() throws Exception { super.setUp(); List<Class<?>> classes = new ArrayList<Class<?>>(); classes.add(PersonLongAutoIDModel.class); pm = createPersistenceManager(classes); PersistenceManagerFactory.install(pm, classes); for (Class<?> clazz : classes) { if(!Modifier.isAbstract(clazz.getModifiers())){ pm.createQuery(clazz).delete(); } } Batch<PersonLongAutoIDModel> batch = PersonLongAutoIDModel.batch(); batch.insert(PERSON_LONGAUTOID_TESLA, PERSON_LONGAUTOID_CURIE, PERSON_LONGAUTOID_EINSTEIN); } public void testMultiThreadSimple() { int count = 0; while(count < 1000) { count++; logger.info("Launching " + count + "-th operation"); final int c = count; FutureTask task = new FutureTask<Object>( new Thread() { public void run() { Model.getByKey(PersonLongAutoIDModel.class, PERSON_LONGAUTOID_TESLA.id); logger.info("Executed " + c + "-th operation"); } }, null); Thread thread = new Thread(task); thread.start(); try { task.get(1l, TimeUnit.HOURS); } catch (Exception e) { e.printStackTrace(); } } } }