Re: Rollback transactions in unit testing

2008-10-09 Thread David Blevins


On Sep 29, 2008, at 8:39 AM, Glauber Ferreira wrote:


Hi all.

I need to rollback transactions in order to revert all data modified
(deleted, updated, created) by my tests. How can I do that in the  
test code

listed in this link:
http://openejb.apache.org/3.0/unit-testing-transactions.html


Suggestions in this thread are pretty good.  A couple additional  
possibilities to throw on the stack..  If you throw a runtime  
exception from the TransactionBean call method the container will  
rollback the transaction.  Another option is to call the  
setRollbackOnly() method on the javax.ejb.SessionContext object.  A  
session ejb can have it injected with a field declared like @Resource  
SessionContext sessionContext;


-David



RE: Rollback transactions in unit testing

2008-10-02 Thread Marcin Kwapisz
 Marcin,
 the strategy you suggest should also work and is especially good for
 prototyping or smaller projects.
 
 In our case where we have a huge application with (1.5 Mio LoC,  1000
 EJBs,  100 database tables with complex relationships) we cannot drop
 (or
 empty) and create tables in junit tests. This would heavily impact the
 development and testing.
 this is the reason why in such cases a rollback after a unit test
 instead of
 makes sense.
[Marcin Kwapisz] 
I know. That's why we run as many unit tests as it is possible between server 
startup and shutdown.
But how to properly test transaction without committing it? (The link in 
Glauber Ferreira's post concerns testing transactions).
Can I rollback transaction that has been committed? We do not use BMT in our 
project.

We tried to create unit test that in one transaction (CMT not BMT):
1. Creates initial set of data
2. Calls business method to modify/remove/(etc.) entities
3. Checks results.
And that was not a good idea. The results of unit tests depended on JPA 
provider (or JPA settings), sometimes passed or sometimes not (the same test - 
that was really crazy). Manual flushing did not helped. We had to split that 
one transaction into three to make unit tests work properly.

Regards
-- 
Marcin  Kwapisz
Samodzielny Zakład Sieci Komputerowych
Politechnika Łódzka





RE: Rollback transactions in unit testing

2008-09-30 Thread Marcin Kwapisz
[Marcin Kwapisz] 
I do not understand why you want to rollback committed transaction, especially 
in unit test. Even, I do not know how to do it in JEE application. 
Maybe our way will suit you:

1. set drop and create strategy in persistence.xml (property name depends on 
JPA provider, we have separate file for unit testing)
2. Start OpenEJB (for example: perform ejb lookup) - database should be empty 
now
3. Create initial set of data in tables
4. Run test
5. Shutdown OpenEJB

Now, you can repeat steps 2-5 for another tests

Regards
-- 
Marcin Kwapisz
Division of Computer Networks
Technical Univeristy of Lodz, Poland






RE: Rollback transactions in unit testing

2008-09-30 Thread Andreas Karalus

Marcin,
the strategy you suggest should also work and is especially good for
prototyping or smaller projects. 

In our case where we have a huge application with (1.5 Mio LoC,  1000
EJBs,  100 database tables with complex relationships) we cannot drop (or
empty) and create tables in junit tests. This would heavily impact the
development and testing.
this is the reason why in such cases a rollback after a unit test instead of
makes sense. 

regards,
andreas 



Marcin Kwapisz-2 wrote:
 
 [Marcin Kwapisz] 
 I do not understand why you want to rollback committed transaction,
 especially in unit test. Even, I do not know how to do it in JEE
 application. 
 Maybe our way will suit you:
 
 1. set drop and create strategy in persistence.xml (property name depends
 on JPA provider, we have separate file for unit testing)
 2. Start OpenEJB (for example: perform ejb lookup) - database should be
 empty now
 3. Create initial set of data in tables
 4. Run test
 5. Shutdown OpenEJB
 
 Now, you can repeat steps 2-5 for another tests
 
 Regards
 -- 
 Marcin Kwapisz
 Division of Computer Networks
 Technical Univeristy of Lodz, Poland
 
 
 
 
 
 

-- 
View this message in context: 
http://www.nabble.com/Rollback-transactions-in-unit-testing-tp19724095p19749405.html
Sent from the OpenEJB User mailing list archive at Nabble.com.



Rollback transactions in unit testing

2008-09-29 Thread Glauber Ferreira
Hi all.

I need to rollback transactions in order to revert all data modified
(deleted, updated, created) by my tests. How can I do that in the test code
listed in this link:
http://openejb.apache.org/3.0/unit-testing-transactions.html


Thanks in advance.

-- 
Glauber Vinícius Ventura de Melo Ferreira
PGP: 0x5AA19EF5


Re: Rollback transactions in unit testing

2008-09-29 Thread Andreas Karalus

We are also using openejb for junit testing. In our tests we are using
UserTransaction to control the test data. Maybe  this approach might also
work for you. 
Below is the basic code, the startup and shutdown  of the container,  as
well as starting/stopping transaction could also be  moved to a base junit 
class. 
This works fine  with openejb 3.0, in 3.1-SNAPSHOT the UserTransaction can
be  retrieved with a jndi lookup (I think is java:openejb/UserTransaction)

public MyTest {

 static  MyService service;
 UserTransaction tx;

@BeforeClass
public static void  onBeforeClass() throws Exception{
   // start openejb embeded container  here
   InitialContext ctx  = new  IntialContext(props);
   // lookup service here
   service = (MyService)  ctx.lookup(java:openejb/MyServiceLocal);
 
}

@AfterClass
public static void  onAfterClass() throws Exception{
   // shutdown openejb
   OpenEJB.destroy();
}

@Before
public void onBefore() throws Exception{
  // start a UserTransaction for each  test method
  utx = new org.openejb.core.CoreUserTransaction()
  utx.begin();
}

@After
public void onAfter() throws Exception{
  utx.commit();  // you can do also a utx.rollback() here
}

//sample test  method
@Test
public void testServiceMethod() throws  Exception{
  service.doSomething();
}

}

Regards,
Andreas


Glauber Ferreira-2 wrote:
 
 Hi all.
 
 I need to rollback transactions in order to revert all data modified
 (deleted, updated, created) by my tests. How can I do that in the test
 code
 listed in this link:
 http://openejb.apache.org/3.0/unit-testing-transactions.html
 
 
 Thanks in advance.
 
 -- 
 Glauber Vinícius Ventura de Melo Ferreira
 PGP: 0x5AA19EF5
 
 

-- 
View this message in context: 
http://www.nabble.com/Rollback-transactions-in-unit-testing-tp19724095p19732849.html
Sent from the OpenEJB User mailing list archive at Nabble.com.