[jboss-user] [JBoss Seam] - Re: seam and batch/queue-processing

motte79 do-not-reply at jboss.com
Wed Sep 26 13:29:52 EDT 2007


No, i don't think so ... 

I need something like the following
PseudoCode:

  | @Stateful
  | @Startup
  | @Name("batch")
  | @Scope (ScopeType.APPLICATION)
  | @TransactionManagement (TransactionManagementType.BEAN)
  | public class BatchBean implements Batch {
  | 
  | 	private AtomicBoolean atomicBoolean = new AtomicBoolean();
  | 
  | //	Stateless bean
  | 	@In IncomingMessages incomingMessages;
  | //	Stateless bean
  | 	@In Task task;
  | 	@Resource SessionContext sessionContext;
  | 
  | 	@Asynchronous
  | 	@Create
  | 	public void parent () {
  | 
  | 		atomicBoolean.set(Boolean.TRUE);
  | 		task.init (incomingMessages);
  | 
  | 		while (atomicBoolean.get()) {
  | 			
  | 			try {
  | 				Thread.sleep(100);              
  | 			} catch (InterruptedException ie ) {
  | 				// nothing
  | 			}
  | 
  | 			
  | 			while (atomicBoolean.get()) {
  | 				UserTransaction tx = sessionContext.getUserTransaction();
  | 				try {
  | 					tx.begin();
  | 					Object o = incomingMessages.next();
  | 					if (o != null) {
  | 						// synchonous call
  | 						task.doTask(o);
  | 						tx.commit();
  | 					} else {
  | 						tx.commit();
  | 						break;
  | 					}
  | 				} catch (Exception e) {
  | 					tx.rollback();
  | 				}
  | 			}
  | 		}
  | 	}
  | 
  | 	@Shutdown
  | 	public void destroy () {
  | 		task.finishLastMessageAndClose();
  | 		atomicBoolean.set(Boolean.FALSE);
  | 	}
  | }
  | 


@Shutdown is called before @Destroy and @Remove on undeployment and server-shutdown

This approach is not possible because an applicationbean cannot be invoked by two different threads at the same time ... (the parent- and the destroy-method)
Second there is no @Shutdown which waites for the asynchronous 'parent'-method to finish after invokation of the @Shutdown - method ... 

As asked in another thread i had also problems to get BEAN-managed transactions work with seam-components .. For the most components i need CONTAINER-managed Transactions, therefore i've installed 
    <transaction:ejb-transaction/>
in components.xml

The MBean - approach above (Fri Sep 21, 2007 10:41 AM) creates a simple Thread, initialize it with the beans and have it run, but this has the sideeffect, that the method-invokations incomingMessages.next() and task.doTask() are running both in there own transactions ... that could cause the loss of messages ... ). As described before there is also a problem to synchronize the MBean with the Component-creation (Task, IncomingMessages) because the MBean is earlier up than seam. And second the MBean lives on shutdown and on undeploy longer than seam .. 

Maybe i'm mixing some concepts which should better stand alone .. 
I've not much experience with EJB3, Jboss, etc.
;)




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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4088956



More information about the jboss-user mailing list