tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luke McCollum <>
Subject Re: Unit Testing Transactions ... what the?
Date Sat, 24 Apr 2010 00:27:03 GMT
Wow, that did it. At least for HSQLDB. For some reason MySQL is still not rolling back transactions.
But that's fine by me at the moment! Thank you for this! 

- Luke

P.S. I've actually run the test you mention there, substituting mysql jdbc parameters and
it does work fine. Weird. Anyway, I'm just happy HSQL is performing my tests correctly.

On Apr 23, 2010, at 3:47 PM, David Blevins wrote:

> I've seen this once back in February.  It turned out that the user had another copy of
commons-dbcp in their classpath.  The older versions of commons-dbcp doesn't support transactional
connection pooling.  This seems like a classpath issue rather than a configuration issue.
> Hunt for that, if it turns out to be the issue.  We can see if we can hack together some
sort of reflective inspector to look for this issue specifically and report it.
> Anyway, after that user reported the issue I went ahead and created this test case which
demonstrates all forms of rollback:
> -David
> On Apr 23, 2010, at 11:51 AM, Luke McCollum wrote:
>> So I'm attempting to get some unit tests running using Open EJB and Hibernate. I
had planned on rolling back transactions after running unit tests, but for whatever reason,
transactions don't roll back at all. I set up a dead simple test class to extend and ended
up making even more dead simple to try to test transactions. Still can't get it going. Here's
the class:
>> public class AbstractEJBIntegrationTester {
>>   protected static InitialContext context;
>>   protected static DeploymentInitializationService deploymentInitializationService;
>>   private static UserTransaction userTransaction;
>>   @BeforeClass
>>   public static void before() throws Exception {
>>       System.setProperty("", "create");
>>       System.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
>>       System.setProperty("openejb.logger.external", "true");
>>       Properties properties = new Properties();
>>       properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
>>       URL config = AbstractEJBIntegrationTester.class.getClassLoader().getResource("META-INF/openejb-test.xml");
>>       properties.setProperty("openejb.configuration", config.toExternalForm());
>>       context = new InitialContext(properties);
>>       userTransaction = (UserTransaction)context.lookup("java:comp/UserTransaction");
>>       userTransaction.begin();
>>       deploymentInitializationService = (DeploymentInitializationService) context
>>               .lookup("DeploymentInitializationServiceBean");
>>       deploymentInitializationService.runAll();
>>       userTransaction.rollback();
>>   }
>>   @Test
>>   public void noop() {
>>       assertTrue(true);
>>   }
>> }
>> Open EJB loads great, everything is created and runs properly...but my transaction
never rolls back! I've gone so far as to turn on trace logging for all of the components,
but Hibernate, Open EJB, and Geronimo all tell me that a transaction is being opened, joined,
then rolled back successfully. For completeness, here is my openejb-test.xml file referred
to above:
>> <?xml version="1.0" encoding="UTF-8"?>
>> <openejb>
>> 	<SecurityService id="Default Security Service" />
>> 	<TransactionManager id="Default Transaction Manager" />
>> 	<Resource id="mysql_managed" type="DataSource">
>> 		JdbcDriver com.mysql.jdbc.Driver
>> 		JdbcUrl jdbc:mysql://localhost/testing
>> 		UserName root
>> 		JtaManaged true
>> 	</Resource>
>> 	<Resource id="Default JMS Resource Adapter" type="ActiveMQResourceAdapter" />
>> 	<Resource id="jms/connectionFactory" type="javax.jms.ConnectionFactory" />
>> 	<Resource id="Default Queue Connection Factory" type="QueueConnectionFactory"
>> 	<Resource id="Default Topic Connection Factory" type="TopicConnectionFactory"
>> 	<Resource id="jms/myQueue" type="javax.jms.Queue" />
>> </openejb>
>> I've been trying to get it working with HSQLDB instead of MySQL (they are unit tests
after all), but I decided just to experiment with another DBMS to rule that out. HSQLDB has
the exact same problem.

View raw message