This discussion is archived
0 Replies Latest reply: Jun 21, 2012 1:23 AM by 945027 RSS

JPA UserTransaction rollback does not work

945027 Newbie
Currently Being Moderated
I try to describe my environment shortly. Technologies: EJB 3.1, JSF, JBoss 7.1.1

There are Servise-classes (@SessionScoped @Stateful). Servise-classes call Dao classes (@Stateless)

I want :
use EntityManager only into @StateLess beans (Dao)
have short transaction in most cases (like persist, merge)
have one long transaction for some multistep-methods (methods are in Dao also)
have actual (up to date, without first-level cache) data

I have: Pesistense.xml
<property name="" value="create-drop"/>


public class UserDaoBean implements UserDAO, Serializable {

@PersistenceContext(name = "MyEntityManager")
private EntityManager em;

public void update(User user) throws Exception {
User tmpUser = getUser(user.getUser());
//some code, should be rollback, if it is an exception

Transaction interceptor
public class TransactionInterceptor implements Serializable {

private UserTransaction userTransaction;

public Object verifyAccess(InvocationContext context) throws
Exception {
Object result = null;

try {
result = context.proceed();
} catch (Exception e) {
throw new CustomRuntimeException(e.getMessage());
return result;

Problem: If it is throw an Exception into Dao method, part data will save in DB instead of total rollback.

I think, is need Join Transaction to EM. Or disconnect persists each item to the DB right away (using cache). I've try different ways, but didn't have success.

Thanks for in advance!


  • Correct Answers - 10 points
  • Helpful Answers - 5 points