tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Blevins <david.blev...@visi.com>
Subject Re: Unit Testing Transactions ... what the?
Date Fri, 23 Apr 2010 22:47:01 GMT
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:

   http://svn.apache.org/repos/asf/openejb/trunk/openejb3/examples/transaction-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("hibernate.hbm2ddl.auto", "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.


Mime
View raw message