A transaction can get aborted if you're exitting an ejb method through an exception. If you catch this exception outside the ejb-call, and proceed by calling another ejb that also tries to access the db, you'll get this, because eventhough you caught the exception, you caught it outside the ejb, therefore the transaction is aborted.