I ran into a similar problem when I started using EJB3. As it turned out it wasn't a problem with EJB3 but a configuration issue with my database.
I was using MySql which by default uses a non transactional storage engine (at least in the Linux distribution). Here is some documentation from MySQL http://dev.mysql.com/doc/refman/4.1/en/storage-engines.html
Once I altered the database configuration to use the innodb storage engine my transaction rolled back as expected.
The default behaviour for the for the stateless session bean is to wrap each method call in a transaction or participate in an existing transaction (should it already exist). In the case where a transaction had not been created when you called the persist method on the entity manager you would have received a TransactionRequiredException.
Not sure if this is your particular problem but gives you something to check into.
Thx very much for the response! I think that may the issue as you mentioned. As, I'm using MySQL on Linux. I may have to read a little about its configuration.
I'll post my more findings...
Thx for your time.
Also, make sure your database is not set to auto-commit.
Okay, here is what is happening;
Even though the MySQL documentation says that innodb is enabled by default from version 4.0 onwards, it is partially true! On Linux the MySQl version 4.0.18(which I'm using) does not have innodb turned on. It is only true on Windows!!
So that is the source of my problem!!
This URL may also help anybody in the same boat...