I have a question concerning batch entity deletion. I need to delete multiple 
entities at once, while some of them have references to other entities. When I 
try to delete a group of entities without any references, the operation is 
successful. But if at least one of the entities in the batch has references, 
the transaction is rolled back entirely. What I am trying to do is to delete 
all the entities without references, while the others (entites in the batch 
with references) can be left unchanged. I am trying to delete entities using 
separate transactions for each entity, but still fail. JBoss Seam tutorial 
mentions manual transaction management through conversation management (using 
the annotations @Begin(flushMode = FlushModeType.MANUAL) and @End).
I am trying to perform deletion using the two beans. The first bean implies 
cycle iteration with all ids and EntityManager is not injected into this bean. 
A separate deletion is performed within the second bean, this one injects 
EntityManager. It is not clear how to manage conversations. Both beans are 
conversation beans. After the first iteration the first bean is performed in 
the conversation context declared in the second bean, i.e. "join = true". If I 
declare "join = false" the first iteration returns 
exception:"java.lang.IllegalStateException: begin method invoked from a long 
running conversation, try using @Begin(join=true) on method: remove". With 
"join = true" each next iteration is performed within the same conversation, 
and as far as I understand in the same transaction. This results in entire 
rollback of all deletion operations.  Please, help me !!! What is the right way 
to do this ?


  | import java.util.*;
  | import org.jboss.seam.Component;
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.*;
  | import org.jboss.seam.contexts.Contexts;
  | import org.jboss.seam.core.Conversation;
  | import org.jboss.seam.log.Log;
  | 
  | @Name("entityGroupRemover")
  | @Scope(ScopeType.CONVERSATION)
  | public class EntityGroupRemover {
  |     
  |             
  |     @Create
  |     @Begin(id = "groupRemoverConversation", join = true)
  |     public void remove(Long[] ids, Class entityClass) {
  |             for (int i = 0; i < ids.length; i++) {                          
                
  |                     try {
  |                             log.info("conversationId = " + 
Conversation.instance().getId());
  |                             SingleEntityRemover remover = 
(SingleEntityRemover)Component.getInstance("singleEntityRemover",
  |  ScopeType.CONVERSATION, true);
  |                             remover.removeSingleEntity(ids, entityClass);
  |                             remover.commit();
  |                     } catch(Exception e) {
  |                             e.printStackTrace();
  |                     }
  |             }
  |             Conversation.instance().end(true);              
  |     }
  |                     
  |     
  | }
  | 


  | import javax.persistence.EntityManager;
  | import org.jboss.seam.ScopeType;
  | import org.jboss.seam.annotations.*;
  | import org.jboss.seam.contexts.Contexts;
  | import org.jboss.seam.core.Conversation;
  | import org.jboss.seam.core.Messages;
  | import org.jboss.seam.log.Log;
  | 
  | @Name("singleEntityRemover")
  | @Scope(ScopeType.CONVERSATION)
  | public class SingleEntityRemover {
  |     
  |     @Logger
  |     Log log;
  |             
  |     @In(value = "entityManager")
  |     EntityManager em;
  |     
  |     @Begin(id = "singleRemoverConversation", flushMode = 
FlushModeType.MANUAL, join = false, nested = true)
  |     public void removeSingleEntity(Long id, Class entityClass) {
  |             log.info("conversationId = " + Conversation.instance().getId());
  |             Object entity = em.find(entityClass, id);
  |             em.remove(entity);
  |     }
  |     
  |     @End
  |     public void commit() throws Exception {
  |             try {           
  |                     em.flush();     
  |                     log.info("transaction successed !!!");
  |             } catch(Exception e) {
  |                     log.info("transaction failed !!!");
  |                     throw  e;
  |             }               
  |     }
  |     
  | }
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4085027#4085027

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4085027
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to