Thanks guys for your input.
Lance, I tried the following configuration without success, but then tried
the second configuration and succeeded. Could you take a quick peak to be
sure I'm doing it correctly.
-- cleanup in @AfterMethod = This failed with the following exception
Failed: org.hibernate.SessionException: Session is closed
-- cleanup in @AfterTest = Failed:java.lang.IllegalStateException: Method
org.apache.tapestry5.ioc.internal.RegisteryImpl.cleanupThread(RegistryImpl.java.519)
may no longer be involked
-- I found success moving before to @BeforeMethod and moving registry
shutdown into @AfterMethod.
public class RegistryBuilderTest {
protected final Registry buildRegistry(Class... moduleClasses) {
RegistryBuilder builder = new RegistryBuilder();
builder.add(moduleClasses);
return builder.build();
}
}
public class SampleTest extends RegistryBuilderTest {
private Registry registry;
private HibernateSessionManager sessionManager;
private Session session;
@BeforeClass
protected void before() {
registry = buildRegistry(AppModuleTest.class,
HibernateCoreModule.class);
sessionManager = registry.getService(HibernateSessionManager.class);
session = sessionManager.getSession();
}
@Test
public void test1() {
System.out.println("test1");
UserProfile userProfile = new UserProfile();
userProfile.setShortname("test1");
session.save(userProfile);
session.flush();
sessionManager.commit();
assertEquals(getResultSize(UserProfile.class), 1);
}
@Test
public void test2() {
System.out.println("test2");
UserProfile userProfile = new UserProfile();
userProfile.setShortname("test2");
session.save(userProfile);
session.flush();
sessionManager.commit();
assertEquals(getResultSize(UserProfile.class), 1);
}
public int getResultSize(Class<?> clazz) {
return session.createCriteria(clazz).list().size();
}
@AfterClass
public void shutDown() {
System.out.println("shutDown");
registry.shutdown();
}
@AfterMethod
public void cleanupThread() {
System.out.println("cleanupThread");
registry.cleanupThread();
}
}
**** Working configuration ****
public class SampleTest extends RegistryBuilderTest {
private Registry registry;
private HibernateSessionManager sessionManager;
private Session session;
@BeforeMethod
protected void before() {
registry = buildRegistry(AppModuleTest.class,
HibernateCoreModule.class);
sessionManager = registry.getService(HibernateSessionManager.class);
session = sessionManager.getSession();
}
@Test
public void test1() {
System.out.println("test1");
UserProfile userProfile = new UserProfile();
userProfile.setShortname("test1");
session.save(userProfile);
session.flush();
sessionManager.commit();
assertEquals(getResultSize(UserProfile.class), 1);
}
@Test
public void test2() {
System.out.println("test2");
UserProfile userProfile = new UserProfile();
userProfile.setShortname("test2");
session.save(userProfile);
session.flush();
sessionManager.commit();
assertEquals(getResultSize(UserProfile.class), 1);
}
public int getResultSize(Class<?> clazz) {
return session.createCriteria(clazz).list().size();
}
@AfterMethod
public void cleanupThread() {
System.out.println("cleanupThread");
registry.cleanupThread();
registry.shutdown();
}
}
On Fri, Aug 29, 2014 at 11:33 AM, Lance Java <[email protected]>
wrote:
> From the h2 docs here:
> http://www.h2database.com/html/features.html#in_memory_databases
>
> In some cases, only one connection to a in-memory database is required.
> This means the database to be opened is private. In this case, the database
> URL is jdbc:h2:mem: Opening two connections within the same virtual machine
> means opening two different (private) databases.
>
> Sometimes multiple connections to the same in-memory database are required.
> In this case, the database URL must include a name. Example:
> jdbc:h2:mem:db1. Accessing the same database using this URL only works
> within the same virtual machine and class loader environment.
>
> So, if you use a connection url of "jdbc:h2:mem:" AND you make sure to call
> registry.cleanupThread() in the @After of each test. You will get a new
> database for every test.
>
--
George Christman
www.CarDaddy.com
P.O. Box 735
Johnstown, New York