/** * */ package org.activejpa.utils; import static org.testng.Assert.assertEquals; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; import org.activejpa.entity.testng.BaseModelTest; import org.activejpa.entity.testng.DomainClassObjectFactory; import org.activejpa.jpa.JPA; import org.testng.IObjectFactory; import org.testng.ITestContext; import org.testng.annotations.BeforeClass; import org.testng.annotations.ObjectFactory; import org.testng.annotations.Test; import com.google.common.util.concurrent.Uninterruptibles; /** * @author ganeshs * */ public class JpaThreadFactoryTest extends BaseModelTest { /** * HACK. `mvn test` will be run before the package is created. javaagent can be loaded only from a jar. Since the * jar is not yet created, it will throw agent not found exception. This is a hack to get rid of that exception */ @ObjectFactory public IObjectFactory getObjectFactory(ITestContext context) throws Exception { return new DomainClassObjectFactory(); } @BeforeClass public void beforeClass() throws Exception { JPA.instance.addPersistenceUnit("test"); } @Override public void setup() throws Exception { } @Override public void destroy() throws Exception { DummyModel.deleteAll(); } @Test public void shouldCreateNewEntityManagerForEveryThreadRun() { final DummyModel model = new DummyModel("value1", "value2", "value3"); model.persist(); final AtomicLong atomicLong = new AtomicLong(0); Runnable runnable = new Runnable() { @Override public void run() { DummyModel model1 = DummyModel.findById(model.getId()); if (atomicLong.get() == 1) { assertEquals(model1.getColumn1(), "value1"); atomicLong.incrementAndGet(); } } }; Thread thread = new ActiveJpaThreadFactory().newThread(runnable); thread.run(); atomicLong.incrementAndGet(); Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); DummyModel model1 = DummyModel.findById(model.getId()); model.setColumn1("value4"); model1.persist(); thread.run(); Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); assertEquals(atomicLong.get(), 2L, "Assert in thread not run"); } }