Thanks Gavin for the reply.
I finally figured something out. Working with new technology is always fun,
even if it is a bit frustrating. I'm very new to using EJB3 - in fact I
switched to using it (from tomcat/hibernate) when seam was still in it's first
releases (mainly cvs at that time) because I saw the power of the framework).
But now I need to go back and learn some of the things the framework manages
for me.
I ended up putting
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
on the class and method of the called method. Then in the method I create a
new EntityManager. It's a little heavy handed but does the trick. I thought I
could reuse the em for each transaction call; but couldn't figure it out. It
works, just wondering if there was a better way. I tried a couple of things
with UserTransaction but just didn't get it to work. Probably my fault.
Thanks again,
Chris
| @Name(value=importSale)
| @Stateful
| @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
| public class ImportSale implements IImport {
|
|private EntityManagerFactory emf = null;
|private EntityManager em;
|
|private EntityManager txEntityManager(){
| return getEntityManagerFactory().createEntityManager();
| }
|
|private EntityManagerFactory getEntityManagerFactory(){
| if(emf == null) {
| try {
| return (EntityManagerFactory)
Naming.getInitialContext().lookup(java:/customEntityManagerFactory);
| } catch(NamingException ne) {
| throw new IllegalArgumentException(EntityManagerFactory not
found, ne);
| }
| } else {
| return emf;
| }
|}
|
|@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
|public void processXML(ParseFile parseFile, State state, Element record)
{
| internalProcess(record);
|}
|
|private void internalProcess(Element record){
| try {
| em = txEntityManager();
| Contexts.getMethodContext().set(em, em); //added since DAO
method access the em via
|
//Contexts.lookupInAllStates(or
|// whatever the
method is called)
| if(processXML(record)){
| } else {
| Transactions.setTransactionRollbackOnly();
| }
| } catch(Exception ex){
| try {
| Transactions.setTransactionRollbackOnly();
| } catch(Exception e) {
| throw new RuntimeException(Could not rollback erred record,
e);
| }
| }
|}
|
|/snip rest
| }
|
View the original post :
http://www.jboss.com/index.html?module=bbop=viewtopicp=4059235#4059235
Reply to the post :
http://www.jboss.com/index.html?module=bbop=postingmode=replyp=4059235
___
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user