When calling an EJB3 method the transaction attribute is being ignored.
Issue
- When calling an EJB method from within the same EJB, the transaction attribute is being ignored.
For example:
@Stateless
public class TransactionBean implements Transaction {
...
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void firstMethod() {
// ... some action to update the database
this.secondMethod();
}
// a new transaction here
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void secondMethod() {
// ... some action to update the database
Session.setRollBackOnly();// this rollsback the work done in this method AND firstMethod - WHY? it is in a new transaction
}
}
- REQUIRES_NEW transaction causing rollback to calling method. Method 1 calls method 2, and method 2 interrogates the database within its own transaction Why does the second call to method 2 not result in a new transaction being created?
- If I instantiate a StatelessSessionBean and call a method the transaction are not respected, what is wrong?
- If an interal method is called the transaction attribute does not have any effect, why?
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@TransactionManagement(TransactionManagementType.CONTAINER)
public MyClassBean implements MyClass {
@Override
public doPSomething() {
doSomethingIntern();
doSomethingIntern2();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void doSomethingIntern() {
...
}
private void doSomethingIntern2() {
Aworker worker = new Aworker(); // this is a class annotated with @Stateless and REQUIRES_NEW
worker.doSomethingInANewTransaction()
}
}
Environment
- Red Hat JBoss Enterprise Application Platform (EAP)
- Java Enterprise Edition (JEE)
- EJB
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
